diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java new file mode 100644 index 0000000..ad0b908 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface IRobotSystemConfigService extends IService { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(Page page, QueryWrapper query); +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java new file mode 100644 index 0000000..ad0b908 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface IRobotSystemConfigService extends IService { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(Page page, QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 6d3c2af..609a4af 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -1,27 +1,36 @@ package com.casic.missiles.modular.robot.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.ProcessMessageResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.SensorStatusDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.StopStateResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.VoltageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; @@ -37,16 +46,18 @@ @Service public class RobotStatusInfoServiceImpl extends ServiceImpl implements IRobotStatusInfoService { private final AbstractDictService dictService; + private final IRobotInfoService robotInfoService; - public RobotStatusInfoServiceImpl(AbstractDictService dictService) { + public RobotStatusInfoServiceImpl(AbstractDictService dictService, @Lazy IRobotInfoService robotInfoService) { this.dictService = dictService; + this.robotInfoService = robotInfoService; } @Override public void updateConnStatus(String robotId, Integer status) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("conn_status", status); - query.eq("robot_id", robotId); + query.set("conn_status" , status); + query.eq("robot_id" , robotId); update(query); } @@ -60,29 +71,29 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { - statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); + statusInfo.setDiscernTypeName(getDictName("discernType" , statusInfo.getDiscernType())); //暂停状态 - statusInfo.setAppNavPauseName(getDictName("appNavPause", statusInfo.getAppNavPause())); + statusInfo.setAppNavPauseName(getDictName("appNavPause" , statusInfo.getAppNavPause())); //开启状态 - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - String statusName = getDictName("trackStatus", statusInfo.getNavigationStatus()); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + String statusName = getDictName("trackStatus" , statusInfo.getNavigationStatus()); statusInfo.setNavigationStatusName(statusName); - statusInfo.setDataRecordName(getDictName("trackStatus", statusInfo.getDataRecord())); - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - statusInfo.setTrackName(getDictName("trackStatus", statusInfo.getTrack())); - statusInfo.setInsStatusName(getDictName("trackStatus", statusInfo.getInsStatus())); - statusInfo.setAppStopNavtrackName(getDictName("trackStatus", statusInfo.getAppStopNavtrack())); - statusInfo.setTrackRecordName(getDictName("trackStatus", statusInfo.getTrackRecord())); + statusInfo.setDataRecordName(getDictName("trackStatus" , statusInfo.getDataRecord())); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + statusInfo.setTrackName(getDictName("trackStatus" , statusInfo.getTrack())); + statusInfo.setInsStatusName(getDictName("trackStatus" , statusInfo.getInsStatus())); + statusInfo.setAppStopNavtrackName(getDictName("trackStatus" , statusInfo.getAppStopNavtrack())); + statusInfo.setTrackRecordName(getDictName("trackStatus" , statusInfo.getTrackRecord())); //收到状态 - statusInfo.setLidarMsgName(getDictName("lidarMsg", statusInfo.getLidarMsg())); - statusInfo.setImuMsgName(getDictName("lidarMsg", statusInfo.getImuMsg())); - statusInfo.setChargeMsgName(getDictName("lidarMsg", statusInfo.getChargeMsg())); - statusInfo.setGpsMsgName(getDictName("lidarMsg", statusInfo.getGpsMsg())); + statusInfo.setLidarMsgName(getDictName("lidarMsg" , statusInfo.getLidarMsg())); + statusInfo.setImuMsgName(getDictName("lidarMsg" , statusInfo.getImuMsg())); + statusInfo.setChargeMsgName(getDictName("lidarMsg" , statusInfo.getChargeMsg())); + statusInfo.setGpsMsgName(getDictName("lidarMsg" , statusInfo.getGpsMsg())); //连接状态 - statusInfo.setConnStatusName(getDictName("connStatus", statusInfo.getConnStatus())); + statusInfo.setConnStatusName(getDictName("connStatus" , statusInfo.getConnStatus())); } @@ -114,11 +125,11 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); SensorStatusDTO msg = responseDTO.getMsg(); - query.set("lidar_msg", msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); - query.set("imu_msg", msg.getImuMsg() == null ? 0 : msg.getImuMsg()); - query.set("charge_msg", msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); - query.set("gps_msg", msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); - query.eq("robot_id", robotId); + query.set("lidar_msg" , msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); + query.set("imu_msg" , msg.getImuMsg() == null ? 0 : msg.getImuMsg()); + query.set("charge_msg" , msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); + query.set("gps_msg" , msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); + query.eq("robot_id" , robotId); update(query); } } @@ -137,8 +148,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); ProcessMessageResponseDTO msg = responseDTO.getMsg(); - query.set("process_message", msg.getP()); - query.eq("robot_id", robotId); + query.set("process_message" , msg.getP()); + query.eq("robot_id" , robotId); update(query); } } @@ -157,8 +168,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_nav_pause", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_nav_pause" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -171,8 +182,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_stop_navtrack", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_stop_navtrack" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -180,16 +191,16 @@ @Override public void updateCurrTask(String robotId, Long currRouteId, Long currTaskId) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("curr_route_id", currRouteId); - query.set("curr_task_id", currTaskId); - query.eq("robot_id", robotId); + query.set("curr_route_id" , currRouteId); + query.set("curr_task_id" , currTaskId); + query.eq("robot_id" , robotId); update(query); } @Override public RobotStatusInfo getStatusByRobotId(String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotId); + query.eq("robot_id" , robotId); return getOne(query); } @@ -199,12 +210,65 @@ RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); if (responseDTO != null && responseDTO.getMsg() != null) { - log.info("速度信息保存:{}", responseDTO.getMsg()); + log.info("速度信息保存:{}" , responseDTO.getMsg()); UpdateWrapper query = new UpdateWrapper<>(); - query.set("robot_v", responseDTO.getMsg().getSpeed().getV()); - query.set("robot_w", responseDTO.getMsg().getSpeed().getW()); - query.eq("robot_id", robotId); + query.set("robot_v" , responseDTO.getMsg().getSpeed().getV()); + query.set("robot_w" , responseDTO.getMsg().getSpeed().getW()); + query.eq("robot_id" , robotId); update(query); } } + + @Override + public void saveStopState(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + if (responseDTO != null && responseDTO.getMsg() != null) { + log.info("急停状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + query.set(RobotStatusInfo::getButton, responseDTO.getMsg().getButton()); + query.set(RobotStatusInfo::getCollision, responseDTO.getMsg().getCollision()); + query.set(RobotStatusInfo::getSonic, responseDTO.getMsg().getSonic()); + query.set(RobotStatusInfo::getSoft, responseDTO.getMsg().getSoft()); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + @Transactional + @Override + public void saveVoltageResponseMessage(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + //电压下限 45V 电压上限 58.8V 估算电量 + if (responseDTO != null && responseDTO.getMsg() != null) { + RobotInfo info = robotInfoService.getById(robotId); + log.info("电压状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + if (CollectionUtil.isNotEmpty(responseDTO.getMsg().getVoltage())) { + Integer v = responseDTO.getMsg().getVoltage().get(0); + query.set(RobotStatusInfo::getVoltage, v); + //计算电量 + Double quantity = new BigDecimal(v - info.getVoltageMin()).divide(new BigDecimal(info.getVoltageMax() - info.getVoltageMin()),2, BigDecimal.ROUND_HALF_UP).doubleValue(); + query.set(RobotStatusInfo::getElectricityQuantity, quantity*100); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + } + + private RobotResponseDTO parseJson(MqttMessage message, TypeReference> cls) { + String json = new String(message.getPayload()); + if (json.startsWith("\"")) { + json = json.substring(1); + } + if (json.endsWith("\"")) { + json = json.substring(0, json.length() - 1); + } + json = json.replaceAll("\\\\" , ""); + log.info(json); + RobotResponseDTO responseDTO = JSON.parseObject(json, cls); + return responseDTO; + } } \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java new file mode 100644 index 0000000..ad0b908 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface IRobotSystemConfigService extends IService { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(Page page, QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 6d3c2af..609a4af 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -1,27 +1,36 @@ package com.casic.missiles.modular.robot.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.ProcessMessageResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.SensorStatusDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.StopStateResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.VoltageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; @@ -37,16 +46,18 @@ @Service public class RobotStatusInfoServiceImpl extends ServiceImpl implements IRobotStatusInfoService { private final AbstractDictService dictService; + private final IRobotInfoService robotInfoService; - public RobotStatusInfoServiceImpl(AbstractDictService dictService) { + public RobotStatusInfoServiceImpl(AbstractDictService dictService, @Lazy IRobotInfoService robotInfoService) { this.dictService = dictService; + this.robotInfoService = robotInfoService; } @Override public void updateConnStatus(String robotId, Integer status) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("conn_status", status); - query.eq("robot_id", robotId); + query.set("conn_status" , status); + query.eq("robot_id" , robotId); update(query); } @@ -60,29 +71,29 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { - statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); + statusInfo.setDiscernTypeName(getDictName("discernType" , statusInfo.getDiscernType())); //暂停状态 - statusInfo.setAppNavPauseName(getDictName("appNavPause", statusInfo.getAppNavPause())); + statusInfo.setAppNavPauseName(getDictName("appNavPause" , statusInfo.getAppNavPause())); //开启状态 - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - String statusName = getDictName("trackStatus", statusInfo.getNavigationStatus()); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + String statusName = getDictName("trackStatus" , statusInfo.getNavigationStatus()); statusInfo.setNavigationStatusName(statusName); - statusInfo.setDataRecordName(getDictName("trackStatus", statusInfo.getDataRecord())); - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - statusInfo.setTrackName(getDictName("trackStatus", statusInfo.getTrack())); - statusInfo.setInsStatusName(getDictName("trackStatus", statusInfo.getInsStatus())); - statusInfo.setAppStopNavtrackName(getDictName("trackStatus", statusInfo.getAppStopNavtrack())); - statusInfo.setTrackRecordName(getDictName("trackStatus", statusInfo.getTrackRecord())); + statusInfo.setDataRecordName(getDictName("trackStatus" , statusInfo.getDataRecord())); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + statusInfo.setTrackName(getDictName("trackStatus" , statusInfo.getTrack())); + statusInfo.setInsStatusName(getDictName("trackStatus" , statusInfo.getInsStatus())); + statusInfo.setAppStopNavtrackName(getDictName("trackStatus" , statusInfo.getAppStopNavtrack())); + statusInfo.setTrackRecordName(getDictName("trackStatus" , statusInfo.getTrackRecord())); //收到状态 - statusInfo.setLidarMsgName(getDictName("lidarMsg", statusInfo.getLidarMsg())); - statusInfo.setImuMsgName(getDictName("lidarMsg", statusInfo.getImuMsg())); - statusInfo.setChargeMsgName(getDictName("lidarMsg", statusInfo.getChargeMsg())); - statusInfo.setGpsMsgName(getDictName("lidarMsg", statusInfo.getGpsMsg())); + statusInfo.setLidarMsgName(getDictName("lidarMsg" , statusInfo.getLidarMsg())); + statusInfo.setImuMsgName(getDictName("lidarMsg" , statusInfo.getImuMsg())); + statusInfo.setChargeMsgName(getDictName("lidarMsg" , statusInfo.getChargeMsg())); + statusInfo.setGpsMsgName(getDictName("lidarMsg" , statusInfo.getGpsMsg())); //连接状态 - statusInfo.setConnStatusName(getDictName("connStatus", statusInfo.getConnStatus())); + statusInfo.setConnStatusName(getDictName("connStatus" , statusInfo.getConnStatus())); } @@ -114,11 +125,11 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); SensorStatusDTO msg = responseDTO.getMsg(); - query.set("lidar_msg", msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); - query.set("imu_msg", msg.getImuMsg() == null ? 0 : msg.getImuMsg()); - query.set("charge_msg", msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); - query.set("gps_msg", msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); - query.eq("robot_id", robotId); + query.set("lidar_msg" , msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); + query.set("imu_msg" , msg.getImuMsg() == null ? 0 : msg.getImuMsg()); + query.set("charge_msg" , msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); + query.set("gps_msg" , msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); + query.eq("robot_id" , robotId); update(query); } } @@ -137,8 +148,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); ProcessMessageResponseDTO msg = responseDTO.getMsg(); - query.set("process_message", msg.getP()); - query.eq("robot_id", robotId); + query.set("process_message" , msg.getP()); + query.eq("robot_id" , robotId); update(query); } } @@ -157,8 +168,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_nav_pause", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_nav_pause" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -171,8 +182,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_stop_navtrack", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_stop_navtrack" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -180,16 +191,16 @@ @Override public void updateCurrTask(String robotId, Long currRouteId, Long currTaskId) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("curr_route_id", currRouteId); - query.set("curr_task_id", currTaskId); - query.eq("robot_id", robotId); + query.set("curr_route_id" , currRouteId); + query.set("curr_task_id" , currTaskId); + query.eq("robot_id" , robotId); update(query); } @Override public RobotStatusInfo getStatusByRobotId(String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotId); + query.eq("robot_id" , robotId); return getOne(query); } @@ -199,12 +210,65 @@ RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); if (responseDTO != null && responseDTO.getMsg() != null) { - log.info("速度信息保存:{}", responseDTO.getMsg()); + log.info("速度信息保存:{}" , responseDTO.getMsg()); UpdateWrapper query = new UpdateWrapper<>(); - query.set("robot_v", responseDTO.getMsg().getSpeed().getV()); - query.set("robot_w", responseDTO.getMsg().getSpeed().getW()); - query.eq("robot_id", robotId); + query.set("robot_v" , responseDTO.getMsg().getSpeed().getV()); + query.set("robot_w" , responseDTO.getMsg().getSpeed().getW()); + query.eq("robot_id" , robotId); update(query); } } + + @Override + public void saveStopState(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + if (responseDTO != null && responseDTO.getMsg() != null) { + log.info("急停状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + query.set(RobotStatusInfo::getButton, responseDTO.getMsg().getButton()); + query.set(RobotStatusInfo::getCollision, responseDTO.getMsg().getCollision()); + query.set(RobotStatusInfo::getSonic, responseDTO.getMsg().getSonic()); + query.set(RobotStatusInfo::getSoft, responseDTO.getMsg().getSoft()); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + @Transactional + @Override + public void saveVoltageResponseMessage(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + //电压下限 45V 电压上限 58.8V 估算电量 + if (responseDTO != null && responseDTO.getMsg() != null) { + RobotInfo info = robotInfoService.getById(robotId); + log.info("电压状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + if (CollectionUtil.isNotEmpty(responseDTO.getMsg().getVoltage())) { + Integer v = responseDTO.getMsg().getVoltage().get(0); + query.set(RobotStatusInfo::getVoltage, v); + //计算电量 + Double quantity = new BigDecimal(v - info.getVoltageMin()).divide(new BigDecimal(info.getVoltageMax() - info.getVoltageMin()),2, BigDecimal.ROUND_HALF_UP).doubleValue(); + query.set(RobotStatusInfo::getElectricityQuantity, quantity*100); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + } + + private RobotResponseDTO parseJson(MqttMessage message, TypeReference> cls) { + String json = new String(message.getPayload()); + if (json.startsWith("\"")) { + json = json.substring(1); + } + if (json.endsWith("\"")) { + json = json.substring(0, json.length() - 1); + } + json = json.replaceAll("\\\\" , ""); + log.info(json); + RobotResponseDTO responseDTO = JSON.parseObject(json, cls); + return responseDTO; + } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java new file mode 100644 index 0000000..a94f6ad --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RobotSystemConfigMapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +@Service +public class RobotSystemConfigServiceImpl extends ServiceImpl implements IRobotSystemConfigService { + @Override + public List selectRobotSystemConfigPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRobotSystemConfigPage(page, query); + } +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java new file mode 100644 index 0000000..ad0b908 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface IRobotSystemConfigService extends IService { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(Page page, QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 6d3c2af..609a4af 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -1,27 +1,36 @@ package com.casic.missiles.modular.robot.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.ProcessMessageResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.SensorStatusDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.StopStateResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.VoltageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; @@ -37,16 +46,18 @@ @Service public class RobotStatusInfoServiceImpl extends ServiceImpl implements IRobotStatusInfoService { private final AbstractDictService dictService; + private final IRobotInfoService robotInfoService; - public RobotStatusInfoServiceImpl(AbstractDictService dictService) { + public RobotStatusInfoServiceImpl(AbstractDictService dictService, @Lazy IRobotInfoService robotInfoService) { this.dictService = dictService; + this.robotInfoService = robotInfoService; } @Override public void updateConnStatus(String robotId, Integer status) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("conn_status", status); - query.eq("robot_id", robotId); + query.set("conn_status" , status); + query.eq("robot_id" , robotId); update(query); } @@ -60,29 +71,29 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { - statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); + statusInfo.setDiscernTypeName(getDictName("discernType" , statusInfo.getDiscernType())); //暂停状态 - statusInfo.setAppNavPauseName(getDictName("appNavPause", statusInfo.getAppNavPause())); + statusInfo.setAppNavPauseName(getDictName("appNavPause" , statusInfo.getAppNavPause())); //开启状态 - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - String statusName = getDictName("trackStatus", statusInfo.getNavigationStatus()); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + String statusName = getDictName("trackStatus" , statusInfo.getNavigationStatus()); statusInfo.setNavigationStatusName(statusName); - statusInfo.setDataRecordName(getDictName("trackStatus", statusInfo.getDataRecord())); - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - statusInfo.setTrackName(getDictName("trackStatus", statusInfo.getTrack())); - statusInfo.setInsStatusName(getDictName("trackStatus", statusInfo.getInsStatus())); - statusInfo.setAppStopNavtrackName(getDictName("trackStatus", statusInfo.getAppStopNavtrack())); - statusInfo.setTrackRecordName(getDictName("trackStatus", statusInfo.getTrackRecord())); + statusInfo.setDataRecordName(getDictName("trackStatus" , statusInfo.getDataRecord())); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + statusInfo.setTrackName(getDictName("trackStatus" , statusInfo.getTrack())); + statusInfo.setInsStatusName(getDictName("trackStatus" , statusInfo.getInsStatus())); + statusInfo.setAppStopNavtrackName(getDictName("trackStatus" , statusInfo.getAppStopNavtrack())); + statusInfo.setTrackRecordName(getDictName("trackStatus" , statusInfo.getTrackRecord())); //收到状态 - statusInfo.setLidarMsgName(getDictName("lidarMsg", statusInfo.getLidarMsg())); - statusInfo.setImuMsgName(getDictName("lidarMsg", statusInfo.getImuMsg())); - statusInfo.setChargeMsgName(getDictName("lidarMsg", statusInfo.getChargeMsg())); - statusInfo.setGpsMsgName(getDictName("lidarMsg", statusInfo.getGpsMsg())); + statusInfo.setLidarMsgName(getDictName("lidarMsg" , statusInfo.getLidarMsg())); + statusInfo.setImuMsgName(getDictName("lidarMsg" , statusInfo.getImuMsg())); + statusInfo.setChargeMsgName(getDictName("lidarMsg" , statusInfo.getChargeMsg())); + statusInfo.setGpsMsgName(getDictName("lidarMsg" , statusInfo.getGpsMsg())); //连接状态 - statusInfo.setConnStatusName(getDictName("connStatus", statusInfo.getConnStatus())); + statusInfo.setConnStatusName(getDictName("connStatus" , statusInfo.getConnStatus())); } @@ -114,11 +125,11 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); SensorStatusDTO msg = responseDTO.getMsg(); - query.set("lidar_msg", msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); - query.set("imu_msg", msg.getImuMsg() == null ? 0 : msg.getImuMsg()); - query.set("charge_msg", msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); - query.set("gps_msg", msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); - query.eq("robot_id", robotId); + query.set("lidar_msg" , msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); + query.set("imu_msg" , msg.getImuMsg() == null ? 0 : msg.getImuMsg()); + query.set("charge_msg" , msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); + query.set("gps_msg" , msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); + query.eq("robot_id" , robotId); update(query); } } @@ -137,8 +148,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); ProcessMessageResponseDTO msg = responseDTO.getMsg(); - query.set("process_message", msg.getP()); - query.eq("robot_id", robotId); + query.set("process_message" , msg.getP()); + query.eq("robot_id" , robotId); update(query); } } @@ -157,8 +168,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_nav_pause", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_nav_pause" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -171,8 +182,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_stop_navtrack", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_stop_navtrack" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -180,16 +191,16 @@ @Override public void updateCurrTask(String robotId, Long currRouteId, Long currTaskId) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("curr_route_id", currRouteId); - query.set("curr_task_id", currTaskId); - query.eq("robot_id", robotId); + query.set("curr_route_id" , currRouteId); + query.set("curr_task_id" , currTaskId); + query.eq("robot_id" , robotId); update(query); } @Override public RobotStatusInfo getStatusByRobotId(String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotId); + query.eq("robot_id" , robotId); return getOne(query); } @@ -199,12 +210,65 @@ RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); if (responseDTO != null && responseDTO.getMsg() != null) { - log.info("速度信息保存:{}", responseDTO.getMsg()); + log.info("速度信息保存:{}" , responseDTO.getMsg()); UpdateWrapper query = new UpdateWrapper<>(); - query.set("robot_v", responseDTO.getMsg().getSpeed().getV()); - query.set("robot_w", responseDTO.getMsg().getSpeed().getW()); - query.eq("robot_id", robotId); + query.set("robot_v" , responseDTO.getMsg().getSpeed().getV()); + query.set("robot_w" , responseDTO.getMsg().getSpeed().getW()); + query.eq("robot_id" , robotId); update(query); } } + + @Override + public void saveStopState(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + if (responseDTO != null && responseDTO.getMsg() != null) { + log.info("急停状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + query.set(RobotStatusInfo::getButton, responseDTO.getMsg().getButton()); + query.set(RobotStatusInfo::getCollision, responseDTO.getMsg().getCollision()); + query.set(RobotStatusInfo::getSonic, responseDTO.getMsg().getSonic()); + query.set(RobotStatusInfo::getSoft, responseDTO.getMsg().getSoft()); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + @Transactional + @Override + public void saveVoltageResponseMessage(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + //电压下限 45V 电压上限 58.8V 估算电量 + if (responseDTO != null && responseDTO.getMsg() != null) { + RobotInfo info = robotInfoService.getById(robotId); + log.info("电压状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + if (CollectionUtil.isNotEmpty(responseDTO.getMsg().getVoltage())) { + Integer v = responseDTO.getMsg().getVoltage().get(0); + query.set(RobotStatusInfo::getVoltage, v); + //计算电量 + Double quantity = new BigDecimal(v - info.getVoltageMin()).divide(new BigDecimal(info.getVoltageMax() - info.getVoltageMin()),2, BigDecimal.ROUND_HALF_UP).doubleValue(); + query.set(RobotStatusInfo::getElectricityQuantity, quantity*100); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + } + + private RobotResponseDTO parseJson(MqttMessage message, TypeReference> cls) { + String json = new String(message.getPayload()); + if (json.startsWith("\"")) { + json = json.substring(1); + } + if (json.endsWith("\"")) { + json = json.substring(0, json.length() - 1); + } + json = json.replaceAll("\\\\" , ""); + log.info(json); + RobotResponseDTO responseDTO = JSON.parseObject(json, cls); + return responseDTO; + } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java new file mode 100644 index 0000000..a94f6ad --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RobotSystemConfigMapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +@Service +public class RobotSystemConfigServiceImpl extends ServiceImpl implements IRobotSystemConfigService { + @Override + public List selectRobotSystemConfigPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRobotSystemConfigPage(page, query); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java index 286977e..33359e9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java @@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.robot.dao.RobotTrajectoryInfoMapper; +import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.PoseMessageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Date; @@ -27,6 +30,11 @@ */ @Service public class RobotTrajectoryInfoServiceImpl extends ServiceImpl implements IRobotTrajectoryInfoService { + private final IRobotStatusInfoService robotStatusInfoService; + + public RobotTrajectoryInfoServiceImpl(@Lazy IRobotStatusInfoService robotStatusInfoService) { + this.robotStatusInfoService = robotStatusInfoService; + } @Override public List selectRobotTrajectoryInfoPage(Page page, QueryWrapper query) { @@ -35,18 +43,26 @@ @Override public void savePoseMessage(String robotId, MqttMessage message) { + String json = new String(message.getPayload()); RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); - if (responseDTO.getMsg() != null) { - PoseMessageResponseDTO dto = responseDTO.getMsg(); - RobotTrajectoryInfo info = new RobotTrajectoryInfo(); - info.setRobotId(Long.valueOf(robotId)); - info.setCreateTime(new Date()); - info.setPostionX(dto.getX()); - info.setPostionY(dto.getY()); - info.setPostionZ(dto.getZ()); - info.setTheta(dto.getTheta()); + + //读取导航状态,如果导航未开启则不存储 + RobotStatusInfo statusInfo = robotStatusInfoService.getStatusByRobotId(robotId); + if (statusInfo != null && responseDTO.getMsg() != null) { + //执行循迹 保存当前轨迹信息 + if (statusInfo.getCurrRouteId() != null) { + PoseMessageResponseDTO dto = responseDTO.getMsg(); + RobotTrajectoryInfo info = new RobotTrajectoryInfo(); + info.setRobotId(Long.valueOf(robotId)); + info.setCreateTime(new Date()); + info.setPostionX(dto.getX()); + info.setPostionY(dto.getY()); + info.setPostionZ(dto.getZ()); + info.setTheta(dto.getTheta()); + save(info); + } } } diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java new file mode 100644 index 0000000..ad0b908 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface IRobotSystemConfigService extends IService { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(Page page, QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 6d3c2af..609a4af 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -1,27 +1,36 @@ package com.casic.missiles.modular.robot.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.ProcessMessageResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.SensorStatusDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.StopStateResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.VoltageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; @@ -37,16 +46,18 @@ @Service public class RobotStatusInfoServiceImpl extends ServiceImpl implements IRobotStatusInfoService { private final AbstractDictService dictService; + private final IRobotInfoService robotInfoService; - public RobotStatusInfoServiceImpl(AbstractDictService dictService) { + public RobotStatusInfoServiceImpl(AbstractDictService dictService, @Lazy IRobotInfoService robotInfoService) { this.dictService = dictService; + this.robotInfoService = robotInfoService; } @Override public void updateConnStatus(String robotId, Integer status) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("conn_status", status); - query.eq("robot_id", robotId); + query.set("conn_status" , status); + query.eq("robot_id" , robotId); update(query); } @@ -60,29 +71,29 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { - statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); + statusInfo.setDiscernTypeName(getDictName("discernType" , statusInfo.getDiscernType())); //暂停状态 - statusInfo.setAppNavPauseName(getDictName("appNavPause", statusInfo.getAppNavPause())); + statusInfo.setAppNavPauseName(getDictName("appNavPause" , statusInfo.getAppNavPause())); //开启状态 - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - String statusName = getDictName("trackStatus", statusInfo.getNavigationStatus()); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + String statusName = getDictName("trackStatus" , statusInfo.getNavigationStatus()); statusInfo.setNavigationStatusName(statusName); - statusInfo.setDataRecordName(getDictName("trackStatus", statusInfo.getDataRecord())); - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - statusInfo.setTrackName(getDictName("trackStatus", statusInfo.getTrack())); - statusInfo.setInsStatusName(getDictName("trackStatus", statusInfo.getInsStatus())); - statusInfo.setAppStopNavtrackName(getDictName("trackStatus", statusInfo.getAppStopNavtrack())); - statusInfo.setTrackRecordName(getDictName("trackStatus", statusInfo.getTrackRecord())); + statusInfo.setDataRecordName(getDictName("trackStatus" , statusInfo.getDataRecord())); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + statusInfo.setTrackName(getDictName("trackStatus" , statusInfo.getTrack())); + statusInfo.setInsStatusName(getDictName("trackStatus" , statusInfo.getInsStatus())); + statusInfo.setAppStopNavtrackName(getDictName("trackStatus" , statusInfo.getAppStopNavtrack())); + statusInfo.setTrackRecordName(getDictName("trackStatus" , statusInfo.getTrackRecord())); //收到状态 - statusInfo.setLidarMsgName(getDictName("lidarMsg", statusInfo.getLidarMsg())); - statusInfo.setImuMsgName(getDictName("lidarMsg", statusInfo.getImuMsg())); - statusInfo.setChargeMsgName(getDictName("lidarMsg", statusInfo.getChargeMsg())); - statusInfo.setGpsMsgName(getDictName("lidarMsg", statusInfo.getGpsMsg())); + statusInfo.setLidarMsgName(getDictName("lidarMsg" , statusInfo.getLidarMsg())); + statusInfo.setImuMsgName(getDictName("lidarMsg" , statusInfo.getImuMsg())); + statusInfo.setChargeMsgName(getDictName("lidarMsg" , statusInfo.getChargeMsg())); + statusInfo.setGpsMsgName(getDictName("lidarMsg" , statusInfo.getGpsMsg())); //连接状态 - statusInfo.setConnStatusName(getDictName("connStatus", statusInfo.getConnStatus())); + statusInfo.setConnStatusName(getDictName("connStatus" , statusInfo.getConnStatus())); } @@ -114,11 +125,11 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); SensorStatusDTO msg = responseDTO.getMsg(); - query.set("lidar_msg", msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); - query.set("imu_msg", msg.getImuMsg() == null ? 0 : msg.getImuMsg()); - query.set("charge_msg", msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); - query.set("gps_msg", msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); - query.eq("robot_id", robotId); + query.set("lidar_msg" , msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); + query.set("imu_msg" , msg.getImuMsg() == null ? 0 : msg.getImuMsg()); + query.set("charge_msg" , msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); + query.set("gps_msg" , msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); + query.eq("robot_id" , robotId); update(query); } } @@ -137,8 +148,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); ProcessMessageResponseDTO msg = responseDTO.getMsg(); - query.set("process_message", msg.getP()); - query.eq("robot_id", robotId); + query.set("process_message" , msg.getP()); + query.eq("robot_id" , robotId); update(query); } } @@ -157,8 +168,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_nav_pause", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_nav_pause" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -171,8 +182,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_stop_navtrack", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_stop_navtrack" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -180,16 +191,16 @@ @Override public void updateCurrTask(String robotId, Long currRouteId, Long currTaskId) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("curr_route_id", currRouteId); - query.set("curr_task_id", currTaskId); - query.eq("robot_id", robotId); + query.set("curr_route_id" , currRouteId); + query.set("curr_task_id" , currTaskId); + query.eq("robot_id" , robotId); update(query); } @Override public RobotStatusInfo getStatusByRobotId(String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotId); + query.eq("robot_id" , robotId); return getOne(query); } @@ -199,12 +210,65 @@ RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); if (responseDTO != null && responseDTO.getMsg() != null) { - log.info("速度信息保存:{}", responseDTO.getMsg()); + log.info("速度信息保存:{}" , responseDTO.getMsg()); UpdateWrapper query = new UpdateWrapper<>(); - query.set("robot_v", responseDTO.getMsg().getSpeed().getV()); - query.set("robot_w", responseDTO.getMsg().getSpeed().getW()); - query.eq("robot_id", robotId); + query.set("robot_v" , responseDTO.getMsg().getSpeed().getV()); + query.set("robot_w" , responseDTO.getMsg().getSpeed().getW()); + query.eq("robot_id" , robotId); update(query); } } + + @Override + public void saveStopState(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + if (responseDTO != null && responseDTO.getMsg() != null) { + log.info("急停状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + query.set(RobotStatusInfo::getButton, responseDTO.getMsg().getButton()); + query.set(RobotStatusInfo::getCollision, responseDTO.getMsg().getCollision()); + query.set(RobotStatusInfo::getSonic, responseDTO.getMsg().getSonic()); + query.set(RobotStatusInfo::getSoft, responseDTO.getMsg().getSoft()); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + @Transactional + @Override + public void saveVoltageResponseMessage(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + //电压下限 45V 电压上限 58.8V 估算电量 + if (responseDTO != null && responseDTO.getMsg() != null) { + RobotInfo info = robotInfoService.getById(robotId); + log.info("电压状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + if (CollectionUtil.isNotEmpty(responseDTO.getMsg().getVoltage())) { + Integer v = responseDTO.getMsg().getVoltage().get(0); + query.set(RobotStatusInfo::getVoltage, v); + //计算电量 + Double quantity = new BigDecimal(v - info.getVoltageMin()).divide(new BigDecimal(info.getVoltageMax() - info.getVoltageMin()),2, BigDecimal.ROUND_HALF_UP).doubleValue(); + query.set(RobotStatusInfo::getElectricityQuantity, quantity*100); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + } + + private RobotResponseDTO parseJson(MqttMessage message, TypeReference> cls) { + String json = new String(message.getPayload()); + if (json.startsWith("\"")) { + json = json.substring(1); + } + if (json.endsWith("\"")) { + json = json.substring(0, json.length() - 1); + } + json = json.replaceAll("\\\\" , ""); + log.info(json); + RobotResponseDTO responseDTO = JSON.parseObject(json, cls); + return responseDTO; + } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java new file mode 100644 index 0000000..a94f6ad --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RobotSystemConfigMapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +@Service +public class RobotSystemConfigServiceImpl extends ServiceImpl implements IRobotSystemConfigService { + @Override + public List selectRobotSystemConfigPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRobotSystemConfigPage(page, query); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java index 286977e..33359e9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java @@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.robot.dao.RobotTrajectoryInfoMapper; +import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.PoseMessageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Date; @@ -27,6 +30,11 @@ */ @Service public class RobotTrajectoryInfoServiceImpl extends ServiceImpl implements IRobotTrajectoryInfoService { + private final IRobotStatusInfoService robotStatusInfoService; + + public RobotTrajectoryInfoServiceImpl(@Lazy IRobotStatusInfoService robotStatusInfoService) { + this.robotStatusInfoService = robotStatusInfoService; + } @Override public List selectRobotTrajectoryInfoPage(Page page, QueryWrapper query) { @@ -35,18 +43,26 @@ @Override public void savePoseMessage(String robotId, MqttMessage message) { + String json = new String(message.getPayload()); RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); - if (responseDTO.getMsg() != null) { - PoseMessageResponseDTO dto = responseDTO.getMsg(); - RobotTrajectoryInfo info = new RobotTrajectoryInfo(); - info.setRobotId(Long.valueOf(robotId)); - info.setCreateTime(new Date()); - info.setPostionX(dto.getX()); - info.setPostionY(dto.getY()); - info.setPostionZ(dto.getZ()); - info.setTheta(dto.getTheta()); + + //读取导航状态,如果导航未开启则不存储 + RobotStatusInfo statusInfo = robotStatusInfoService.getStatusByRobotId(robotId); + if (statusInfo != null && responseDTO.getMsg() != null) { + //执行循迹 保存当前轨迹信息 + if (statusInfo.getCurrRouteId() != null) { + PoseMessageResponseDTO dto = responseDTO.getMsg(); + RobotTrajectoryInfo info = new RobotTrajectoryInfo(); + info.setRobotId(Long.valueOf(robotId)); + info.setCreateTime(new Date()); + info.setPostionX(dto.getX()); + info.setPostionY(dto.getY()); + info.setPostionZ(dto.getZ()); + info.setTheta(dto.getTheta()); + save(info); + } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java index c16c954..9f2c93c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java @@ -74,8 +74,9 @@ private void wrapTaskInfo(TaskInfo taskInfo) { taskInfo.setDiscernTypeName(dictService.getDictNameByCode(RobotDictConstants.DISCERN_TYPE, taskInfo.getDiscernType() + "")); taskInfo.setTaskTypeName(dictService.getDictNameByCode(RobotDictConstants.TASK_TYPE, taskInfo.getTaskType() + "")); + taskInfo.setTaskStatusName(dictService.getDictNameByCode(RobotDictConstants.TASK_STATUS, taskInfo.getTaskType() + "")); //检索当前任务告警数量 - taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(),taskInfo.getRobotId())); + taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(), taskInfo.getRobotId())); } @Transactional diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java new file mode 100644 index 0000000..ad0b908 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface IRobotSystemConfigService extends IService { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(Page page, QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 6d3c2af..609a4af 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -1,27 +1,36 @@ package com.casic.missiles.modular.robot.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.ProcessMessageResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.SensorStatusDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.StopStateResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.VoltageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; @@ -37,16 +46,18 @@ @Service public class RobotStatusInfoServiceImpl extends ServiceImpl implements IRobotStatusInfoService { private final AbstractDictService dictService; + private final IRobotInfoService robotInfoService; - public RobotStatusInfoServiceImpl(AbstractDictService dictService) { + public RobotStatusInfoServiceImpl(AbstractDictService dictService, @Lazy IRobotInfoService robotInfoService) { this.dictService = dictService; + this.robotInfoService = robotInfoService; } @Override public void updateConnStatus(String robotId, Integer status) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("conn_status", status); - query.eq("robot_id", robotId); + query.set("conn_status" , status); + query.eq("robot_id" , robotId); update(query); } @@ -60,29 +71,29 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { - statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); + statusInfo.setDiscernTypeName(getDictName("discernType" , statusInfo.getDiscernType())); //暂停状态 - statusInfo.setAppNavPauseName(getDictName("appNavPause", statusInfo.getAppNavPause())); + statusInfo.setAppNavPauseName(getDictName("appNavPause" , statusInfo.getAppNavPause())); //开启状态 - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - String statusName = getDictName("trackStatus", statusInfo.getNavigationStatus()); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + String statusName = getDictName("trackStatus" , statusInfo.getNavigationStatus()); statusInfo.setNavigationStatusName(statusName); - statusInfo.setDataRecordName(getDictName("trackStatus", statusInfo.getDataRecord())); - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - statusInfo.setTrackName(getDictName("trackStatus", statusInfo.getTrack())); - statusInfo.setInsStatusName(getDictName("trackStatus", statusInfo.getInsStatus())); - statusInfo.setAppStopNavtrackName(getDictName("trackStatus", statusInfo.getAppStopNavtrack())); - statusInfo.setTrackRecordName(getDictName("trackStatus", statusInfo.getTrackRecord())); + statusInfo.setDataRecordName(getDictName("trackStatus" , statusInfo.getDataRecord())); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + statusInfo.setTrackName(getDictName("trackStatus" , statusInfo.getTrack())); + statusInfo.setInsStatusName(getDictName("trackStatus" , statusInfo.getInsStatus())); + statusInfo.setAppStopNavtrackName(getDictName("trackStatus" , statusInfo.getAppStopNavtrack())); + statusInfo.setTrackRecordName(getDictName("trackStatus" , statusInfo.getTrackRecord())); //收到状态 - statusInfo.setLidarMsgName(getDictName("lidarMsg", statusInfo.getLidarMsg())); - statusInfo.setImuMsgName(getDictName("lidarMsg", statusInfo.getImuMsg())); - statusInfo.setChargeMsgName(getDictName("lidarMsg", statusInfo.getChargeMsg())); - statusInfo.setGpsMsgName(getDictName("lidarMsg", statusInfo.getGpsMsg())); + statusInfo.setLidarMsgName(getDictName("lidarMsg" , statusInfo.getLidarMsg())); + statusInfo.setImuMsgName(getDictName("lidarMsg" , statusInfo.getImuMsg())); + statusInfo.setChargeMsgName(getDictName("lidarMsg" , statusInfo.getChargeMsg())); + statusInfo.setGpsMsgName(getDictName("lidarMsg" , statusInfo.getGpsMsg())); //连接状态 - statusInfo.setConnStatusName(getDictName("connStatus", statusInfo.getConnStatus())); + statusInfo.setConnStatusName(getDictName("connStatus" , statusInfo.getConnStatus())); } @@ -114,11 +125,11 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); SensorStatusDTO msg = responseDTO.getMsg(); - query.set("lidar_msg", msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); - query.set("imu_msg", msg.getImuMsg() == null ? 0 : msg.getImuMsg()); - query.set("charge_msg", msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); - query.set("gps_msg", msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); - query.eq("robot_id", robotId); + query.set("lidar_msg" , msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); + query.set("imu_msg" , msg.getImuMsg() == null ? 0 : msg.getImuMsg()); + query.set("charge_msg" , msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); + query.set("gps_msg" , msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); + query.eq("robot_id" , robotId); update(query); } } @@ -137,8 +148,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); ProcessMessageResponseDTO msg = responseDTO.getMsg(); - query.set("process_message", msg.getP()); - query.eq("robot_id", robotId); + query.set("process_message" , msg.getP()); + query.eq("robot_id" , robotId); update(query); } } @@ -157,8 +168,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_nav_pause", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_nav_pause" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -171,8 +182,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_stop_navtrack", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_stop_navtrack" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -180,16 +191,16 @@ @Override public void updateCurrTask(String robotId, Long currRouteId, Long currTaskId) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("curr_route_id", currRouteId); - query.set("curr_task_id", currTaskId); - query.eq("robot_id", robotId); + query.set("curr_route_id" , currRouteId); + query.set("curr_task_id" , currTaskId); + query.eq("robot_id" , robotId); update(query); } @Override public RobotStatusInfo getStatusByRobotId(String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotId); + query.eq("robot_id" , robotId); return getOne(query); } @@ -199,12 +210,65 @@ RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); if (responseDTO != null && responseDTO.getMsg() != null) { - log.info("速度信息保存:{}", responseDTO.getMsg()); + log.info("速度信息保存:{}" , responseDTO.getMsg()); UpdateWrapper query = new UpdateWrapper<>(); - query.set("robot_v", responseDTO.getMsg().getSpeed().getV()); - query.set("robot_w", responseDTO.getMsg().getSpeed().getW()); - query.eq("robot_id", robotId); + query.set("robot_v" , responseDTO.getMsg().getSpeed().getV()); + query.set("robot_w" , responseDTO.getMsg().getSpeed().getW()); + query.eq("robot_id" , robotId); update(query); } } + + @Override + public void saveStopState(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + if (responseDTO != null && responseDTO.getMsg() != null) { + log.info("急停状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + query.set(RobotStatusInfo::getButton, responseDTO.getMsg().getButton()); + query.set(RobotStatusInfo::getCollision, responseDTO.getMsg().getCollision()); + query.set(RobotStatusInfo::getSonic, responseDTO.getMsg().getSonic()); + query.set(RobotStatusInfo::getSoft, responseDTO.getMsg().getSoft()); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + @Transactional + @Override + public void saveVoltageResponseMessage(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + //电压下限 45V 电压上限 58.8V 估算电量 + if (responseDTO != null && responseDTO.getMsg() != null) { + RobotInfo info = robotInfoService.getById(robotId); + log.info("电压状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + if (CollectionUtil.isNotEmpty(responseDTO.getMsg().getVoltage())) { + Integer v = responseDTO.getMsg().getVoltage().get(0); + query.set(RobotStatusInfo::getVoltage, v); + //计算电量 + Double quantity = new BigDecimal(v - info.getVoltageMin()).divide(new BigDecimal(info.getVoltageMax() - info.getVoltageMin()),2, BigDecimal.ROUND_HALF_UP).doubleValue(); + query.set(RobotStatusInfo::getElectricityQuantity, quantity*100); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + } + + private RobotResponseDTO parseJson(MqttMessage message, TypeReference> cls) { + String json = new String(message.getPayload()); + if (json.startsWith("\"")) { + json = json.substring(1); + } + if (json.endsWith("\"")) { + json = json.substring(0, json.length() - 1); + } + json = json.replaceAll("\\\\" , ""); + log.info(json); + RobotResponseDTO responseDTO = JSON.parseObject(json, cls); + return responseDTO; + } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java new file mode 100644 index 0000000..a94f6ad --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RobotSystemConfigMapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +@Service +public class RobotSystemConfigServiceImpl extends ServiceImpl implements IRobotSystemConfigService { + @Override + public List selectRobotSystemConfigPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRobotSystemConfigPage(page, query); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java index 286977e..33359e9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java @@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.robot.dao.RobotTrajectoryInfoMapper; +import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.PoseMessageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Date; @@ -27,6 +30,11 @@ */ @Service public class RobotTrajectoryInfoServiceImpl extends ServiceImpl implements IRobotTrajectoryInfoService { + private final IRobotStatusInfoService robotStatusInfoService; + + public RobotTrajectoryInfoServiceImpl(@Lazy IRobotStatusInfoService robotStatusInfoService) { + this.robotStatusInfoService = robotStatusInfoService; + } @Override public List selectRobotTrajectoryInfoPage(Page page, QueryWrapper query) { @@ -35,18 +43,26 @@ @Override public void savePoseMessage(String robotId, MqttMessage message) { + String json = new String(message.getPayload()); RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); - if (responseDTO.getMsg() != null) { - PoseMessageResponseDTO dto = responseDTO.getMsg(); - RobotTrajectoryInfo info = new RobotTrajectoryInfo(); - info.setRobotId(Long.valueOf(robotId)); - info.setCreateTime(new Date()); - info.setPostionX(dto.getX()); - info.setPostionY(dto.getY()); - info.setPostionZ(dto.getZ()); - info.setTheta(dto.getTheta()); + + //读取导航状态,如果导航未开启则不存储 + RobotStatusInfo statusInfo = robotStatusInfoService.getStatusByRobotId(robotId); + if (statusInfo != null && responseDTO.getMsg() != null) { + //执行循迹 保存当前轨迹信息 + if (statusInfo.getCurrRouteId() != null) { + PoseMessageResponseDTO dto = responseDTO.getMsg(); + RobotTrajectoryInfo info = new RobotTrajectoryInfo(); + info.setRobotId(Long.valueOf(robotId)); + info.setCreateTime(new Date()); + info.setPostionX(dto.getX()); + info.setPostionY(dto.getY()); + info.setPostionZ(dto.getZ()); + info.setTheta(dto.getTheta()); + save(info); + } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java index c16c954..9f2c93c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java @@ -74,8 +74,9 @@ private void wrapTaskInfo(TaskInfo taskInfo) { taskInfo.setDiscernTypeName(dictService.getDictNameByCode(RobotDictConstants.DISCERN_TYPE, taskInfo.getDiscernType() + "")); taskInfo.setTaskTypeName(dictService.getDictNameByCode(RobotDictConstants.TASK_TYPE, taskInfo.getTaskType() + "")); + taskInfo.setTaskStatusName(dictService.getDictNameByCode(RobotDictConstants.TASK_STATUS, taskInfo.getTaskType() + "")); //检索当前任务告警数量 - taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(),taskInfo.getRobotId())); + taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(), taskInfo.getRobotId())); } @Transactional diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java new file mode 100644 index 0000000..bed105f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.robot.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * @Description: for batch use + * @Author: wangpeng + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotEmpty(message = "主键id不能为空") + @ApiModelProperty(value = "主键id列表", dataType = "List", required = true) + private List ids; +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java new file mode 100644 index 0000000..ad0b908 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface IRobotSystemConfigService extends IService { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(Page page, QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 6d3c2af..609a4af 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -1,27 +1,36 @@ package com.casic.missiles.modular.robot.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.ProcessMessageResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.SensorStatusDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.StopStateResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.VoltageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; @@ -37,16 +46,18 @@ @Service public class RobotStatusInfoServiceImpl extends ServiceImpl implements IRobotStatusInfoService { private final AbstractDictService dictService; + private final IRobotInfoService robotInfoService; - public RobotStatusInfoServiceImpl(AbstractDictService dictService) { + public RobotStatusInfoServiceImpl(AbstractDictService dictService, @Lazy IRobotInfoService robotInfoService) { this.dictService = dictService; + this.robotInfoService = robotInfoService; } @Override public void updateConnStatus(String robotId, Integer status) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("conn_status", status); - query.eq("robot_id", robotId); + query.set("conn_status" , status); + query.eq("robot_id" , robotId); update(query); } @@ -60,29 +71,29 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { - statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); + statusInfo.setDiscernTypeName(getDictName("discernType" , statusInfo.getDiscernType())); //暂停状态 - statusInfo.setAppNavPauseName(getDictName("appNavPause", statusInfo.getAppNavPause())); + statusInfo.setAppNavPauseName(getDictName("appNavPause" , statusInfo.getAppNavPause())); //开启状态 - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - String statusName = getDictName("trackStatus", statusInfo.getNavigationStatus()); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + String statusName = getDictName("trackStatus" , statusInfo.getNavigationStatus()); statusInfo.setNavigationStatusName(statusName); - statusInfo.setDataRecordName(getDictName("trackStatus", statusInfo.getDataRecord())); - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - statusInfo.setTrackName(getDictName("trackStatus", statusInfo.getTrack())); - statusInfo.setInsStatusName(getDictName("trackStatus", statusInfo.getInsStatus())); - statusInfo.setAppStopNavtrackName(getDictName("trackStatus", statusInfo.getAppStopNavtrack())); - statusInfo.setTrackRecordName(getDictName("trackStatus", statusInfo.getTrackRecord())); + statusInfo.setDataRecordName(getDictName("trackStatus" , statusInfo.getDataRecord())); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + statusInfo.setTrackName(getDictName("trackStatus" , statusInfo.getTrack())); + statusInfo.setInsStatusName(getDictName("trackStatus" , statusInfo.getInsStatus())); + statusInfo.setAppStopNavtrackName(getDictName("trackStatus" , statusInfo.getAppStopNavtrack())); + statusInfo.setTrackRecordName(getDictName("trackStatus" , statusInfo.getTrackRecord())); //收到状态 - statusInfo.setLidarMsgName(getDictName("lidarMsg", statusInfo.getLidarMsg())); - statusInfo.setImuMsgName(getDictName("lidarMsg", statusInfo.getImuMsg())); - statusInfo.setChargeMsgName(getDictName("lidarMsg", statusInfo.getChargeMsg())); - statusInfo.setGpsMsgName(getDictName("lidarMsg", statusInfo.getGpsMsg())); + statusInfo.setLidarMsgName(getDictName("lidarMsg" , statusInfo.getLidarMsg())); + statusInfo.setImuMsgName(getDictName("lidarMsg" , statusInfo.getImuMsg())); + statusInfo.setChargeMsgName(getDictName("lidarMsg" , statusInfo.getChargeMsg())); + statusInfo.setGpsMsgName(getDictName("lidarMsg" , statusInfo.getGpsMsg())); //连接状态 - statusInfo.setConnStatusName(getDictName("connStatus", statusInfo.getConnStatus())); + statusInfo.setConnStatusName(getDictName("connStatus" , statusInfo.getConnStatus())); } @@ -114,11 +125,11 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); SensorStatusDTO msg = responseDTO.getMsg(); - query.set("lidar_msg", msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); - query.set("imu_msg", msg.getImuMsg() == null ? 0 : msg.getImuMsg()); - query.set("charge_msg", msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); - query.set("gps_msg", msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); - query.eq("robot_id", robotId); + query.set("lidar_msg" , msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); + query.set("imu_msg" , msg.getImuMsg() == null ? 0 : msg.getImuMsg()); + query.set("charge_msg" , msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); + query.set("gps_msg" , msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); + query.eq("robot_id" , robotId); update(query); } } @@ -137,8 +148,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); ProcessMessageResponseDTO msg = responseDTO.getMsg(); - query.set("process_message", msg.getP()); - query.eq("robot_id", robotId); + query.set("process_message" , msg.getP()); + query.eq("robot_id" , robotId); update(query); } } @@ -157,8 +168,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_nav_pause", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_nav_pause" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -171,8 +182,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_stop_navtrack", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_stop_navtrack" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -180,16 +191,16 @@ @Override public void updateCurrTask(String robotId, Long currRouteId, Long currTaskId) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("curr_route_id", currRouteId); - query.set("curr_task_id", currTaskId); - query.eq("robot_id", robotId); + query.set("curr_route_id" , currRouteId); + query.set("curr_task_id" , currTaskId); + query.eq("robot_id" , robotId); update(query); } @Override public RobotStatusInfo getStatusByRobotId(String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotId); + query.eq("robot_id" , robotId); return getOne(query); } @@ -199,12 +210,65 @@ RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); if (responseDTO != null && responseDTO.getMsg() != null) { - log.info("速度信息保存:{}", responseDTO.getMsg()); + log.info("速度信息保存:{}" , responseDTO.getMsg()); UpdateWrapper query = new UpdateWrapper<>(); - query.set("robot_v", responseDTO.getMsg().getSpeed().getV()); - query.set("robot_w", responseDTO.getMsg().getSpeed().getW()); - query.eq("robot_id", robotId); + query.set("robot_v" , responseDTO.getMsg().getSpeed().getV()); + query.set("robot_w" , responseDTO.getMsg().getSpeed().getW()); + query.eq("robot_id" , robotId); update(query); } } + + @Override + public void saveStopState(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + if (responseDTO != null && responseDTO.getMsg() != null) { + log.info("急停状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + query.set(RobotStatusInfo::getButton, responseDTO.getMsg().getButton()); + query.set(RobotStatusInfo::getCollision, responseDTO.getMsg().getCollision()); + query.set(RobotStatusInfo::getSonic, responseDTO.getMsg().getSonic()); + query.set(RobotStatusInfo::getSoft, responseDTO.getMsg().getSoft()); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + @Transactional + @Override + public void saveVoltageResponseMessage(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + //电压下限 45V 电压上限 58.8V 估算电量 + if (responseDTO != null && responseDTO.getMsg() != null) { + RobotInfo info = robotInfoService.getById(robotId); + log.info("电压状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + if (CollectionUtil.isNotEmpty(responseDTO.getMsg().getVoltage())) { + Integer v = responseDTO.getMsg().getVoltage().get(0); + query.set(RobotStatusInfo::getVoltage, v); + //计算电量 + Double quantity = new BigDecimal(v - info.getVoltageMin()).divide(new BigDecimal(info.getVoltageMax() - info.getVoltageMin()),2, BigDecimal.ROUND_HALF_UP).doubleValue(); + query.set(RobotStatusInfo::getElectricityQuantity, quantity*100); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + } + + private RobotResponseDTO parseJson(MqttMessage message, TypeReference> cls) { + String json = new String(message.getPayload()); + if (json.startsWith("\"")) { + json = json.substring(1); + } + if (json.endsWith("\"")) { + json = json.substring(0, json.length() - 1); + } + json = json.replaceAll("\\\\" , ""); + log.info(json); + RobotResponseDTO responseDTO = JSON.parseObject(json, cls); + return responseDTO; + } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java new file mode 100644 index 0000000..a94f6ad --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RobotSystemConfigMapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +@Service +public class RobotSystemConfigServiceImpl extends ServiceImpl implements IRobotSystemConfigService { + @Override + public List selectRobotSystemConfigPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRobotSystemConfigPage(page, query); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java index 286977e..33359e9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java @@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.robot.dao.RobotTrajectoryInfoMapper; +import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.PoseMessageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Date; @@ -27,6 +30,11 @@ */ @Service public class RobotTrajectoryInfoServiceImpl extends ServiceImpl implements IRobotTrajectoryInfoService { + private final IRobotStatusInfoService robotStatusInfoService; + + public RobotTrajectoryInfoServiceImpl(@Lazy IRobotStatusInfoService robotStatusInfoService) { + this.robotStatusInfoService = robotStatusInfoService; + } @Override public List selectRobotTrajectoryInfoPage(Page page, QueryWrapper query) { @@ -35,18 +43,26 @@ @Override public void savePoseMessage(String robotId, MqttMessage message) { + String json = new String(message.getPayload()); RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); - if (responseDTO.getMsg() != null) { - PoseMessageResponseDTO dto = responseDTO.getMsg(); - RobotTrajectoryInfo info = new RobotTrajectoryInfo(); - info.setRobotId(Long.valueOf(robotId)); - info.setCreateTime(new Date()); - info.setPostionX(dto.getX()); - info.setPostionY(dto.getY()); - info.setPostionZ(dto.getZ()); - info.setTheta(dto.getTheta()); + + //读取导航状态,如果导航未开启则不存储 + RobotStatusInfo statusInfo = robotStatusInfoService.getStatusByRobotId(robotId); + if (statusInfo != null && responseDTO.getMsg() != null) { + //执行循迹 保存当前轨迹信息 + if (statusInfo.getCurrRouteId() != null) { + PoseMessageResponseDTO dto = responseDTO.getMsg(); + RobotTrajectoryInfo info = new RobotTrajectoryInfo(); + info.setRobotId(Long.valueOf(robotId)); + info.setCreateTime(new Date()); + info.setPostionX(dto.getX()); + info.setPostionY(dto.getY()); + info.setPostionZ(dto.getZ()); + info.setTheta(dto.getTheta()); + save(info); + } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java index c16c954..9f2c93c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java @@ -74,8 +74,9 @@ private void wrapTaskInfo(TaskInfo taskInfo) { taskInfo.setDiscernTypeName(dictService.getDictNameByCode(RobotDictConstants.DISCERN_TYPE, taskInfo.getDiscernType() + "")); taskInfo.setTaskTypeName(dictService.getDictNameByCode(RobotDictConstants.TASK_TYPE, taskInfo.getTaskType() + "")); + taskInfo.setTaskStatusName(dictService.getDictNameByCode(RobotDictConstants.TASK_STATUS, taskInfo.getTaskType() + "")); //检索当前任务告警数量 - taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(),taskInfo.getRobotId())); + taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(), taskInfo.getRobotId())); } @Transactional diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java new file mode 100644 index 0000000..bed105f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.robot.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * @Description: for batch use + * @Author: wangpeng + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotEmpty(message = "主键id不能为空") + @ApiModelProperty(value = "主键id列表", dataType = "List", required = true) + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java new file mode 100644 index 0000000..08e275e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.robot.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 机器人系统配置信息对象VO + * + * @author lwh + * @date 2023-11-22 + */ +@Data +public class RobotSystemConfigVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "主键", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "系统配置主键", dataType = "String") + private String configKey; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (id != null) { + query.eq("id", id); + } + if (StrUtil.isNotEmpty(configKey)) { + query.eq("config_key", configKey); + } + return query; + } +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java new file mode 100644 index 0000000..ad0b908 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface IRobotSystemConfigService extends IService { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(Page page, QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 6d3c2af..609a4af 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -1,27 +1,36 @@ package com.casic.missiles.modular.robot.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.ProcessMessageResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.SensorStatusDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.StopStateResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.VoltageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; @@ -37,16 +46,18 @@ @Service public class RobotStatusInfoServiceImpl extends ServiceImpl implements IRobotStatusInfoService { private final AbstractDictService dictService; + private final IRobotInfoService robotInfoService; - public RobotStatusInfoServiceImpl(AbstractDictService dictService) { + public RobotStatusInfoServiceImpl(AbstractDictService dictService, @Lazy IRobotInfoService robotInfoService) { this.dictService = dictService; + this.robotInfoService = robotInfoService; } @Override public void updateConnStatus(String robotId, Integer status) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("conn_status", status); - query.eq("robot_id", robotId); + query.set("conn_status" , status); + query.eq("robot_id" , robotId); update(query); } @@ -60,29 +71,29 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { - statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); + statusInfo.setDiscernTypeName(getDictName("discernType" , statusInfo.getDiscernType())); //暂停状态 - statusInfo.setAppNavPauseName(getDictName("appNavPause", statusInfo.getAppNavPause())); + statusInfo.setAppNavPauseName(getDictName("appNavPause" , statusInfo.getAppNavPause())); //开启状态 - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - String statusName = getDictName("trackStatus", statusInfo.getNavigationStatus()); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + String statusName = getDictName("trackStatus" , statusInfo.getNavigationStatus()); statusInfo.setNavigationStatusName(statusName); - statusInfo.setDataRecordName(getDictName("trackStatus", statusInfo.getDataRecord())); - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - statusInfo.setTrackName(getDictName("trackStatus", statusInfo.getTrack())); - statusInfo.setInsStatusName(getDictName("trackStatus", statusInfo.getInsStatus())); - statusInfo.setAppStopNavtrackName(getDictName("trackStatus", statusInfo.getAppStopNavtrack())); - statusInfo.setTrackRecordName(getDictName("trackStatus", statusInfo.getTrackRecord())); + statusInfo.setDataRecordName(getDictName("trackStatus" , statusInfo.getDataRecord())); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + statusInfo.setTrackName(getDictName("trackStatus" , statusInfo.getTrack())); + statusInfo.setInsStatusName(getDictName("trackStatus" , statusInfo.getInsStatus())); + statusInfo.setAppStopNavtrackName(getDictName("trackStatus" , statusInfo.getAppStopNavtrack())); + statusInfo.setTrackRecordName(getDictName("trackStatus" , statusInfo.getTrackRecord())); //收到状态 - statusInfo.setLidarMsgName(getDictName("lidarMsg", statusInfo.getLidarMsg())); - statusInfo.setImuMsgName(getDictName("lidarMsg", statusInfo.getImuMsg())); - statusInfo.setChargeMsgName(getDictName("lidarMsg", statusInfo.getChargeMsg())); - statusInfo.setGpsMsgName(getDictName("lidarMsg", statusInfo.getGpsMsg())); + statusInfo.setLidarMsgName(getDictName("lidarMsg" , statusInfo.getLidarMsg())); + statusInfo.setImuMsgName(getDictName("lidarMsg" , statusInfo.getImuMsg())); + statusInfo.setChargeMsgName(getDictName("lidarMsg" , statusInfo.getChargeMsg())); + statusInfo.setGpsMsgName(getDictName("lidarMsg" , statusInfo.getGpsMsg())); //连接状态 - statusInfo.setConnStatusName(getDictName("connStatus", statusInfo.getConnStatus())); + statusInfo.setConnStatusName(getDictName("connStatus" , statusInfo.getConnStatus())); } @@ -114,11 +125,11 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); SensorStatusDTO msg = responseDTO.getMsg(); - query.set("lidar_msg", msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); - query.set("imu_msg", msg.getImuMsg() == null ? 0 : msg.getImuMsg()); - query.set("charge_msg", msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); - query.set("gps_msg", msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); - query.eq("robot_id", robotId); + query.set("lidar_msg" , msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); + query.set("imu_msg" , msg.getImuMsg() == null ? 0 : msg.getImuMsg()); + query.set("charge_msg" , msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); + query.set("gps_msg" , msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); + query.eq("robot_id" , robotId); update(query); } } @@ -137,8 +148,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); ProcessMessageResponseDTO msg = responseDTO.getMsg(); - query.set("process_message", msg.getP()); - query.eq("robot_id", robotId); + query.set("process_message" , msg.getP()); + query.eq("robot_id" , robotId); update(query); } } @@ -157,8 +168,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_nav_pause", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_nav_pause" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -171,8 +182,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_stop_navtrack", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_stop_navtrack" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -180,16 +191,16 @@ @Override public void updateCurrTask(String robotId, Long currRouteId, Long currTaskId) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("curr_route_id", currRouteId); - query.set("curr_task_id", currTaskId); - query.eq("robot_id", robotId); + query.set("curr_route_id" , currRouteId); + query.set("curr_task_id" , currTaskId); + query.eq("robot_id" , robotId); update(query); } @Override public RobotStatusInfo getStatusByRobotId(String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotId); + query.eq("robot_id" , robotId); return getOne(query); } @@ -199,12 +210,65 @@ RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); if (responseDTO != null && responseDTO.getMsg() != null) { - log.info("速度信息保存:{}", responseDTO.getMsg()); + log.info("速度信息保存:{}" , responseDTO.getMsg()); UpdateWrapper query = new UpdateWrapper<>(); - query.set("robot_v", responseDTO.getMsg().getSpeed().getV()); - query.set("robot_w", responseDTO.getMsg().getSpeed().getW()); - query.eq("robot_id", robotId); + query.set("robot_v" , responseDTO.getMsg().getSpeed().getV()); + query.set("robot_w" , responseDTO.getMsg().getSpeed().getW()); + query.eq("robot_id" , robotId); update(query); } } + + @Override + public void saveStopState(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + if (responseDTO != null && responseDTO.getMsg() != null) { + log.info("急停状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + query.set(RobotStatusInfo::getButton, responseDTO.getMsg().getButton()); + query.set(RobotStatusInfo::getCollision, responseDTO.getMsg().getCollision()); + query.set(RobotStatusInfo::getSonic, responseDTO.getMsg().getSonic()); + query.set(RobotStatusInfo::getSoft, responseDTO.getMsg().getSoft()); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + @Transactional + @Override + public void saveVoltageResponseMessage(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + //电压下限 45V 电压上限 58.8V 估算电量 + if (responseDTO != null && responseDTO.getMsg() != null) { + RobotInfo info = robotInfoService.getById(robotId); + log.info("电压状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + if (CollectionUtil.isNotEmpty(responseDTO.getMsg().getVoltage())) { + Integer v = responseDTO.getMsg().getVoltage().get(0); + query.set(RobotStatusInfo::getVoltage, v); + //计算电量 + Double quantity = new BigDecimal(v - info.getVoltageMin()).divide(new BigDecimal(info.getVoltageMax() - info.getVoltageMin()),2, BigDecimal.ROUND_HALF_UP).doubleValue(); + query.set(RobotStatusInfo::getElectricityQuantity, quantity*100); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + } + + private RobotResponseDTO parseJson(MqttMessage message, TypeReference> cls) { + String json = new String(message.getPayload()); + if (json.startsWith("\"")) { + json = json.substring(1); + } + if (json.endsWith("\"")) { + json = json.substring(0, json.length() - 1); + } + json = json.replaceAll("\\\\" , ""); + log.info(json); + RobotResponseDTO responseDTO = JSON.parseObject(json, cls); + return responseDTO; + } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java new file mode 100644 index 0000000..a94f6ad --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RobotSystemConfigMapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +@Service +public class RobotSystemConfigServiceImpl extends ServiceImpl implements IRobotSystemConfigService { + @Override + public List selectRobotSystemConfigPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRobotSystemConfigPage(page, query); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java index 286977e..33359e9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java @@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.robot.dao.RobotTrajectoryInfoMapper; +import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.PoseMessageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Date; @@ -27,6 +30,11 @@ */ @Service public class RobotTrajectoryInfoServiceImpl extends ServiceImpl implements IRobotTrajectoryInfoService { + private final IRobotStatusInfoService robotStatusInfoService; + + public RobotTrajectoryInfoServiceImpl(@Lazy IRobotStatusInfoService robotStatusInfoService) { + this.robotStatusInfoService = robotStatusInfoService; + } @Override public List selectRobotTrajectoryInfoPage(Page page, QueryWrapper query) { @@ -35,18 +43,26 @@ @Override public void savePoseMessage(String robotId, MqttMessage message) { + String json = new String(message.getPayload()); RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); - if (responseDTO.getMsg() != null) { - PoseMessageResponseDTO dto = responseDTO.getMsg(); - RobotTrajectoryInfo info = new RobotTrajectoryInfo(); - info.setRobotId(Long.valueOf(robotId)); - info.setCreateTime(new Date()); - info.setPostionX(dto.getX()); - info.setPostionY(dto.getY()); - info.setPostionZ(dto.getZ()); - info.setTheta(dto.getTheta()); + + //读取导航状态,如果导航未开启则不存储 + RobotStatusInfo statusInfo = robotStatusInfoService.getStatusByRobotId(robotId); + if (statusInfo != null && responseDTO.getMsg() != null) { + //执行循迹 保存当前轨迹信息 + if (statusInfo.getCurrRouteId() != null) { + PoseMessageResponseDTO dto = responseDTO.getMsg(); + RobotTrajectoryInfo info = new RobotTrajectoryInfo(); + info.setRobotId(Long.valueOf(robotId)); + info.setCreateTime(new Date()); + info.setPostionX(dto.getX()); + info.setPostionY(dto.getY()); + info.setPostionZ(dto.getZ()); + info.setTheta(dto.getTheta()); + save(info); + } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java index c16c954..9f2c93c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java @@ -74,8 +74,9 @@ private void wrapTaskInfo(TaskInfo taskInfo) { taskInfo.setDiscernTypeName(dictService.getDictNameByCode(RobotDictConstants.DISCERN_TYPE, taskInfo.getDiscernType() + "")); taskInfo.setTaskTypeName(dictService.getDictNameByCode(RobotDictConstants.TASK_TYPE, taskInfo.getTaskType() + "")); + taskInfo.setTaskStatusName(dictService.getDictNameByCode(RobotDictConstants.TASK_STATUS, taskInfo.getTaskType() + "")); //检索当前任务告警数量 - taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(),taskInfo.getRobotId())); + taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(), taskInfo.getRobotId())); } @Transactional diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java new file mode 100644 index 0000000..bed105f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.robot.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * @Description: for batch use + * @Author: wangpeng + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotEmpty(message = "主键id不能为空") + @ApiModelProperty(value = "主键id列表", dataType = "List", required = true) + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java new file mode 100644 index 0000000..08e275e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.robot.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 机器人系统配置信息对象VO + * + * @author lwh + * @date 2023-11-22 + */ +@Data +public class RobotSystemConfigVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "主键", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "系统配置主键", dataType = "String") + private String configKey; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (id != null) { + query.eq("id", id); + } + if (StrUtil.isNotEmpty(configKey)) { + query.eq("config_key", configKey); + } + return query; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java index 6e6033f..454f10b 100644 --- a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java @@ -69,23 +69,23 @@ mqttClient.pub(enums.getReqName(), JSON.toJSONString(messageDTO)); } // 订阅返回值消息 - client.subscribe(enums.getRepName(), 1, (topic, message) -> { - String data = new String(message.getPayload()); - System.out.println(data); - if (StrUtil.isNotEmpty(data)) { - System.out.println(data); - if (data.startsWith("\"")) { - data = data.substring(1); + if (StrUtil.isNotEmpty(enums.getRepName())) { + client.subscribe(enums.getRepName(), 1, (topic, message) -> { + String data = new String(message.getPayload()); + if (StrUtil.isNotEmpty(data)) { + if (data.startsWith("\"")) { + data = data.substring(1); + } + if (data.endsWith("\"")) { + data = data.substring(0, data.length() - 1); + } + data = data.replaceAll("\\\\", ""); + maps.put("result", MsgUtils.convertMessage(data, enums)); + } else { + throw new ServiceException(500, enums.getRemarks() + "指令异常"); } - if (data.endsWith("\"")) { - data = data.substring(0, data.length() - 1); - } - data = data.replaceAll("\\\\", ""); - maps.put("result", MsgUtils.convertMessage(data, enums)); - } else { - throw new ServiceException(500, enums.getRemarks() + "指令异常"); - } - }); + }); + } int i = 0; if (enums.isWaitReply()) { do { diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java new file mode 100644 index 0000000..ad0b908 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface IRobotSystemConfigService extends IService { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(Page page, QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 6d3c2af..609a4af 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -1,27 +1,36 @@ package com.casic.missiles.modular.robot.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.ProcessMessageResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.SensorStatusDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.StopStateResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.VoltageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; @@ -37,16 +46,18 @@ @Service public class RobotStatusInfoServiceImpl extends ServiceImpl implements IRobotStatusInfoService { private final AbstractDictService dictService; + private final IRobotInfoService robotInfoService; - public RobotStatusInfoServiceImpl(AbstractDictService dictService) { + public RobotStatusInfoServiceImpl(AbstractDictService dictService, @Lazy IRobotInfoService robotInfoService) { this.dictService = dictService; + this.robotInfoService = robotInfoService; } @Override public void updateConnStatus(String robotId, Integer status) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("conn_status", status); - query.eq("robot_id", robotId); + query.set("conn_status" , status); + query.eq("robot_id" , robotId); update(query); } @@ -60,29 +71,29 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { - statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); + statusInfo.setDiscernTypeName(getDictName("discernType" , statusInfo.getDiscernType())); //暂停状态 - statusInfo.setAppNavPauseName(getDictName("appNavPause", statusInfo.getAppNavPause())); + statusInfo.setAppNavPauseName(getDictName("appNavPause" , statusInfo.getAppNavPause())); //开启状态 - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - String statusName = getDictName("trackStatus", statusInfo.getNavigationStatus()); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + String statusName = getDictName("trackStatus" , statusInfo.getNavigationStatus()); statusInfo.setNavigationStatusName(statusName); - statusInfo.setDataRecordName(getDictName("trackStatus", statusInfo.getDataRecord())); - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - statusInfo.setTrackName(getDictName("trackStatus", statusInfo.getTrack())); - statusInfo.setInsStatusName(getDictName("trackStatus", statusInfo.getInsStatus())); - statusInfo.setAppStopNavtrackName(getDictName("trackStatus", statusInfo.getAppStopNavtrack())); - statusInfo.setTrackRecordName(getDictName("trackStatus", statusInfo.getTrackRecord())); + statusInfo.setDataRecordName(getDictName("trackStatus" , statusInfo.getDataRecord())); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + statusInfo.setTrackName(getDictName("trackStatus" , statusInfo.getTrack())); + statusInfo.setInsStatusName(getDictName("trackStatus" , statusInfo.getInsStatus())); + statusInfo.setAppStopNavtrackName(getDictName("trackStatus" , statusInfo.getAppStopNavtrack())); + statusInfo.setTrackRecordName(getDictName("trackStatus" , statusInfo.getTrackRecord())); //收到状态 - statusInfo.setLidarMsgName(getDictName("lidarMsg", statusInfo.getLidarMsg())); - statusInfo.setImuMsgName(getDictName("lidarMsg", statusInfo.getImuMsg())); - statusInfo.setChargeMsgName(getDictName("lidarMsg", statusInfo.getChargeMsg())); - statusInfo.setGpsMsgName(getDictName("lidarMsg", statusInfo.getGpsMsg())); + statusInfo.setLidarMsgName(getDictName("lidarMsg" , statusInfo.getLidarMsg())); + statusInfo.setImuMsgName(getDictName("lidarMsg" , statusInfo.getImuMsg())); + statusInfo.setChargeMsgName(getDictName("lidarMsg" , statusInfo.getChargeMsg())); + statusInfo.setGpsMsgName(getDictName("lidarMsg" , statusInfo.getGpsMsg())); //连接状态 - statusInfo.setConnStatusName(getDictName("connStatus", statusInfo.getConnStatus())); + statusInfo.setConnStatusName(getDictName("connStatus" , statusInfo.getConnStatus())); } @@ -114,11 +125,11 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); SensorStatusDTO msg = responseDTO.getMsg(); - query.set("lidar_msg", msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); - query.set("imu_msg", msg.getImuMsg() == null ? 0 : msg.getImuMsg()); - query.set("charge_msg", msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); - query.set("gps_msg", msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); - query.eq("robot_id", robotId); + query.set("lidar_msg" , msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); + query.set("imu_msg" , msg.getImuMsg() == null ? 0 : msg.getImuMsg()); + query.set("charge_msg" , msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); + query.set("gps_msg" , msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); + query.eq("robot_id" , robotId); update(query); } } @@ -137,8 +148,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); ProcessMessageResponseDTO msg = responseDTO.getMsg(); - query.set("process_message", msg.getP()); - query.eq("robot_id", robotId); + query.set("process_message" , msg.getP()); + query.eq("robot_id" , robotId); update(query); } } @@ -157,8 +168,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_nav_pause", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_nav_pause" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -171,8 +182,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_stop_navtrack", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_stop_navtrack" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -180,16 +191,16 @@ @Override public void updateCurrTask(String robotId, Long currRouteId, Long currTaskId) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("curr_route_id", currRouteId); - query.set("curr_task_id", currTaskId); - query.eq("robot_id", robotId); + query.set("curr_route_id" , currRouteId); + query.set("curr_task_id" , currTaskId); + query.eq("robot_id" , robotId); update(query); } @Override public RobotStatusInfo getStatusByRobotId(String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotId); + query.eq("robot_id" , robotId); return getOne(query); } @@ -199,12 +210,65 @@ RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); if (responseDTO != null && responseDTO.getMsg() != null) { - log.info("速度信息保存:{}", responseDTO.getMsg()); + log.info("速度信息保存:{}" , responseDTO.getMsg()); UpdateWrapper query = new UpdateWrapper<>(); - query.set("robot_v", responseDTO.getMsg().getSpeed().getV()); - query.set("robot_w", responseDTO.getMsg().getSpeed().getW()); - query.eq("robot_id", robotId); + query.set("robot_v" , responseDTO.getMsg().getSpeed().getV()); + query.set("robot_w" , responseDTO.getMsg().getSpeed().getW()); + query.eq("robot_id" , robotId); update(query); } } + + @Override + public void saveStopState(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + if (responseDTO != null && responseDTO.getMsg() != null) { + log.info("急停状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + query.set(RobotStatusInfo::getButton, responseDTO.getMsg().getButton()); + query.set(RobotStatusInfo::getCollision, responseDTO.getMsg().getCollision()); + query.set(RobotStatusInfo::getSonic, responseDTO.getMsg().getSonic()); + query.set(RobotStatusInfo::getSoft, responseDTO.getMsg().getSoft()); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + @Transactional + @Override + public void saveVoltageResponseMessage(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + //电压下限 45V 电压上限 58.8V 估算电量 + if (responseDTO != null && responseDTO.getMsg() != null) { + RobotInfo info = robotInfoService.getById(robotId); + log.info("电压状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + if (CollectionUtil.isNotEmpty(responseDTO.getMsg().getVoltage())) { + Integer v = responseDTO.getMsg().getVoltage().get(0); + query.set(RobotStatusInfo::getVoltage, v); + //计算电量 + Double quantity = new BigDecimal(v - info.getVoltageMin()).divide(new BigDecimal(info.getVoltageMax() - info.getVoltageMin()),2, BigDecimal.ROUND_HALF_UP).doubleValue(); + query.set(RobotStatusInfo::getElectricityQuantity, quantity*100); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + } + + private RobotResponseDTO parseJson(MqttMessage message, TypeReference> cls) { + String json = new String(message.getPayload()); + if (json.startsWith("\"")) { + json = json.substring(1); + } + if (json.endsWith("\"")) { + json = json.substring(0, json.length() - 1); + } + json = json.replaceAll("\\\\" , ""); + log.info(json); + RobotResponseDTO responseDTO = JSON.parseObject(json, cls); + return responseDTO; + } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java new file mode 100644 index 0000000..a94f6ad --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RobotSystemConfigMapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +@Service +public class RobotSystemConfigServiceImpl extends ServiceImpl implements IRobotSystemConfigService { + @Override + public List selectRobotSystemConfigPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRobotSystemConfigPage(page, query); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java index 286977e..33359e9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java @@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.robot.dao.RobotTrajectoryInfoMapper; +import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.PoseMessageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Date; @@ -27,6 +30,11 @@ */ @Service public class RobotTrajectoryInfoServiceImpl extends ServiceImpl implements IRobotTrajectoryInfoService { + private final IRobotStatusInfoService robotStatusInfoService; + + public RobotTrajectoryInfoServiceImpl(@Lazy IRobotStatusInfoService robotStatusInfoService) { + this.robotStatusInfoService = robotStatusInfoService; + } @Override public List selectRobotTrajectoryInfoPage(Page page, QueryWrapper query) { @@ -35,18 +43,26 @@ @Override public void savePoseMessage(String robotId, MqttMessage message) { + String json = new String(message.getPayload()); RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); - if (responseDTO.getMsg() != null) { - PoseMessageResponseDTO dto = responseDTO.getMsg(); - RobotTrajectoryInfo info = new RobotTrajectoryInfo(); - info.setRobotId(Long.valueOf(robotId)); - info.setCreateTime(new Date()); - info.setPostionX(dto.getX()); - info.setPostionY(dto.getY()); - info.setPostionZ(dto.getZ()); - info.setTheta(dto.getTheta()); + + //读取导航状态,如果导航未开启则不存储 + RobotStatusInfo statusInfo = robotStatusInfoService.getStatusByRobotId(robotId); + if (statusInfo != null && responseDTO.getMsg() != null) { + //执行循迹 保存当前轨迹信息 + if (statusInfo.getCurrRouteId() != null) { + PoseMessageResponseDTO dto = responseDTO.getMsg(); + RobotTrajectoryInfo info = new RobotTrajectoryInfo(); + info.setRobotId(Long.valueOf(robotId)); + info.setCreateTime(new Date()); + info.setPostionX(dto.getX()); + info.setPostionY(dto.getY()); + info.setPostionZ(dto.getZ()); + info.setTheta(dto.getTheta()); + save(info); + } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java index c16c954..9f2c93c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java @@ -74,8 +74,9 @@ private void wrapTaskInfo(TaskInfo taskInfo) { taskInfo.setDiscernTypeName(dictService.getDictNameByCode(RobotDictConstants.DISCERN_TYPE, taskInfo.getDiscernType() + "")); taskInfo.setTaskTypeName(dictService.getDictNameByCode(RobotDictConstants.TASK_TYPE, taskInfo.getTaskType() + "")); + taskInfo.setTaskStatusName(dictService.getDictNameByCode(RobotDictConstants.TASK_STATUS, taskInfo.getTaskType() + "")); //检索当前任务告警数量 - taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(),taskInfo.getRobotId())); + taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(), taskInfo.getRobotId())); } @Transactional diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java new file mode 100644 index 0000000..bed105f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.robot.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * @Description: for batch use + * @Author: wangpeng + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotEmpty(message = "主键id不能为空") + @ApiModelProperty(value = "主键id列表", dataType = "List", required = true) + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java new file mode 100644 index 0000000..08e275e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.robot.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 机器人系统配置信息对象VO + * + * @author lwh + * @date 2023-11-22 + */ +@Data +public class RobotSystemConfigVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "主键", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "系统配置主键", dataType = "String") + private String configKey; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (id != null) { + query.eq("id", id); + } + if (StrUtil.isNotEmpty(configKey)) { + query.eq("config_key", configKey); + } + return query; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java index 6e6033f..454f10b 100644 --- a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java @@ -69,23 +69,23 @@ mqttClient.pub(enums.getReqName(), JSON.toJSONString(messageDTO)); } // 订阅返回值消息 - client.subscribe(enums.getRepName(), 1, (topic, message) -> { - String data = new String(message.getPayload()); - System.out.println(data); - if (StrUtil.isNotEmpty(data)) { - System.out.println(data); - if (data.startsWith("\"")) { - data = data.substring(1); + if (StrUtil.isNotEmpty(enums.getRepName())) { + client.subscribe(enums.getRepName(), 1, (topic, message) -> { + String data = new String(message.getPayload()); + if (StrUtil.isNotEmpty(data)) { + if (data.startsWith("\"")) { + data = data.substring(1); + } + if (data.endsWith("\"")) { + data = data.substring(0, data.length() - 1); + } + data = data.replaceAll("\\\\", ""); + maps.put("result", MsgUtils.convertMessage(data, enums)); + } else { + throw new ServiceException(500, enums.getRemarks() + "指令异常"); } - if (data.endsWith("\"")) { - data = data.substring(0, data.length() - 1); - } - data = data.replaceAll("\\\\", ""); - maps.put("result", MsgUtils.convertMessage(data, enums)); - } else { - throw new ServiceException(500, enums.getRemarks() + "指令异常"); - } - }); + }); + } int i = 0; if (enums.isWaitReply()) { do { diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat index 1db4e88..2864d32 100644 --- a/casic-web/src/main/build/bin/start.bat +++ b/casic-web/src/main/build/bin/start.bat @@ -1,4 +1,4 @@ @echo off title ${project.build.finalName} -java -jar ./lib/${project.build.finalName}.jar +java -jar ./lib/casic-web-2.0.0.jar @pause diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java new file mode 100644 index 0000000..ad0b908 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface IRobotSystemConfigService extends IService { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(Page page, QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 6d3c2af..609a4af 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -1,27 +1,36 @@ package com.casic.missiles.modular.robot.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.ProcessMessageResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.SensorStatusDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.StopStateResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.VoltageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; @@ -37,16 +46,18 @@ @Service public class RobotStatusInfoServiceImpl extends ServiceImpl implements IRobotStatusInfoService { private final AbstractDictService dictService; + private final IRobotInfoService robotInfoService; - public RobotStatusInfoServiceImpl(AbstractDictService dictService) { + public RobotStatusInfoServiceImpl(AbstractDictService dictService, @Lazy IRobotInfoService robotInfoService) { this.dictService = dictService; + this.robotInfoService = robotInfoService; } @Override public void updateConnStatus(String robotId, Integer status) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("conn_status", status); - query.eq("robot_id", robotId); + query.set("conn_status" , status); + query.eq("robot_id" , robotId); update(query); } @@ -60,29 +71,29 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { - statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); + statusInfo.setDiscernTypeName(getDictName("discernType" , statusInfo.getDiscernType())); //暂停状态 - statusInfo.setAppNavPauseName(getDictName("appNavPause", statusInfo.getAppNavPause())); + statusInfo.setAppNavPauseName(getDictName("appNavPause" , statusInfo.getAppNavPause())); //开启状态 - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - String statusName = getDictName("trackStatus", statusInfo.getNavigationStatus()); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + String statusName = getDictName("trackStatus" , statusInfo.getNavigationStatus()); statusInfo.setNavigationStatusName(statusName); - statusInfo.setDataRecordName(getDictName("trackStatus", statusInfo.getDataRecord())); - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - statusInfo.setTrackName(getDictName("trackStatus", statusInfo.getTrack())); - statusInfo.setInsStatusName(getDictName("trackStatus", statusInfo.getInsStatus())); - statusInfo.setAppStopNavtrackName(getDictName("trackStatus", statusInfo.getAppStopNavtrack())); - statusInfo.setTrackRecordName(getDictName("trackStatus", statusInfo.getTrackRecord())); + statusInfo.setDataRecordName(getDictName("trackStatus" , statusInfo.getDataRecord())); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + statusInfo.setTrackName(getDictName("trackStatus" , statusInfo.getTrack())); + statusInfo.setInsStatusName(getDictName("trackStatus" , statusInfo.getInsStatus())); + statusInfo.setAppStopNavtrackName(getDictName("trackStatus" , statusInfo.getAppStopNavtrack())); + statusInfo.setTrackRecordName(getDictName("trackStatus" , statusInfo.getTrackRecord())); //收到状态 - statusInfo.setLidarMsgName(getDictName("lidarMsg", statusInfo.getLidarMsg())); - statusInfo.setImuMsgName(getDictName("lidarMsg", statusInfo.getImuMsg())); - statusInfo.setChargeMsgName(getDictName("lidarMsg", statusInfo.getChargeMsg())); - statusInfo.setGpsMsgName(getDictName("lidarMsg", statusInfo.getGpsMsg())); + statusInfo.setLidarMsgName(getDictName("lidarMsg" , statusInfo.getLidarMsg())); + statusInfo.setImuMsgName(getDictName("lidarMsg" , statusInfo.getImuMsg())); + statusInfo.setChargeMsgName(getDictName("lidarMsg" , statusInfo.getChargeMsg())); + statusInfo.setGpsMsgName(getDictName("lidarMsg" , statusInfo.getGpsMsg())); //连接状态 - statusInfo.setConnStatusName(getDictName("connStatus", statusInfo.getConnStatus())); + statusInfo.setConnStatusName(getDictName("connStatus" , statusInfo.getConnStatus())); } @@ -114,11 +125,11 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); SensorStatusDTO msg = responseDTO.getMsg(); - query.set("lidar_msg", msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); - query.set("imu_msg", msg.getImuMsg() == null ? 0 : msg.getImuMsg()); - query.set("charge_msg", msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); - query.set("gps_msg", msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); - query.eq("robot_id", robotId); + query.set("lidar_msg" , msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); + query.set("imu_msg" , msg.getImuMsg() == null ? 0 : msg.getImuMsg()); + query.set("charge_msg" , msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); + query.set("gps_msg" , msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); + query.eq("robot_id" , robotId); update(query); } } @@ -137,8 +148,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); ProcessMessageResponseDTO msg = responseDTO.getMsg(); - query.set("process_message", msg.getP()); - query.eq("robot_id", robotId); + query.set("process_message" , msg.getP()); + query.eq("robot_id" , robotId); update(query); } } @@ -157,8 +168,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_nav_pause", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_nav_pause" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -171,8 +182,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_stop_navtrack", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_stop_navtrack" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -180,16 +191,16 @@ @Override public void updateCurrTask(String robotId, Long currRouteId, Long currTaskId) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("curr_route_id", currRouteId); - query.set("curr_task_id", currTaskId); - query.eq("robot_id", robotId); + query.set("curr_route_id" , currRouteId); + query.set("curr_task_id" , currTaskId); + query.eq("robot_id" , robotId); update(query); } @Override public RobotStatusInfo getStatusByRobotId(String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotId); + query.eq("robot_id" , robotId); return getOne(query); } @@ -199,12 +210,65 @@ RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); if (responseDTO != null && responseDTO.getMsg() != null) { - log.info("速度信息保存:{}", responseDTO.getMsg()); + log.info("速度信息保存:{}" , responseDTO.getMsg()); UpdateWrapper query = new UpdateWrapper<>(); - query.set("robot_v", responseDTO.getMsg().getSpeed().getV()); - query.set("robot_w", responseDTO.getMsg().getSpeed().getW()); - query.eq("robot_id", robotId); + query.set("robot_v" , responseDTO.getMsg().getSpeed().getV()); + query.set("robot_w" , responseDTO.getMsg().getSpeed().getW()); + query.eq("robot_id" , robotId); update(query); } } + + @Override + public void saveStopState(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + if (responseDTO != null && responseDTO.getMsg() != null) { + log.info("急停状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + query.set(RobotStatusInfo::getButton, responseDTO.getMsg().getButton()); + query.set(RobotStatusInfo::getCollision, responseDTO.getMsg().getCollision()); + query.set(RobotStatusInfo::getSonic, responseDTO.getMsg().getSonic()); + query.set(RobotStatusInfo::getSoft, responseDTO.getMsg().getSoft()); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + @Transactional + @Override + public void saveVoltageResponseMessage(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + //电压下限 45V 电压上限 58.8V 估算电量 + if (responseDTO != null && responseDTO.getMsg() != null) { + RobotInfo info = robotInfoService.getById(robotId); + log.info("电压状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + if (CollectionUtil.isNotEmpty(responseDTO.getMsg().getVoltage())) { + Integer v = responseDTO.getMsg().getVoltage().get(0); + query.set(RobotStatusInfo::getVoltage, v); + //计算电量 + Double quantity = new BigDecimal(v - info.getVoltageMin()).divide(new BigDecimal(info.getVoltageMax() - info.getVoltageMin()),2, BigDecimal.ROUND_HALF_UP).doubleValue(); + query.set(RobotStatusInfo::getElectricityQuantity, quantity*100); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + } + + private RobotResponseDTO parseJson(MqttMessage message, TypeReference> cls) { + String json = new String(message.getPayload()); + if (json.startsWith("\"")) { + json = json.substring(1); + } + if (json.endsWith("\"")) { + json = json.substring(0, json.length() - 1); + } + json = json.replaceAll("\\\\" , ""); + log.info(json); + RobotResponseDTO responseDTO = JSON.parseObject(json, cls); + return responseDTO; + } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java new file mode 100644 index 0000000..a94f6ad --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RobotSystemConfigMapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +@Service +public class RobotSystemConfigServiceImpl extends ServiceImpl implements IRobotSystemConfigService { + @Override + public List selectRobotSystemConfigPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRobotSystemConfigPage(page, query); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java index 286977e..33359e9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java @@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.robot.dao.RobotTrajectoryInfoMapper; +import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.PoseMessageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Date; @@ -27,6 +30,11 @@ */ @Service public class RobotTrajectoryInfoServiceImpl extends ServiceImpl implements IRobotTrajectoryInfoService { + private final IRobotStatusInfoService robotStatusInfoService; + + public RobotTrajectoryInfoServiceImpl(@Lazy IRobotStatusInfoService robotStatusInfoService) { + this.robotStatusInfoService = robotStatusInfoService; + } @Override public List selectRobotTrajectoryInfoPage(Page page, QueryWrapper query) { @@ -35,18 +43,26 @@ @Override public void savePoseMessage(String robotId, MqttMessage message) { + String json = new String(message.getPayload()); RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); - if (responseDTO.getMsg() != null) { - PoseMessageResponseDTO dto = responseDTO.getMsg(); - RobotTrajectoryInfo info = new RobotTrajectoryInfo(); - info.setRobotId(Long.valueOf(robotId)); - info.setCreateTime(new Date()); - info.setPostionX(dto.getX()); - info.setPostionY(dto.getY()); - info.setPostionZ(dto.getZ()); - info.setTheta(dto.getTheta()); + + //读取导航状态,如果导航未开启则不存储 + RobotStatusInfo statusInfo = robotStatusInfoService.getStatusByRobotId(robotId); + if (statusInfo != null && responseDTO.getMsg() != null) { + //执行循迹 保存当前轨迹信息 + if (statusInfo.getCurrRouteId() != null) { + PoseMessageResponseDTO dto = responseDTO.getMsg(); + RobotTrajectoryInfo info = new RobotTrajectoryInfo(); + info.setRobotId(Long.valueOf(robotId)); + info.setCreateTime(new Date()); + info.setPostionX(dto.getX()); + info.setPostionY(dto.getY()); + info.setPostionZ(dto.getZ()); + info.setTheta(dto.getTheta()); + save(info); + } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java index c16c954..9f2c93c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java @@ -74,8 +74,9 @@ private void wrapTaskInfo(TaskInfo taskInfo) { taskInfo.setDiscernTypeName(dictService.getDictNameByCode(RobotDictConstants.DISCERN_TYPE, taskInfo.getDiscernType() + "")); taskInfo.setTaskTypeName(dictService.getDictNameByCode(RobotDictConstants.TASK_TYPE, taskInfo.getTaskType() + "")); + taskInfo.setTaskStatusName(dictService.getDictNameByCode(RobotDictConstants.TASK_STATUS, taskInfo.getTaskType() + "")); //检索当前任务告警数量 - taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(),taskInfo.getRobotId())); + taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(), taskInfo.getRobotId())); } @Transactional diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java new file mode 100644 index 0000000..bed105f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.robot.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * @Description: for batch use + * @Author: wangpeng + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotEmpty(message = "主键id不能为空") + @ApiModelProperty(value = "主键id列表", dataType = "List", required = true) + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java new file mode 100644 index 0000000..08e275e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.robot.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 机器人系统配置信息对象VO + * + * @author lwh + * @date 2023-11-22 + */ +@Data +public class RobotSystemConfigVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "主键", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "系统配置主键", dataType = "String") + private String configKey; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (id != null) { + query.eq("id", id); + } + if (StrUtil.isNotEmpty(configKey)) { + query.eq("config_key", configKey); + } + return query; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java index 6e6033f..454f10b 100644 --- a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java @@ -69,23 +69,23 @@ mqttClient.pub(enums.getReqName(), JSON.toJSONString(messageDTO)); } // 订阅返回值消息 - client.subscribe(enums.getRepName(), 1, (topic, message) -> { - String data = new String(message.getPayload()); - System.out.println(data); - if (StrUtil.isNotEmpty(data)) { - System.out.println(data); - if (data.startsWith("\"")) { - data = data.substring(1); + if (StrUtil.isNotEmpty(enums.getRepName())) { + client.subscribe(enums.getRepName(), 1, (topic, message) -> { + String data = new String(message.getPayload()); + if (StrUtil.isNotEmpty(data)) { + if (data.startsWith("\"")) { + data = data.substring(1); + } + if (data.endsWith("\"")) { + data = data.substring(0, data.length() - 1); + } + data = data.replaceAll("\\\\", ""); + maps.put("result", MsgUtils.convertMessage(data, enums)); + } else { + throw new ServiceException(500, enums.getRemarks() + "指令异常"); } - if (data.endsWith("\"")) { - data = data.substring(0, data.length() - 1); - } - data = data.replaceAll("\\\\", ""); - maps.put("result", MsgUtils.convertMessage(data, enums)); - } else { - throw new ServiceException(500, enums.getRemarks() + "指令异常"); - } - }); + }); + } int i = 0; if (enums.isWaitReply()) { do { diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat index 1db4e88..2864d32 100644 --- a/casic-web/src/main/build/bin/start.bat +++ b/casic-web/src/main/build/bin/start.bat @@ -1,4 +1,4 @@ @echo off title ${project.build.finalName} -java -jar ./lib/${project.build.finalName}.jar +java -jar ./lib/casic-web-2.0.0.jar @pause diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index 739eb99..cc68ae7 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -1,5 +1,6 @@ package com.casic.missiles; +import com.casic.missiles.config.HikLibConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java new file mode 100644 index 0000000..ad0b908 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface IRobotSystemConfigService extends IService { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(Page page, QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 6d3c2af..609a4af 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -1,27 +1,36 @@ package com.casic.missiles.modular.robot.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.ProcessMessageResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.SensorStatusDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.StopStateResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.VoltageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; @@ -37,16 +46,18 @@ @Service public class RobotStatusInfoServiceImpl extends ServiceImpl implements IRobotStatusInfoService { private final AbstractDictService dictService; + private final IRobotInfoService robotInfoService; - public RobotStatusInfoServiceImpl(AbstractDictService dictService) { + public RobotStatusInfoServiceImpl(AbstractDictService dictService, @Lazy IRobotInfoService robotInfoService) { this.dictService = dictService; + this.robotInfoService = robotInfoService; } @Override public void updateConnStatus(String robotId, Integer status) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("conn_status", status); - query.eq("robot_id", robotId); + query.set("conn_status" , status); + query.eq("robot_id" , robotId); update(query); } @@ -60,29 +71,29 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { - statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); + statusInfo.setDiscernTypeName(getDictName("discernType" , statusInfo.getDiscernType())); //暂停状态 - statusInfo.setAppNavPauseName(getDictName("appNavPause", statusInfo.getAppNavPause())); + statusInfo.setAppNavPauseName(getDictName("appNavPause" , statusInfo.getAppNavPause())); //开启状态 - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - String statusName = getDictName("trackStatus", statusInfo.getNavigationStatus()); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + String statusName = getDictName("trackStatus" , statusInfo.getNavigationStatus()); statusInfo.setNavigationStatusName(statusName); - statusInfo.setDataRecordName(getDictName("trackStatus", statusInfo.getDataRecord())); - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - statusInfo.setTrackName(getDictName("trackStatus", statusInfo.getTrack())); - statusInfo.setInsStatusName(getDictName("trackStatus", statusInfo.getInsStatus())); - statusInfo.setAppStopNavtrackName(getDictName("trackStatus", statusInfo.getAppStopNavtrack())); - statusInfo.setTrackRecordName(getDictName("trackStatus", statusInfo.getTrackRecord())); + statusInfo.setDataRecordName(getDictName("trackStatus" , statusInfo.getDataRecord())); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + statusInfo.setTrackName(getDictName("trackStatus" , statusInfo.getTrack())); + statusInfo.setInsStatusName(getDictName("trackStatus" , statusInfo.getInsStatus())); + statusInfo.setAppStopNavtrackName(getDictName("trackStatus" , statusInfo.getAppStopNavtrack())); + statusInfo.setTrackRecordName(getDictName("trackStatus" , statusInfo.getTrackRecord())); //收到状态 - statusInfo.setLidarMsgName(getDictName("lidarMsg", statusInfo.getLidarMsg())); - statusInfo.setImuMsgName(getDictName("lidarMsg", statusInfo.getImuMsg())); - statusInfo.setChargeMsgName(getDictName("lidarMsg", statusInfo.getChargeMsg())); - statusInfo.setGpsMsgName(getDictName("lidarMsg", statusInfo.getGpsMsg())); + statusInfo.setLidarMsgName(getDictName("lidarMsg" , statusInfo.getLidarMsg())); + statusInfo.setImuMsgName(getDictName("lidarMsg" , statusInfo.getImuMsg())); + statusInfo.setChargeMsgName(getDictName("lidarMsg" , statusInfo.getChargeMsg())); + statusInfo.setGpsMsgName(getDictName("lidarMsg" , statusInfo.getGpsMsg())); //连接状态 - statusInfo.setConnStatusName(getDictName("connStatus", statusInfo.getConnStatus())); + statusInfo.setConnStatusName(getDictName("connStatus" , statusInfo.getConnStatus())); } @@ -114,11 +125,11 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); SensorStatusDTO msg = responseDTO.getMsg(); - query.set("lidar_msg", msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); - query.set("imu_msg", msg.getImuMsg() == null ? 0 : msg.getImuMsg()); - query.set("charge_msg", msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); - query.set("gps_msg", msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); - query.eq("robot_id", robotId); + query.set("lidar_msg" , msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); + query.set("imu_msg" , msg.getImuMsg() == null ? 0 : msg.getImuMsg()); + query.set("charge_msg" , msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); + query.set("gps_msg" , msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); + query.eq("robot_id" , robotId); update(query); } } @@ -137,8 +148,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); ProcessMessageResponseDTO msg = responseDTO.getMsg(); - query.set("process_message", msg.getP()); - query.eq("robot_id", robotId); + query.set("process_message" , msg.getP()); + query.eq("robot_id" , robotId); update(query); } } @@ -157,8 +168,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_nav_pause", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_nav_pause" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -171,8 +182,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_stop_navtrack", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_stop_navtrack" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -180,16 +191,16 @@ @Override public void updateCurrTask(String robotId, Long currRouteId, Long currTaskId) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("curr_route_id", currRouteId); - query.set("curr_task_id", currTaskId); - query.eq("robot_id", robotId); + query.set("curr_route_id" , currRouteId); + query.set("curr_task_id" , currTaskId); + query.eq("robot_id" , robotId); update(query); } @Override public RobotStatusInfo getStatusByRobotId(String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotId); + query.eq("robot_id" , robotId); return getOne(query); } @@ -199,12 +210,65 @@ RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); if (responseDTO != null && responseDTO.getMsg() != null) { - log.info("速度信息保存:{}", responseDTO.getMsg()); + log.info("速度信息保存:{}" , responseDTO.getMsg()); UpdateWrapper query = new UpdateWrapper<>(); - query.set("robot_v", responseDTO.getMsg().getSpeed().getV()); - query.set("robot_w", responseDTO.getMsg().getSpeed().getW()); - query.eq("robot_id", robotId); + query.set("robot_v" , responseDTO.getMsg().getSpeed().getV()); + query.set("robot_w" , responseDTO.getMsg().getSpeed().getW()); + query.eq("robot_id" , robotId); update(query); } } + + @Override + public void saveStopState(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + if (responseDTO != null && responseDTO.getMsg() != null) { + log.info("急停状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + query.set(RobotStatusInfo::getButton, responseDTO.getMsg().getButton()); + query.set(RobotStatusInfo::getCollision, responseDTO.getMsg().getCollision()); + query.set(RobotStatusInfo::getSonic, responseDTO.getMsg().getSonic()); + query.set(RobotStatusInfo::getSoft, responseDTO.getMsg().getSoft()); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + @Transactional + @Override + public void saveVoltageResponseMessage(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + //电压下限 45V 电压上限 58.8V 估算电量 + if (responseDTO != null && responseDTO.getMsg() != null) { + RobotInfo info = robotInfoService.getById(robotId); + log.info("电压状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + if (CollectionUtil.isNotEmpty(responseDTO.getMsg().getVoltage())) { + Integer v = responseDTO.getMsg().getVoltage().get(0); + query.set(RobotStatusInfo::getVoltage, v); + //计算电量 + Double quantity = new BigDecimal(v - info.getVoltageMin()).divide(new BigDecimal(info.getVoltageMax() - info.getVoltageMin()),2, BigDecimal.ROUND_HALF_UP).doubleValue(); + query.set(RobotStatusInfo::getElectricityQuantity, quantity*100); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + } + + private RobotResponseDTO parseJson(MqttMessage message, TypeReference> cls) { + String json = new String(message.getPayload()); + if (json.startsWith("\"")) { + json = json.substring(1); + } + if (json.endsWith("\"")) { + json = json.substring(0, json.length() - 1); + } + json = json.replaceAll("\\\\" , ""); + log.info(json); + RobotResponseDTO responseDTO = JSON.parseObject(json, cls); + return responseDTO; + } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java new file mode 100644 index 0000000..a94f6ad --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RobotSystemConfigMapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +@Service +public class RobotSystemConfigServiceImpl extends ServiceImpl implements IRobotSystemConfigService { + @Override + public List selectRobotSystemConfigPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRobotSystemConfigPage(page, query); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java index 286977e..33359e9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java @@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.robot.dao.RobotTrajectoryInfoMapper; +import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.PoseMessageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Date; @@ -27,6 +30,11 @@ */ @Service public class RobotTrajectoryInfoServiceImpl extends ServiceImpl implements IRobotTrajectoryInfoService { + private final IRobotStatusInfoService robotStatusInfoService; + + public RobotTrajectoryInfoServiceImpl(@Lazy IRobotStatusInfoService robotStatusInfoService) { + this.robotStatusInfoService = robotStatusInfoService; + } @Override public List selectRobotTrajectoryInfoPage(Page page, QueryWrapper query) { @@ -35,18 +43,26 @@ @Override public void savePoseMessage(String robotId, MqttMessage message) { + String json = new String(message.getPayload()); RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); - if (responseDTO.getMsg() != null) { - PoseMessageResponseDTO dto = responseDTO.getMsg(); - RobotTrajectoryInfo info = new RobotTrajectoryInfo(); - info.setRobotId(Long.valueOf(robotId)); - info.setCreateTime(new Date()); - info.setPostionX(dto.getX()); - info.setPostionY(dto.getY()); - info.setPostionZ(dto.getZ()); - info.setTheta(dto.getTheta()); + + //读取导航状态,如果导航未开启则不存储 + RobotStatusInfo statusInfo = robotStatusInfoService.getStatusByRobotId(robotId); + if (statusInfo != null && responseDTO.getMsg() != null) { + //执行循迹 保存当前轨迹信息 + if (statusInfo.getCurrRouteId() != null) { + PoseMessageResponseDTO dto = responseDTO.getMsg(); + RobotTrajectoryInfo info = new RobotTrajectoryInfo(); + info.setRobotId(Long.valueOf(robotId)); + info.setCreateTime(new Date()); + info.setPostionX(dto.getX()); + info.setPostionY(dto.getY()); + info.setPostionZ(dto.getZ()); + info.setTheta(dto.getTheta()); + save(info); + } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java index c16c954..9f2c93c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java @@ -74,8 +74,9 @@ private void wrapTaskInfo(TaskInfo taskInfo) { taskInfo.setDiscernTypeName(dictService.getDictNameByCode(RobotDictConstants.DISCERN_TYPE, taskInfo.getDiscernType() + "")); taskInfo.setTaskTypeName(dictService.getDictNameByCode(RobotDictConstants.TASK_TYPE, taskInfo.getTaskType() + "")); + taskInfo.setTaskStatusName(dictService.getDictNameByCode(RobotDictConstants.TASK_STATUS, taskInfo.getTaskType() + "")); //检索当前任务告警数量 - taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(),taskInfo.getRobotId())); + taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(), taskInfo.getRobotId())); } @Transactional diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java new file mode 100644 index 0000000..bed105f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.robot.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * @Description: for batch use + * @Author: wangpeng + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotEmpty(message = "主键id不能为空") + @ApiModelProperty(value = "主键id列表", dataType = "List", required = true) + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java new file mode 100644 index 0000000..08e275e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.robot.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 机器人系统配置信息对象VO + * + * @author lwh + * @date 2023-11-22 + */ +@Data +public class RobotSystemConfigVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "主键", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "系统配置主键", dataType = "String") + private String configKey; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (id != null) { + query.eq("id", id); + } + if (StrUtil.isNotEmpty(configKey)) { + query.eq("config_key", configKey); + } + return query; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java index 6e6033f..454f10b 100644 --- a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java @@ -69,23 +69,23 @@ mqttClient.pub(enums.getReqName(), JSON.toJSONString(messageDTO)); } // 订阅返回值消息 - client.subscribe(enums.getRepName(), 1, (topic, message) -> { - String data = new String(message.getPayload()); - System.out.println(data); - if (StrUtil.isNotEmpty(data)) { - System.out.println(data); - if (data.startsWith("\"")) { - data = data.substring(1); + if (StrUtil.isNotEmpty(enums.getRepName())) { + client.subscribe(enums.getRepName(), 1, (topic, message) -> { + String data = new String(message.getPayload()); + if (StrUtil.isNotEmpty(data)) { + if (data.startsWith("\"")) { + data = data.substring(1); + } + if (data.endsWith("\"")) { + data = data.substring(0, data.length() - 1); + } + data = data.replaceAll("\\\\", ""); + maps.put("result", MsgUtils.convertMessage(data, enums)); + } else { + throw new ServiceException(500, enums.getRemarks() + "指令异常"); } - if (data.endsWith("\"")) { - data = data.substring(0, data.length() - 1); - } - data = data.replaceAll("\\\\", ""); - maps.put("result", MsgUtils.convertMessage(data, enums)); - } else { - throw new ServiceException(500, enums.getRemarks() + "指令异常"); - } - }); + }); + } int i = 0; if (enums.isWaitReply()) { do { diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat index 1db4e88..2864d32 100644 --- a/casic-web/src/main/build/bin/start.bat +++ b/casic-web/src/main/build/bin/start.bat @@ -1,4 +1,4 @@ @echo off title ${project.build.finalName} -java -jar ./lib/${project.build.finalName}.jar +java -jar ./lib/casic-web-2.0.0.jar @pause diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index 739eb99..cc68ae7 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -1,5 +1,6 @@ package com.casic.missiles; +import com.casic.missiles.config.HikLibConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 815b3c1..db10efc 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -4,10 +4,9 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver -# url: jdbc:mysql://111.198.10.15:11336/casic_robot_inspection?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8 - url: jdbc:mysql://127.0.0.1:3306/casic_robot_inspection?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8 + url: jdbc:mysql://localhost:3306/casic_robot_inspection?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root - password: root + password: 123456 jms: pub-sub-domain: true # session: diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java b/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java deleted file mode 100644 index 6b4598d..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HiLibProperty.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -public class HiLibProperty { - @Value("${casic.hiklib:-1}") - private String hikLibPath; -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java index e3fee91..9362007 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java +++ b/casic-ptz/src/main/java/com/casic/missiles/config/HikLibConfig.java @@ -17,9 +17,10 @@ @Configuration public class HikLibConfig { - @Value("${casic.hiklib:-1}") + @Value("${casic.hikSdk:-1}") private String hikLibPath; - + public static String hikSdk; + public static String hikPlay; private static HCNetSDK hcNetSDK; @Bean @@ -37,6 +38,14 @@ hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath, HCNetSDK.class); return hcNetSDK; } -} - - + @Value("${casic.hikSdk:-1}") + public void setHikSdk(String hikSdk) { + System.out.println("load path:"+hikSdk); + HikLibConfig.hikSdk = hikSdk; + } + @Value("${casic.hikPlay:-1}") + public void setHikPlay(String hikPlay) { + System.out.println("load path:"+hikPlay); + HikLibConfig.hikPlay = hikPlay; + } +} \ No newline at end of file diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java index 6c9c24a..e140e0d 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/HCNetSDK.java @@ -16,6 +16,7 @@ package com.casic.missiles.modular.ptz.service; +import com.casic.missiles.config.HikLibConfig; import com.sun.jna.*; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.examples.win32.W32API; @@ -25,18 +26,17 @@ import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.ShortByReference; import com.sun.jna.win32.StdCallLibrary; +import org.springframework.context.annotation.DependsOn; import java.io.File; //SDK接口说明,HCNetSDK.dll public interface HCNetSDK extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; - +// String dllPath = Thread.currentThread().getContextClassLoader().getResource(HikLibConfig.hikSdk).getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"HCNetSDK.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\HCNetSDK.dll"; - HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path, - HCNetSDK.class); + HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HikLibConfig.hikSdk,HCNetSDK.class); /***宏定义***/ //常量 @@ -3175,12 +3175,12 @@ interface PlayCtrl extends StdCallLibrary { - String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; +// String dllPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); +// String path = dllPath.substring(1).replace("/", File.separator)+"config"+File.separator+"hiklib"+File.separator+"PlayCtrl.dll"; //String path = "D:\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\CH-HCNetSDKV6.1.6.3_build20200925_Win64\\Demo示例\\4- Java 开发示例\\1-ClientDemo\\ClientDemo-NetBeansPro\\lib\\PlayCtrl.dll"; - PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(path, PlayCtrl.class); + PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(HikLibConfig.hikPlay, PlayCtrl.class); public static final int STREAME_REALTIME = 0; public static final int STREAME_FILE = 1; diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 821dd6a..7d36807 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -18,16 +18,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; - +@ConditionalOnBean(HCNetSDK.class) @Service public class HCNetServiceImpl implements IHCNetService { private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class); - @Lazy + private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index bc99a9a..39a0a34 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -9,4 +9,5 @@ * 任务类型 */ String TASK_TYPE = "taskType"; + String TASK_STATUS = "taskStatus"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java index f7ca84c..7e3c399 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/AlarmRecordController.java @@ -5,6 +5,7 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.AlarmRecord; import com.casic.missiles.modular.robot.service.IAlarmRecordService; @@ -78,13 +79,20 @@ /** * 删除告警记录 */ - @ApiOperation(value = "删除接口", hidden = true) + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { alarmRecordService.removeById(id); return ResponseDataDTO.success(); } + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms idForms) { + alarmRecordService.removeByIds(idForms.getIds()); + return ResponseDataDTO.success(); + } + /** * 告警记录详情 */ @@ -93,4 +101,4 @@ public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(alarmRecordService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index b59291b..f74aee2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -75,7 +75,11 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } - + @ApiOperation(value = "软件急停") + @GetMapping(value = "/softwareStop") + public ResponseDataDTO softwareStop(@RequestBody SoftwareStopRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); + } @ApiOperation(value = "循迹列表读取") @GetMapping(value = "/trackList") public ResponseDataDTO> trackList(@RequestBody TrackListRequest request) { @@ -168,7 +172,6 @@ return list; } - /** * 指令状态读取 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java new file mode 100644 index 0000000..3026e28 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotSystemConfigController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import com.casic.missiles.modular.robot.vo.RobotSystemConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 机器人系统配置信息Controller + * + * @author lwh + * @date 2023-11-22 + */ +@Api(tags = "机器人系统配置信息") +@RestController +@RequestMapping("/robot/config") +public class RobotSystemConfigController extends BaseController { + + private final IRobotSystemConfigService robotSystemConfigService; + + public RobotSystemConfigController(IRobotSystemConfigService robotSystemConfigService) { + this.robotSystemConfigService = robotSystemConfigService; + } + + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RobotSystemConfigVO robotSystemConfigVO) { + QueryWrapper query = robotSystemConfigVO.genQuery(); + return ResponseDataDTO.success(robotSystemConfigService.list(query)); + } + + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RobotSystemConfigVO robotSystemConfigVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = robotSystemConfigVO.genQuery(); + page = robotSystemConfigService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.save(robotSystemConfig); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "根据配置键进行修改") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody @Valid RobotSystemConfig robotSystemConfig) { + robotSystemConfigService.update(robotSystemConfig, new LambdaQueryWrapper().eq(RobotSystemConfig::getConfigKey, robotSystemConfig)); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + robotSystemConfigService.removeById(id); + return ResponseDataDTO.success(); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + robotSystemConfigService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @ApiOperation(value = "详情查询") + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(robotSystemConfigService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java index 674079a..427a6d9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteInfoController.java @@ -45,7 +45,7 @@ /** * 线路信息管理(其他信息待定)分页列表 */ - @ApiOperation(value = "分页查询", hidden = true) + @ApiOperation(value = "分页查询" , hidden = true) @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(RouteInfoVO routeInfoVO) { Page page = PageFactory.defaultPage(); @@ -57,7 +57,7 @@ /** * 新增线路信息管理(其他信息待定) */ - @ApiOperation(value = "新增接口", hidden = true) + @ApiOperation(value = "新增接口" , hidden = true) @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody RouteInfo routeInfo) { routeInfoService.save(routeInfo); @@ -67,7 +67,7 @@ /** * 修改线路信息管理(其他信息待定) */ - @ApiOperation(value = "修改接口", hidden = true) + @ApiOperation(value = "修改接口" , hidden = true) @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody RouteInfo routeInfo) { routeInfoService.updateById(routeInfo); @@ -87,9 +87,9 @@ /** * 线路信息管理(其他信息待定)详情 */ - @ApiOperation(value = "详情查询", hidden = true) + @ApiOperation(value = "详情查询" , hidden = true) @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(routeInfoService.getById(id)); } -} +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java new file mode 100644 index 0000000..e8e638b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RobotSystemConfigMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 机器人系统配置信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface RobotSystemConfigMapper extends BaseMapper { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml new file mode 100644 index 0000000..5e115ee --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RobotSystemConfigMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + id + ,config_key as configKey, config_value as configValue + + + a + . + id + , + a.config_key + as configKey , + a.config_value + as configValue + + + + + + and id = #{request.id} + + + and config_key = #{request.configKey} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java index f39a436..c66d009 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotInfo.java @@ -23,73 +23,73 @@ /** * 主键 */ - @ApiModelProperty(value = "主键", dataType = "Long") + @ApiModelProperty(value = "主键" , dataType = "Long") @TableField("id") private Long id; /** * 创建时间 */ - @ApiModelProperty(value = "创建时间", dataType = "Date") + @ApiModelProperty(value = "创建时间" , dataType = "Date") @TableField("create_time") private Date createTime; /** * 修改时间 */ - @ApiModelProperty(value = "修改时间", dataType = "Date") + @ApiModelProperty(value = "修改时间" , dataType = "Date") @TableField("update_time") private Date updateTime; /** * 设置线速度 */ - @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置线速度" , dataType = "BigDecimal") @TableField("conf_v") private BigDecimal confV; /** * 设置角速度 */ - @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal") + @ApiModelProperty(value = "设置角速度" , dataType = "BigDecimal") @TableField("conf_w") private BigDecimal confW; /** * 机器人名称 */ - @ApiModelProperty(value = "机器人名称", dataType = "String") + @ApiModelProperty(value = "机器人名称" , dataType = "String") @TableField("robot_name") private String robotName; /** * 机器人IP */ - @ApiModelProperty(value = "机器人mqtt", dataType = "Long") + @ApiModelProperty(value = "机器人mqtt" , dataType = "Long") @TableField("robot_url") private String robotUrl; - @ApiModelProperty(value = "机器人IP", dataType = "Long") + @ApiModelProperty(value = "机器人IP" , dataType = "Long") @TableField("robot_ip") private String robotIp; /** * 机器人端口 */ - @ApiModelProperty(value = "机器人端口", dataType = "Long") + @ApiModelProperty(value = "机器人端口" , dataType = "Long") @TableField("robot_port") private Long robotPort; /** * 机器人用户名 */ - @ApiModelProperty(value = "机器人用户名", dataType = "String") + @ApiModelProperty(value = "机器人用户名" , dataType = "String") @TableField("robot_admin") private String robotAdmin; /** * 密码 */ - @ApiModelProperty(value = "密码", dataType = "String") + @ApiModelProperty(value = "密码" , dataType = "String") @TableField("robot_password") private String robotPassword; @@ -104,18 +104,26 @@ @TableField(exist = false) private RouteInfo currRoute; - @ApiModelProperty(value = "pcd下载地址", dataType = "String") + @ApiModelProperty(value = "pcd下载地址" , dataType = "String") @TableField("pcd_download") private String pcdDownload; - @ApiModelProperty(value = "启动监听消息", dataType = "String") + @ApiModelProperty(value = "启动监听消息" , dataType = "String") @TableField("default_topic") private String defaultTopic; - @ApiModelProperty(value = "告警阈值配置", dataType = "String") + @ApiModelProperty(value = "告警阈值配置" , dataType = "String") @TableField("alarm_threshold") private BigDecimal alarmThreshold; + @ApiModelProperty(value = "电压上限" , dataType = "Integer") + @TableField("voltage_max") + private Integer voltageMax; + + @ApiModelProperty(value = "电压下限" , dataType = "Integer") + @TableField("voltage_min") + private Integer voltageMin; + @Override public String toString() { return "RobotInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java index ca6e51b..ce7725d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java @@ -257,6 +257,22 @@ @ApiModelProperty(value = "电压", dataType = "Integer") private BigDecimal voltage; + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)", dataType = "Integer") + @TableField("soft") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发", dataType = "Integer") + @TableField("sonic") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发", dataType = "Integer") + @TableField("collision") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发", dataType = "Integer") + @TableField("button") + private Integer button; + @Override public String toString() { return "RobotStatusInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java new file mode 100644 index 0000000..c439728 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotSystemConfig.java @@ -0,0 +1,45 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + + +/** + * 机器人系统配置信息对象 robot_system_config + * + * @author lwh + * @date 2023-11-22 + */ +@Data +@TableName("robot_system_config") +public class RobotSystemConfig extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + @NotEmpty(message = "配置项Key不能为空") + @Length(max = 64,message = "配置项Key最大长度为64") + @ApiModelProperty(value = "配置项Key", dataType = "String") + @TableField("config_key") + private String configKey; + + @ApiModelProperty(value = "配置值", dataType = "String") + @TableField("config_value") + private String configValue; + + @Override + public String toString() { + return "RobotSystemConfig{" + + "id=" + id + + "configKey=" + configKey + + "configValue=" + configValue + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java index 60e8143..49e822a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskInfo.java @@ -111,6 +111,10 @@ @TableField("task_status") private Integer taskStatus; + @ApiModelProperty(value = "任务状态字典名", dataType = "Integer") + @TableField(exist = false) + private String taskStatusName; + @ApiModelProperty(value = "机器人ID", dataType = "Long") @TableField("robot_id") private Long robotId; @@ -118,6 +122,7 @@ @ApiModelProperty(value = "告警数量", dataType = "Integer") @TableField(exist = false) private Integer alarmNum; + @Override public String toString() { return "TaskInfo{" diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index 36cc951..de09c54 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -12,53 +12,55 @@ * 指令集合 */ public enum InstructCodeEnums { - TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { + TRACK_LIST("/get_track_list" , "/get_track_list_response" , "获取轨迹列表" , true, new TypeReference>>() { }), - TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + TASKPOINT_LIST("/get_taskpoint_list" , "/get_taskpoint_list_response" , "获取关键点列表" , true, new TypeReference>>() { }), //当前版本 暂不支撑 - MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { + MAP_LIST("/get_map_list" , "/get_map_list_response" , "获取地图列表" , true, new TypeReference>>() { }), - DATA_RECORD("/data_record", "/data_record_response", "启动或关闭录包功能", true, new TypeReference>() { + DATA_RECORD("/data_record" , "/data_record_response" , "启动或关闭录包功能" , true, new TypeReference>() { }), - APP_CMD_VEL("/1app_cmd_vel1", "/app_cmd_vel_response", "速度控制与反馈", false, new TypeReference>() { + APP_CMD_VEL("/1app_cmd_vel1" , "/app_cmd_vel_response" , "速度控制与反馈" , false, new TypeReference>() { }), - CHANGE_PCD("/change_pcd", "/change_pcd_response", "转换栅格地图", true, new TypeReference>() { + CHANGE_PCD("/change_pcd" , "/change_pcd_response" , "转换栅格地图" , true, new TypeReference>() { }), - SLAM("/slam", "/slam_response", "启动或关闭建图", true, new TypeReference>() { + SLAM("/slam" , "/slam_response" , "启动或关闭建图" , true, new TypeReference>() { }), - CTRL_NAV("/ctrl_nav", "/ctrl_nav_response", "启动或关闭导航功能", true, new TypeReference>() { + CTRL_NAV("/ctrl_nav" , "/ctrl_nav_response" , "启动或关闭导航功能" , true, new TypeReference>() { }), - TRACK_RECORD("/track_record", "/track_record_response", "启动或关闭轨迹录制功能", true, new TypeReference>() { + SOFTWARE_STOP("/software_stop" , "" , "软件急停" , false, new TypeReference>() { }), - START_TRACK("/start_track", "/start_track_response", "启动或关闭循迹功能", true, new TypeReference>() { + TRACK_RECORD("/track_record" , "/track_record_response" , "启动或关闭轨迹录制功能" , true, new TypeReference>() { }), - DELETE_TRACK("/delete_track", "/delete_track_response", "删除路线", false, new TypeReference>() { + START_TRACK("/start_track" , "/start_track_response" , "启动或关闭循迹功能" , true, new TypeReference>() { }), - GET_NAVIGATION("/get_navigation", "/get_navigation_response", "导航开启/关闭状态读取", true, new TypeReference>() { + DELETE_TRACK("/delete_track" , "/delete_track_response" , "删除路线" , false, new TypeReference>() { }), - GET_DATA_RECORD("/get_data_record", "/get_data_record_response", "获取录包状态", true, new TypeReference>() { + GET_NAVIGATION("/get_navigation" , "/get_navigation_response" , "导航开启/关闭状态读取" , true, new TypeReference>() { }), - GET_TRACK_RECORD("/get_track_record", "/get_track_record_response", "获取轨迹录制状态", true, new TypeReference>() { + GET_DATA_RECORD("/get_data_record" , "/get_data_record_response" , "获取录包状态" , true, new TypeReference>() { }), - GET_TRACK("/get_track", "/get_track_response", "获取循迹状态", true, new TypeReference>() { + GET_TRACK_RECORD("/get_track_record" , "/get_track_record_response" , "获取轨迹录制状态" , true, new TypeReference>() { }), - GET_INS("/get_ins", "/get_ins_response", "获取ins状态", true, new TypeReference>() { + GET_TRACK("/get_track" , "/get_track_response" , "获取循迹状态" , true, new TypeReference>() { }), - CURRENT_MAP("", "/current_map", "机器人上报状态", true, new TypeReference>() { + GET_INS("/get_ins" , "/get_ins_response" , "获取ins状态" , true, new TypeReference>() { }), - SET_SPEED("/set_speed", "/set_speed_response", "最大运动速度设置", true, new TypeReference>() { + CURRENT_MAP("" , "/current_map" , "机器人上报状态" , true, new TypeReference>() { + }), + SET_SPEED("/set_speed" , "/set_speed_response" , "最大运动速度设置" , true, new TypeReference>() { }), - GET_DATA_LIST("/get_data_list", "/get_data_list_response", "获取数据包列表", true, new TypeReference>>() { + GET_DATA_LIST("/get_data_list" , "/get_data_list_response" , "获取数据包列表" , true, new TypeReference>>() { }), - GET_CURRENT_SPEED("/get_current_speed", "/get_current_speed_response", "最大运动速度查询", true, new TypeReference>() { + GET_CURRENT_SPEED("/get_current_speed" , "/get_current_speed_response" , "最大运动速度查询" , true, new TypeReference>() { }), - POSE_MESSAGE("", "/pose_message", "机器人实时位置", true, new TypeReference>() { + POSE_MESSAGE("" , "/pose_message" , "机器人实时位置" , true, new TypeReference>() { }), - NAV_PAUSE("/nav_pause", "/nav_pause_response", "启动暂停状态", true, new TypeReference>() { + NAV_PAUSE("/nav_pause" , "/nav_pause_response" , "启动暂停状态" , true, new TypeReference>() { }), - STOP_NAV_STOP("/stop_nav_stop", "/stop_nav_stop_response", "启动或取消停障", true, new TypeReference>() { + STOP_NAV_STOP("/stop_nav_stop" , "/stop_nav_stop_response" , "启动或取消停障" , true, new TypeReference>() { }); /** @@ -67,11 +69,11 @@ public static Map commCmdMap = new HashMap<>(); static { - commCmdMap.put("get_navigation", InstructCodeEnums.GET_NAVIGATION); - commCmdMap.put("get_data_record", InstructCodeEnums.GET_DATA_RECORD); - commCmdMap.put("get_track_record", InstructCodeEnums.GET_TRACK_RECORD); - commCmdMap.put("get_track", InstructCodeEnums.GET_TRACK); - commCmdMap.put("get_ins", InstructCodeEnums.GET_INS); + commCmdMap.put("get_navigation" , InstructCodeEnums.GET_NAVIGATION); + commCmdMap.put("get_data_record" , InstructCodeEnums.GET_DATA_RECORD); + commCmdMap.put("get_track_record" , InstructCodeEnums.GET_TRACK_RECORD); + commCmdMap.put("get_track" , InstructCodeEnums.GET_TRACK); + commCmdMap.put("get_ins" , InstructCodeEnums.GET_INS); } /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index e1f1fa1..5aaf056 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -4,10 +4,21 @@ * 指令推送消息定义 */ public enum InstructStatusMsgEnums { - PROCESS_MESSAGE("process_message", "建图进度推送消息"), - POSE_MESSAGE("pose_message", "实时定位推送消息"), - ALARM_RECORD("alarm_record", "告警推送消息"), - ROBOT_STATUS("robot_status", "机器人状态消息"); + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.ProcessMessageMsgHandler + */ + PROCESS_MESSAGE("process_message" , "建图进度推送消息"), + /** + * @see com.casic.missiles.modular.robot.opt.handler.msg.PoseMessageMsgHandler + */ + POSE_MESSAGE("pose_message" , "实时定位推送消息"), + ALARM_RECORD("alarm_record" , "告警推送消息"), + /** + * 机器人状态消息推送(30s) + * + * @see com.casic.missiles.modular.robot.opt.handler.msg.SensorStatusMsgHandler + */ + ROBOT_STATUS("robot_status" , "机器人状态消息"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index bcace6a..b5f46d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,6 +10,9 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; +/** + * 转换栅格地图 + */ @Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java new file mode 100644 index 0000000..11e1e4f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/SoftwareStopCmdHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.SoftwareStopRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import org.springframework.stereotype.Component; + +/** + * 转换栅格地图 + */ +@Component("SOFTWARE_STOP") +public class SoftwareStopCmdHandler extends AbstractCmdHandler { + + protected SoftwareStopCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { + super(optService, service); + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(SoftwareStopRequest request, InstructCodeEnums enums) { + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + ResponseDataDTO res = optService.robotCmd(getRobotInfo(), enums, messageDTO); + return res; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(SoftwareStopRequest request, ResponseDataDTO response) { + return response; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index 35c5f37..1cf0e55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -22,7 +22,6 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java index c66fdd8..a184866 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/SensorStatusMsgHandler.java @@ -21,7 +21,7 @@ private static Map index = new ConcurrentHashMap<>(); static { - index.put("index", 0); + index.put("index" , 0); } public SensorStatusMsgHandler(IRobotStatusInfoService statusInfoService) { @@ -31,11 +31,9 @@ @Override public void process(String robotId, String topic, MqttMessage message) { Integer val = index.get("index") + 1; - index.put("index", val); - + index.put("index" , val); if (val > 30) { - log.info("主键:{},传感器状态topic:{},消息内容:{}", robotId, topic, message.toString()); - index.put("index", 0); + index.put("index" , 0); statusInfoService.saveSensorStatus(robotId, message); RobotStatusInfo robotStatusInfo = statusInfoService.getStatusByRobotId(robotId); sendWebSocket(InstructStatusMsgEnums.ROBOT_STATUS, robotId, robotStatusInfo); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java new file mode 100644 index 0000000..6fdec61 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 急停状态上报 + */ +@Slf4j +@Component("/stop_state_response") +public class StopStateMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public StopStateMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------急停状态信息反馈:{}", message); + statusInfoService.saveStopState(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java new file mode 100644 index 0000000..11735d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/VoltageResponseMsgHandler.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.robot.opt.handler.msg; + +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 电压信息反馈 + */ +@Slf4j +@Component("/get_voltage_response") +public class VoltageResponseMsgHandler extends AbstractSocketHandler { + private final IRobotStatusInfoService statusInfoService; + private static Map index = new ConcurrentHashMap<>(); + + public VoltageResponseMsgHandler(IRobotStatusInfoService statusInfoService) { + this.statusInfoService = statusInfoService; + } + + @Override + public void process(String robotId, String topic, MqttMessage message) { + log.info("----------------------电压信息反馈:{}", message); + statusInfoService.saveVoltageResponseMessage(robotId, message); +// sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 11c4cc6..2cc7e3f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -118,7 +118,7 @@ @Override public ResponseDataDTO execCmdHandler(R request, InstructCodeEnums enums, IBaseCmdHandler cmdHandler) { cmdHandler.initHandler((BaseRobotCmdDTO) request); - ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request, InstructCodeEnums.TRACK_LIST); + ResponseDataDTO result = (ResponseDataDTO) cmdHandler.senderCmd((BaseRobotCmdDTO) request,enums); result = (ResponseDataDTO) cmdHandler.afterInvoke((BaseRobotCmdDTO) request, result); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java new file mode 100644 index 0000000..93dc3f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SoftwareStopRequest.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 软件急停 + */ +@Data +public class SoftwareStopRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + + @ApiModelProperty(value = "下发状态 0:不急停 1:急停", dataType = "Integer") + private Integer control; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java deleted file mode 100644 index d749c12..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.casic.missiles.modular.robot.opt.instruct.dto; - -import lombok.Data; - -/** - * 速度响应DTO - */ -@Data -public class SpeedResponseDTO { - private SpeedDTO speed; -} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java new file mode 100644 index 0000000..bd8851c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/SpeedResponseDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedDTO; +import lombok.Data; + +/** + * 速度响应DTO + */ +@Data +public class SpeedResponseDTO { + private SpeedDTO speed; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java new file mode 100644 index 0000000..eb514bf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/StopStateResponseDTO.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 电压信息返回 + */ +@Data +public class StopStateResponseDTO { + @ApiModelProperty(value = "软件急停(0:无触发 1:触发)" , dataType = "Integer") + private Integer soft; + + @ApiModelProperty(value = "二进制第x位 第X个超声, 0:无触发 1:触发" , dataType = "Integer") + private Integer sonic; + + @ApiModelProperty(value = "二进制第0位 前触边 第1位后触边,0:无触发 1:触发" , dataType = "Integer") + private Integer collision; + + @ApiModelProperty(value = "急停按钮急停 0:无触发 1:触发" , dataType = "Integer") + private Integer button; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java new file mode 100644 index 0000000..70b4e2e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/response/VoltageResponseDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.opt.instruct.response; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 电压信息返回 + */ +@Data +public class VoltageResponseDTO { + + @ApiModelProperty(value = "电池1电压,电池2电压(单位0.01v)" , dataType = "Integer") + private List voltage; + + @ApiModelProperty(value = "电池1电流,电池2电流(单位0.1A)" , dataType = "Integer") + private List current; + + @ApiModelProperty(value = "电池1状态,电池2状态" , dataType = "Integer") + private List state; + + @ApiModelProperty(value = "充电状态 0:未充电 1:充电" , dataType = "Integer") + @JSONField(name = "charging_state") + private Integer chargingState; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java index 1f725a5..6ab9802 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java @@ -80,4 +80,19 @@ * @param message 速度响应 */ void saveSpeed(String robotId, MqttMessage message); + + /** + * 急停状态信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveStopState(String robotId, MqttMessage message); + /** + * 电压信息保存 + * + * @param robotId 机器ID + * @param message 消息体 + */ + void saveVoltageResponseMessage(String robotId, MqttMessage message); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java new file mode 100644 index 0000000..ad0b908 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotSystemConfigService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +public interface IRobotSystemConfigService extends IService { + /** + * 机器人系统配置信息 分页检索 + */ + List selectRobotSystemConfigPage(Page page, QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 6d3c2af..609a4af 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -1,27 +1,36 @@ package com.casic.missiles.modular.robot.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.ProcessMessageResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.SensorStatusDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.SpeedResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.StopStateResponseDTO; +import com.casic.missiles.modular.robot.opt.instruct.response.VoltageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; @@ -37,16 +46,18 @@ @Service public class RobotStatusInfoServiceImpl extends ServiceImpl implements IRobotStatusInfoService { private final AbstractDictService dictService; + private final IRobotInfoService robotInfoService; - public RobotStatusInfoServiceImpl(AbstractDictService dictService) { + public RobotStatusInfoServiceImpl(AbstractDictService dictService, @Lazy IRobotInfoService robotInfoService) { this.dictService = dictService; + this.robotInfoService = robotInfoService; } @Override public void updateConnStatus(String robotId, Integer status) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("conn_status", status); - query.eq("robot_id", robotId); + query.set("conn_status" , status); + query.eq("robot_id" , robotId); update(query); } @@ -60,29 +71,29 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { - statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); + statusInfo.setDiscernTypeName(getDictName("discernType" , statusInfo.getDiscernType())); //暂停状态 - statusInfo.setAppNavPauseName(getDictName("appNavPause", statusInfo.getAppNavPause())); + statusInfo.setAppNavPauseName(getDictName("appNavPause" , statusInfo.getAppNavPause())); //开启状态 - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - String statusName = getDictName("trackStatus", statusInfo.getNavigationStatus()); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + String statusName = getDictName("trackStatus" , statusInfo.getNavigationStatus()); statusInfo.setNavigationStatusName(statusName); - statusInfo.setDataRecordName(getDictName("trackStatus", statusInfo.getDataRecord())); - statusInfo.setTrackStatusName(getDictName("trackStatus", statusInfo.getTrackStatus())); - statusInfo.setTrackName(getDictName("trackStatus", statusInfo.getTrack())); - statusInfo.setInsStatusName(getDictName("trackStatus", statusInfo.getInsStatus())); - statusInfo.setAppStopNavtrackName(getDictName("trackStatus", statusInfo.getAppStopNavtrack())); - statusInfo.setTrackRecordName(getDictName("trackStatus", statusInfo.getTrackRecord())); + statusInfo.setDataRecordName(getDictName("trackStatus" , statusInfo.getDataRecord())); + statusInfo.setTrackStatusName(getDictName("trackStatus" , statusInfo.getTrackStatus())); + statusInfo.setTrackName(getDictName("trackStatus" , statusInfo.getTrack())); + statusInfo.setInsStatusName(getDictName("trackStatus" , statusInfo.getInsStatus())); + statusInfo.setAppStopNavtrackName(getDictName("trackStatus" , statusInfo.getAppStopNavtrack())); + statusInfo.setTrackRecordName(getDictName("trackStatus" , statusInfo.getTrackRecord())); //收到状态 - statusInfo.setLidarMsgName(getDictName("lidarMsg", statusInfo.getLidarMsg())); - statusInfo.setImuMsgName(getDictName("lidarMsg", statusInfo.getImuMsg())); - statusInfo.setChargeMsgName(getDictName("lidarMsg", statusInfo.getChargeMsg())); - statusInfo.setGpsMsgName(getDictName("lidarMsg", statusInfo.getGpsMsg())); + statusInfo.setLidarMsgName(getDictName("lidarMsg" , statusInfo.getLidarMsg())); + statusInfo.setImuMsgName(getDictName("lidarMsg" , statusInfo.getImuMsg())); + statusInfo.setChargeMsgName(getDictName("lidarMsg" , statusInfo.getChargeMsg())); + statusInfo.setGpsMsgName(getDictName("lidarMsg" , statusInfo.getGpsMsg())); //连接状态 - statusInfo.setConnStatusName(getDictName("connStatus", statusInfo.getConnStatus())); + statusInfo.setConnStatusName(getDictName("connStatus" , statusInfo.getConnStatus())); } @@ -114,11 +125,11 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); SensorStatusDTO msg = responseDTO.getMsg(); - query.set("lidar_msg", msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); - query.set("imu_msg", msg.getImuMsg() == null ? 0 : msg.getImuMsg()); - query.set("charge_msg", msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); - query.set("gps_msg", msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); - query.eq("robot_id", robotId); + query.set("lidar_msg" , msg.getLidarMsg() == null ? 0 : msg.getLidarMsg()); + query.set("imu_msg" , msg.getImuMsg() == null ? 0 : msg.getImuMsg()); + query.set("charge_msg" , msg.getChargeMsg() == null ? 0 : msg.getChargeMsg()); + query.set("gps_msg" , msg.getGpsMsg() == null ? 0 : msg.getGpsMsg()); + query.eq("robot_id" , robotId); update(query); } } @@ -137,8 +148,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); ProcessMessageResponseDTO msg = responseDTO.getMsg(); - query.set("process_message", msg.getP()); - query.eq("robot_id", robotId); + query.set("process_message" , msg.getP()); + query.eq("robot_id" , robotId); update(query); } } @@ -157,8 +168,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_nav_pause", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_nav_pause" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -171,8 +182,8 @@ if (responseDTO.getMsg() != null) { UpdateWrapper query = new UpdateWrapper<>(); RobotMsgDTO msg = responseDTO.getMsg(); - query.set("app_stop_navtrack", msg.getResult()); - query.eq("robot_id", robotId); + query.set("app_stop_navtrack" , msg.getResult()); + query.eq("robot_id" , robotId); update(query); } } @@ -180,16 +191,16 @@ @Override public void updateCurrTask(String robotId, Long currRouteId, Long currTaskId) { UpdateWrapper query = new UpdateWrapper<>(); - query.set("curr_route_id", currRouteId); - query.set("curr_task_id", currTaskId); - query.eq("robot_id", robotId); + query.set("curr_route_id" , currRouteId); + query.set("curr_task_id" , currTaskId); + query.eq("robot_id" , robotId); update(query); } @Override public RobotStatusInfo getStatusByRobotId(String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotId); + query.eq("robot_id" , robotId); return getOne(query); } @@ -199,12 +210,65 @@ RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); if (responseDTO != null && responseDTO.getMsg() != null) { - log.info("速度信息保存:{}", responseDTO.getMsg()); + log.info("速度信息保存:{}" , responseDTO.getMsg()); UpdateWrapper query = new UpdateWrapper<>(); - query.set("robot_v", responseDTO.getMsg().getSpeed().getV()); - query.set("robot_w", responseDTO.getMsg().getSpeed().getW()); - query.eq("robot_id", robotId); + query.set("robot_v" , responseDTO.getMsg().getSpeed().getV()); + query.set("robot_w" , responseDTO.getMsg().getSpeed().getW()); + query.eq("robot_id" , robotId); update(query); } } + + @Override + public void saveStopState(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + if (responseDTO != null && responseDTO.getMsg() != null) { + log.info("急停状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + query.set(RobotStatusInfo::getButton, responseDTO.getMsg().getButton()); + query.set(RobotStatusInfo::getCollision, responseDTO.getMsg().getCollision()); + query.set(RobotStatusInfo::getSonic, responseDTO.getMsg().getSonic()); + query.set(RobotStatusInfo::getSoft, responseDTO.getMsg().getSoft()); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + @Transactional + @Override + public void saveVoltageResponseMessage(String robotId, MqttMessage message) { + RobotResponseDTO responseDTO = parseJson(message, new TypeReference>() { + }); + //电压下限 45V 电压上限 58.8V 估算电量 + if (responseDTO != null && responseDTO.getMsg() != null) { + RobotInfo info = robotInfoService.getById(robotId); + log.info("电压状态保存:{}" , responseDTO.getMsg()); + LambdaUpdateWrapper query = new LambdaUpdateWrapper<>(); + if (CollectionUtil.isNotEmpty(responseDTO.getMsg().getVoltage())) { + Integer v = responseDTO.getMsg().getVoltage().get(0); + query.set(RobotStatusInfo::getVoltage, v); + //计算电量 + Double quantity = new BigDecimal(v - info.getVoltageMin()).divide(new BigDecimal(info.getVoltageMax() - info.getVoltageMin()),2, BigDecimal.ROUND_HALF_UP).doubleValue(); + query.set(RobotStatusInfo::getElectricityQuantity, quantity*100); + query.eq(RobotStatusInfo::getRobotId, robotId); + update(query); + } + } + + } + + private RobotResponseDTO parseJson(MqttMessage message, TypeReference> cls) { + String json = new String(message.getPayload()); + if (json.startsWith("\"")) { + json = json.substring(1); + } + if (json.endsWith("\"")) { + json = json.substring(0, json.length() - 1); + } + json = json.replaceAll("\\\\" , ""); + log.info(json); + RobotResponseDTO responseDTO = JSON.parseObject(json, cls); + return responseDTO; + } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java new file mode 100644 index 0000000..a94f6ad --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotSystemConfigServiceImpl.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.robot.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RobotSystemConfigMapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import com.casic.missiles.modular.robot.service.IRobotSystemConfigService; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + *

+ * 机器人系统配置信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-22 + */ +@Service +public class RobotSystemConfigServiceImpl extends ServiceImpl implements IRobotSystemConfigService { + @Override + public List selectRobotSystemConfigPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRobotSystemConfigPage(page, query); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java index 286977e..33359e9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotTrajectoryInfoServiceImpl.java @@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.robot.dao.RobotTrajectoryInfoMapper; +import com.casic.missiles.modular.robot.model.RobotStatusInfo; import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.PoseMessageResponseDTO; +import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Date; @@ -27,6 +30,11 @@ */ @Service public class RobotTrajectoryInfoServiceImpl extends ServiceImpl implements IRobotTrajectoryInfoService { + private final IRobotStatusInfoService robotStatusInfoService; + + public RobotTrajectoryInfoServiceImpl(@Lazy IRobotStatusInfoService robotStatusInfoService) { + this.robotStatusInfoService = robotStatusInfoService; + } @Override public List selectRobotTrajectoryInfoPage(Page page, QueryWrapper query) { @@ -35,18 +43,26 @@ @Override public void savePoseMessage(String robotId, MqttMessage message) { + String json = new String(message.getPayload()); RobotResponseDTO responseDTO = JSON.parseObject(json, new TypeReference>() { }); - if (responseDTO.getMsg() != null) { - PoseMessageResponseDTO dto = responseDTO.getMsg(); - RobotTrajectoryInfo info = new RobotTrajectoryInfo(); - info.setRobotId(Long.valueOf(robotId)); - info.setCreateTime(new Date()); - info.setPostionX(dto.getX()); - info.setPostionY(dto.getY()); - info.setPostionZ(dto.getZ()); - info.setTheta(dto.getTheta()); + + //读取导航状态,如果导航未开启则不存储 + RobotStatusInfo statusInfo = robotStatusInfoService.getStatusByRobotId(robotId); + if (statusInfo != null && responseDTO.getMsg() != null) { + //执行循迹 保存当前轨迹信息 + if (statusInfo.getCurrRouteId() != null) { + PoseMessageResponseDTO dto = responseDTO.getMsg(); + RobotTrajectoryInfo info = new RobotTrajectoryInfo(); + info.setRobotId(Long.valueOf(robotId)); + info.setCreateTime(new Date()); + info.setPostionX(dto.getX()); + info.setPostionY(dto.getY()); + info.setPostionZ(dto.getZ()); + info.setTheta(dto.getTheta()); + save(info); + } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java index c16c954..9f2c93c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java @@ -74,8 +74,9 @@ private void wrapTaskInfo(TaskInfo taskInfo) { taskInfo.setDiscernTypeName(dictService.getDictNameByCode(RobotDictConstants.DISCERN_TYPE, taskInfo.getDiscernType() + "")); taskInfo.setTaskTypeName(dictService.getDictNameByCode(RobotDictConstants.TASK_TYPE, taskInfo.getTaskType() + "")); + taskInfo.setTaskStatusName(dictService.getDictNameByCode(RobotDictConstants.TASK_STATUS, taskInfo.getTaskType() + "")); //检索当前任务告警数量 - taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(),taskInfo.getRobotId())); + taskInfo.setAlarmNum(recordService.selectCountByTaskId(taskInfo.getId(), taskInfo.getRobotId())); } @Transactional diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java new file mode 100644 index 0000000..bed105f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/IdsDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.robot.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * @Description: for batch use + * @Author: wangpeng + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotEmpty(message = "主键id不能为空") + @ApiModelProperty(value = "主键id列表", dataType = "List", required = true) + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java new file mode 100644 index 0000000..08e275e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RobotSystemConfigVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.robot.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.robot.model.RobotSystemConfig; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 机器人系统配置信息对象VO + * + * @author lwh + * @date 2023-11-22 + */ +@Data +public class RobotSystemConfigVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "主键", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "系统配置主键", dataType = "String") + private String configKey; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (id != null) { + query.eq("id", id); + } + if (StrUtil.isNotEmpty(configKey)) { + query.eq("config_key", configKey); + } + return query; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java index 6e6033f..454f10b 100644 --- a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java @@ -69,23 +69,23 @@ mqttClient.pub(enums.getReqName(), JSON.toJSONString(messageDTO)); } // 订阅返回值消息 - client.subscribe(enums.getRepName(), 1, (topic, message) -> { - String data = new String(message.getPayload()); - System.out.println(data); - if (StrUtil.isNotEmpty(data)) { - System.out.println(data); - if (data.startsWith("\"")) { - data = data.substring(1); + if (StrUtil.isNotEmpty(enums.getRepName())) { + client.subscribe(enums.getRepName(), 1, (topic, message) -> { + String data = new String(message.getPayload()); + if (StrUtil.isNotEmpty(data)) { + if (data.startsWith("\"")) { + data = data.substring(1); + } + if (data.endsWith("\"")) { + data = data.substring(0, data.length() - 1); + } + data = data.replaceAll("\\\\", ""); + maps.put("result", MsgUtils.convertMessage(data, enums)); + } else { + throw new ServiceException(500, enums.getRemarks() + "指令异常"); } - if (data.endsWith("\"")) { - data = data.substring(0, data.length() - 1); - } - data = data.replaceAll("\\\\", ""); - maps.put("result", MsgUtils.convertMessage(data, enums)); - } else { - throw new ServiceException(500, enums.getRemarks() + "指令异常"); - } - }); + }); + } int i = 0; if (enums.isWaitReply()) { do { diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat index 1db4e88..2864d32 100644 --- a/casic-web/src/main/build/bin/start.bat +++ b/casic-web/src/main/build/bin/start.bat @@ -1,4 +1,4 @@ @echo off title ${project.build.finalName} -java -jar ./lib/${project.build.finalName}.jar +java -jar ./lib/casic-web-2.0.0.jar @pause diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index 739eb99..cc68ae7 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -1,5 +1,6 @@ package com.casic.missiles; +import com.casic.missiles.config.HikLibConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 815b3c1..db10efc 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -4,10 +4,9 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver -# url: jdbc:mysql://111.198.10.15:11336/casic_robot_inspection?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8 - url: jdbc:mysql://127.0.0.1:3306/casic_robot_inspection?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8 + url: jdbc:mysql://localhost:3306/casic_robot_inspection?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root - password: root + password: 123456 jms: pub-sub-domain: true # session: diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml index c2372d1..348d4f3 100644 --- a/casic-web/src/main/resources/config/application.yml +++ b/casic-web/src/main/resources/config/application.yml @@ -37,7 +37,8 @@ session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 no-login-urls: /user/login,/kaptcha,/config/baseConfig - hiklib: D:\code\robot\casic-robot-inspection\casic-web\src\main\resources\config\hiklib\HCNetSDK.dll + hikSdk: D:\workspace\server\keti\casic-robot-inspection\casic-web\src\main\resources\config\hiklib\HCNetSDK.dll + hikPlay: D:\workspace\server\keti\casic-robot-inspection\casic-web\src\main\resources\config\hiklib\PlayCtrl.dll config: export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\