diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java new file mode 100644 index 0000000..ef14b28 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.casic.missiles.mapper.SubscribeFrameLogMapper; +import com.casic.missiles.service.ISubscribeFrameLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class SubscribeFrameLogServiceImpl extends ServiceImpl implements ISubscribeFrameLogService { + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java new file mode 100644 index 0000000..ef14b28 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.casic.missiles.mapper.SubscribeFrameLogMapper; +import com.casic.missiles.service.ISubscribeFrameLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class SubscribeFrameLogServiceImpl extends ServiceImpl implements ISubscribeFrameLogService { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java index 2854f94..032f25b 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java @@ -24,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 设备配置 设备下发配置所用表 前端控制器 @@ -61,6 +63,15 @@ return busConfigService.addBusConfig(request); } + @ApiOperation("批量下发配置(只针对同一类设备)") + @PostMapping("/addBatchConfig") + public ReturnDTO addBatchConfig(@RequestBody @Validated List request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return busConfigService.addBatchConfig(request); + } + @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteBusConfig(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java new file mode 100644 index 0000000..ef14b28 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.casic.missiles.mapper.SubscribeFrameLogMapper; +import com.casic.missiles.service.ISubscribeFrameLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class SubscribeFrameLogServiceImpl extends ServiceImpl implements ISubscribeFrameLogService { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java index 2854f94..032f25b 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java @@ -24,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 设备配置 设备下发配置所用表 前端控制器 @@ -61,6 +63,15 @@ return busConfigService.addBusConfig(request); } + @ApiOperation("批量下发配置(只针对同一类设备)") + @PostMapping("/addBatchConfig") + public ReturnDTO addBatchConfig(@RequestBody @Validated List request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return busConfigService.addBatchConfig(request); + } + @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteBusConfig(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java index 9df26fc..6f5a049 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -79,6 +80,7 @@ return deviceService.updateDevice(device); } + @CacheEvict(value="busDeviceCache", allEntries = true) @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteDeviceGroup(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java new file mode 100644 index 0000000..ef14b28 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.casic.missiles.mapper.SubscribeFrameLogMapper; +import com.casic.missiles.service.ISubscribeFrameLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class SubscribeFrameLogServiceImpl extends ServiceImpl implements ISubscribeFrameLogService { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java index 2854f94..032f25b 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java @@ -24,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 设备配置 设备下发配置所用表 前端控制器 @@ -61,6 +63,15 @@ return busConfigService.addBusConfig(request); } + @ApiOperation("批量下发配置(只针对同一类设备)") + @PostMapping("/addBatchConfig") + public ReturnDTO addBatchConfig(@RequestBody @Validated List request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return busConfigService.addBatchConfig(request); + } + @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteBusConfig(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java index 9df26fc..6f5a049 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -79,6 +80,7 @@ return deviceService.updateDevice(device); } + @CacheEvict(value="busDeviceCache", allEntries = true) @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteDeviceGroup(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java index 9660fa4..08984aa 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java @@ -12,23 +12,22 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; -import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.DeviceGroup; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.service.IDeviceGroupService; -import com.casic.missiles.util.DictCodeUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; -import java.io.IOException; -import java.util.List; /** *

@@ -103,4 +102,13 @@ return ReturnUtil.success(deviceGroupService.deviceGroupDetail(idDTO.getId())); } + + @ApiOperation("新增设备分组绑定关系") + @PostMapping("/addDeviceToGroup") + public ReturnDTO addDeviceToGroup(@RequestBody @Validated DeviceToGroupRequest deviceToGroup, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return ReturnUtil.success(deviceGroupService.addDeviceToGroup(deviceToGroup)); + } } diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java new file mode 100644 index 0000000..ef14b28 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.casic.missiles.mapper.SubscribeFrameLogMapper; +import com.casic.missiles.service.ISubscribeFrameLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class SubscribeFrameLogServiceImpl extends ServiceImpl implements ISubscribeFrameLogService { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java index 2854f94..032f25b 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java @@ -24,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 设备配置 设备下发配置所用表 前端控制器 @@ -61,6 +63,15 @@ return busConfigService.addBusConfig(request); } + @ApiOperation("批量下发配置(只针对同一类设备)") + @PostMapping("/addBatchConfig") + public ReturnDTO addBatchConfig(@RequestBody @Validated List request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return busConfigService.addBatchConfig(request); + } + @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteBusConfig(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java index 9df26fc..6f5a049 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -79,6 +80,7 @@ return deviceService.updateDevice(device); } + @CacheEvict(value="busDeviceCache", allEntries = true) @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteDeviceGroup(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java index 9660fa4..08984aa 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java @@ -12,23 +12,22 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; -import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.DeviceGroup; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.service.IDeviceGroupService; -import com.casic.missiles.util.DictCodeUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; -import java.io.IOException; -import java.util.List; /** *

@@ -103,4 +102,13 @@ return ReturnUtil.success(deviceGroupService.deviceGroupDetail(idDTO.getId())); } + + @ApiOperation("新增设备分组绑定关系") + @PostMapping("/addDeviceToGroup") + public ReturnDTO addDeviceToGroup(@RequestBody @Validated DeviceToGroupRequest deviceToGroup, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return ReturnUtil.success(deviceGroupService.addDeviceToGroup(deviceToGroup)); + } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java new file mode 100644 index 0000000..18cfdd3 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 租户管理 前端控制器 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@RestController +@RequestMapping("/subscribe-frame-log") +public class SubscribeFrameLogController { + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java new file mode 100644 index 0000000..ef14b28 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.casic.missiles.mapper.SubscribeFrameLogMapper; +import com.casic.missiles.service.ISubscribeFrameLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class SubscribeFrameLogServiceImpl extends ServiceImpl implements ISubscribeFrameLogService { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java index 2854f94..032f25b 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java @@ -24,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 设备配置 设备下发配置所用表 前端控制器 @@ -61,6 +63,15 @@ return busConfigService.addBusConfig(request); } + @ApiOperation("批量下发配置(只针对同一类设备)") + @PostMapping("/addBatchConfig") + public ReturnDTO addBatchConfig(@RequestBody @Validated List request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return busConfigService.addBatchConfig(request); + } + @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteBusConfig(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java index 9df26fc..6f5a049 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -79,6 +80,7 @@ return deviceService.updateDevice(device); } + @CacheEvict(value="busDeviceCache", allEntries = true) @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteDeviceGroup(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java index 9660fa4..08984aa 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java @@ -12,23 +12,22 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; -import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.DeviceGroup; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.service.IDeviceGroupService; -import com.casic.missiles.util.DictCodeUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; -import java.io.IOException; -import java.util.List; /** *

@@ -103,4 +102,13 @@ return ReturnUtil.success(deviceGroupService.deviceGroupDetail(idDTO.getId())); } + + @ApiOperation("新增设备分组绑定关系") + @PostMapping("/addDeviceToGroup") + public ReturnDTO addDeviceToGroup(@RequestBody @Validated DeviceToGroupRequest deviceToGroup, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return ReturnUtil.success(deviceGroupService.addDeviceToGroup(deviceToGroup)); + } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java new file mode 100644 index 0000000..18cfdd3 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 租户管理 前端控制器 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@RestController +@RequestMapping("/subscribe-frame-log") +public class SubscribeFrameLogController { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java new file mode 100644 index 0000000..69f5863 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java @@ -0,0 +1,76 @@ +package com.casic.missiles.controller; + +import com.casic.missiles.DeviceServerProperties; +import com.casic.missiles.core.base.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +/** + * 模板管理包 + * + * @author dev123 + * @Date 2018-11-19 13:15:14 + */ +@Api(tags = "文件下载") +@RestController +public class TemplateController extends BaseController { + private static Logger logger = LoggerFactory.getLogger(TemplateController.class); + @Autowired + private DeviceServerProperties gunsProperties; + + + @ApiOperation("文件下载:1、设备导入模板:device_template.xlsx") + @GetMapping("/template/download") + public void doPost(@RequestParam("filename") String filename, HttpServletResponse response) + throws ServletException, IOException { + String path = gunsProperties.getConfigPath(); + logger.info(path); + if (path.startsWith("/")) { + path = path.substring(1); + } + File file = new File(path, filename); + // 获取文件名 + String fileName = null; + if (filename.contains("/")) { + fileName = filename.substring(filename.lastIndexOf("/") + 1); + } else { + fileName = filename; + } + + // 设置以流的形式下载文件,这样可以实现任意格式的文件下载 + response.setContentType("application/octet-stream"); + response.addHeader("Content-Disposition", " attachment;filename=" + fileName); +// response.setContentLength((int) file.length()); + response.setHeader("content-Length",String.valueOf(file.length()));//解决文件提示损坏 + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + byte[] buffer = new byte[1024]; + int readTmp = 0; + while ((readTmp = fis.read(buffer)) != -1) { + response.getOutputStream().write(buffer, 0, readTmp); + } + } catch (Exception e) { + logger.info(e.getMessage()); + e.printStackTrace(); + } finally { + response.getOutputStream().flush(); + response.getOutputStream().close(); + fis.close(); + } + } + + +} diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java new file mode 100644 index 0000000..ef14b28 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.casic.missiles.mapper.SubscribeFrameLogMapper; +import com.casic.missiles.service.ISubscribeFrameLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class SubscribeFrameLogServiceImpl extends ServiceImpl implements ISubscribeFrameLogService { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java index 2854f94..032f25b 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java @@ -24,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 设备配置 设备下发配置所用表 前端控制器 @@ -61,6 +63,15 @@ return busConfigService.addBusConfig(request); } + @ApiOperation("批量下发配置(只针对同一类设备)") + @PostMapping("/addBatchConfig") + public ReturnDTO addBatchConfig(@RequestBody @Validated List request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return busConfigService.addBatchConfig(request); + } + @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteBusConfig(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java index 9df26fc..6f5a049 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -79,6 +80,7 @@ return deviceService.updateDevice(device); } + @CacheEvict(value="busDeviceCache", allEntries = true) @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteDeviceGroup(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java index 9660fa4..08984aa 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java @@ -12,23 +12,22 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; -import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.DeviceGroup; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.service.IDeviceGroupService; -import com.casic.missiles.util.DictCodeUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; -import java.io.IOException; -import java.util.List; /** *

@@ -103,4 +102,13 @@ return ReturnUtil.success(deviceGroupService.deviceGroupDetail(idDTO.getId())); } + + @ApiOperation("新增设备分组绑定关系") + @PostMapping("/addDeviceToGroup") + public ReturnDTO addDeviceToGroup(@RequestBody @Validated DeviceToGroupRequest deviceToGroup, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return ReturnUtil.success(deviceGroupService.addDeviceToGroup(deviceToGroup)); + } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java new file mode 100644 index 0000000..18cfdd3 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 租户管理 前端控制器 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@RestController +@RequestMapping("/subscribe-frame-log") +public class SubscribeFrameLogController { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java new file mode 100644 index 0000000..69f5863 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java @@ -0,0 +1,76 @@ +package com.casic.missiles.controller; + +import com.casic.missiles.DeviceServerProperties; +import com.casic.missiles.core.base.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +/** + * 模板管理包 + * + * @author dev123 + * @Date 2018-11-19 13:15:14 + */ +@Api(tags = "文件下载") +@RestController +public class TemplateController extends BaseController { + private static Logger logger = LoggerFactory.getLogger(TemplateController.class); + @Autowired + private DeviceServerProperties gunsProperties; + + + @ApiOperation("文件下载:1、设备导入模板:device_template.xlsx") + @GetMapping("/template/download") + public void doPost(@RequestParam("filename") String filename, HttpServletResponse response) + throws ServletException, IOException { + String path = gunsProperties.getConfigPath(); + logger.info(path); + if (path.startsWith("/")) { + path = path.substring(1); + } + File file = new File(path, filename); + // 获取文件名 + String fileName = null; + if (filename.contains("/")) { + fileName = filename.substring(filename.lastIndexOf("/") + 1); + } else { + fileName = filename; + } + + // 设置以流的形式下载文件,这样可以实现任意格式的文件下载 + response.setContentType("application/octet-stream"); + response.addHeader("Content-Disposition", " attachment;filename=" + fileName); +// response.setContentLength((int) file.length()); + response.setHeader("content-Length",String.valueOf(file.length()));//解决文件提示损坏 + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + byte[] buffer = new byte[1024]; + int readTmp = 0; + while ((readTmp = fis.read(buffer)) != -1) { + response.getOutputStream().write(buffer, 0, readTmp); + } + } catch (Exception e) { + logger.info(e.getMessage()); + e.printStackTrace(); + } finally { + response.getOutputStream().flush(); + response.getOutputStream().close(); + fis.close(); + } + } + + +} diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 5199412..ebde94a 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -6,16 +6,16 @@ driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root - password: 123456 + password: Casic203 dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: master: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true + url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root - password: 123456 + password: Casic203 # use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver @@ -42,7 +42,9 @@ db: init: enable: false - + config: + #模板下载路径 + config-path: D:\code\iot\sensorhub-plus\casic-iot-web\src\main\resources\config\temp logging: level: root: error diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java new file mode 100644 index 0000000..ef14b28 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.casic.missiles.mapper.SubscribeFrameLogMapper; +import com.casic.missiles.service.ISubscribeFrameLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class SubscribeFrameLogServiceImpl extends ServiceImpl implements ISubscribeFrameLogService { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java index 2854f94..032f25b 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java @@ -24,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 设备配置 设备下发配置所用表 前端控制器 @@ -61,6 +63,15 @@ return busConfigService.addBusConfig(request); } + @ApiOperation("批量下发配置(只针对同一类设备)") + @PostMapping("/addBatchConfig") + public ReturnDTO addBatchConfig(@RequestBody @Validated List request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return busConfigService.addBatchConfig(request); + } + @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteBusConfig(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java index 9df26fc..6f5a049 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -79,6 +80,7 @@ return deviceService.updateDevice(device); } + @CacheEvict(value="busDeviceCache", allEntries = true) @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteDeviceGroup(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java index 9660fa4..08984aa 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java @@ -12,23 +12,22 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; -import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.DeviceGroup; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.service.IDeviceGroupService; -import com.casic.missiles.util.DictCodeUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; -import java.io.IOException; -import java.util.List; /** *

@@ -103,4 +102,13 @@ return ReturnUtil.success(deviceGroupService.deviceGroupDetail(idDTO.getId())); } + + @ApiOperation("新增设备分组绑定关系") + @PostMapping("/addDeviceToGroup") + public ReturnDTO addDeviceToGroup(@RequestBody @Validated DeviceToGroupRequest deviceToGroup, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return ReturnUtil.success(deviceGroupService.addDeviceToGroup(deviceToGroup)); + } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java new file mode 100644 index 0000000..18cfdd3 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 租户管理 前端控制器 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@RestController +@RequestMapping("/subscribe-frame-log") +public class SubscribeFrameLogController { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java new file mode 100644 index 0000000..69f5863 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java @@ -0,0 +1,76 @@ +package com.casic.missiles.controller; + +import com.casic.missiles.DeviceServerProperties; +import com.casic.missiles.core.base.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +/** + * 模板管理包 + * + * @author dev123 + * @Date 2018-11-19 13:15:14 + */ +@Api(tags = "文件下载") +@RestController +public class TemplateController extends BaseController { + private static Logger logger = LoggerFactory.getLogger(TemplateController.class); + @Autowired + private DeviceServerProperties gunsProperties; + + + @ApiOperation("文件下载:1、设备导入模板:device_template.xlsx") + @GetMapping("/template/download") + public void doPost(@RequestParam("filename") String filename, HttpServletResponse response) + throws ServletException, IOException { + String path = gunsProperties.getConfigPath(); + logger.info(path); + if (path.startsWith("/")) { + path = path.substring(1); + } + File file = new File(path, filename); + // 获取文件名 + String fileName = null; + if (filename.contains("/")) { + fileName = filename.substring(filename.lastIndexOf("/") + 1); + } else { + fileName = filename; + } + + // 设置以流的形式下载文件,这样可以实现任意格式的文件下载 + response.setContentType("application/octet-stream"); + response.addHeader("Content-Disposition", " attachment;filename=" + fileName); +// response.setContentLength((int) file.length()); + response.setHeader("content-Length",String.valueOf(file.length()));//解决文件提示损坏 + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + byte[] buffer = new byte[1024]; + int readTmp = 0; + while ((readTmp = fis.read(buffer)) != -1) { + response.getOutputStream().write(buffer, 0, readTmp); + } + } catch (Exception e) { + logger.info(e.getMessage()); + e.printStackTrace(); + } finally { + response.getOutputStream().flush(); + response.getOutputStream().close(); + fis.close(); + } + } + + +} diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 5199412..ebde94a 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -6,16 +6,16 @@ driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root - password: 123456 + password: Casic203 dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: master: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true + url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root - password: 123456 + password: Casic203 # use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver @@ -42,7 +42,9 @@ db: init: enable: false - + config: + #模板下载路径 + config-path: D:\code\iot\sensorhub-plus\casic-iot-web\src\main\resources\config\temp logging: level: root: error diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 0fcd40b..ba1bf55 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -87,6 +87,6 @@ code: generate: #作者 - author: cz + author: zt #待生成对象表名 - table-name: product_data_item,product_config_item \ No newline at end of file + table-name: device_latest_state,device_security,subscribe_frame_log \ No newline at end of file diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java new file mode 100644 index 0000000..ef14b28 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.casic.missiles.mapper.SubscribeFrameLogMapper; +import com.casic.missiles.service.ISubscribeFrameLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class SubscribeFrameLogServiceImpl extends ServiceImpl implements ISubscribeFrameLogService { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java index 2854f94..032f25b 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java @@ -24,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 设备配置 设备下发配置所用表 前端控制器 @@ -61,6 +63,15 @@ return busConfigService.addBusConfig(request); } + @ApiOperation("批量下发配置(只针对同一类设备)") + @PostMapping("/addBatchConfig") + public ReturnDTO addBatchConfig(@RequestBody @Validated List request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return busConfigService.addBatchConfig(request); + } + @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteBusConfig(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java index 9df26fc..6f5a049 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -79,6 +80,7 @@ return deviceService.updateDevice(device); } + @CacheEvict(value="busDeviceCache", allEntries = true) @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteDeviceGroup(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java index 9660fa4..08984aa 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java @@ -12,23 +12,22 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; -import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.DeviceGroup; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.service.IDeviceGroupService; -import com.casic.missiles.util.DictCodeUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; -import java.io.IOException; -import java.util.List; /** *

@@ -103,4 +102,13 @@ return ReturnUtil.success(deviceGroupService.deviceGroupDetail(idDTO.getId())); } + + @ApiOperation("新增设备分组绑定关系") + @PostMapping("/addDeviceToGroup") + public ReturnDTO addDeviceToGroup(@RequestBody @Validated DeviceToGroupRequest deviceToGroup, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return ReturnUtil.success(deviceGroupService.addDeviceToGroup(deviceToGroup)); + } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java new file mode 100644 index 0000000..18cfdd3 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 租户管理 前端控制器 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@RestController +@RequestMapping("/subscribe-frame-log") +public class SubscribeFrameLogController { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java new file mode 100644 index 0000000..69f5863 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java @@ -0,0 +1,76 @@ +package com.casic.missiles.controller; + +import com.casic.missiles.DeviceServerProperties; +import com.casic.missiles.core.base.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +/** + * 模板管理包 + * + * @author dev123 + * @Date 2018-11-19 13:15:14 + */ +@Api(tags = "文件下载") +@RestController +public class TemplateController extends BaseController { + private static Logger logger = LoggerFactory.getLogger(TemplateController.class); + @Autowired + private DeviceServerProperties gunsProperties; + + + @ApiOperation("文件下载:1、设备导入模板:device_template.xlsx") + @GetMapping("/template/download") + public void doPost(@RequestParam("filename") String filename, HttpServletResponse response) + throws ServletException, IOException { + String path = gunsProperties.getConfigPath(); + logger.info(path); + if (path.startsWith("/")) { + path = path.substring(1); + } + File file = new File(path, filename); + // 获取文件名 + String fileName = null; + if (filename.contains("/")) { + fileName = filename.substring(filename.lastIndexOf("/") + 1); + } else { + fileName = filename; + } + + // 设置以流的形式下载文件,这样可以实现任意格式的文件下载 + response.setContentType("application/octet-stream"); + response.addHeader("Content-Disposition", " attachment;filename=" + fileName); +// response.setContentLength((int) file.length()); + response.setHeader("content-Length",String.valueOf(file.length()));//解决文件提示损坏 + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + byte[] buffer = new byte[1024]; + int readTmp = 0; + while ((readTmp = fis.read(buffer)) != -1) { + response.getOutputStream().write(buffer, 0, readTmp); + } + } catch (Exception e) { + logger.info(e.getMessage()); + e.printStackTrace(); + } finally { + response.getOutputStream().flush(); + response.getOutputStream().close(); + fis.close(); + } + } + + +} diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 5199412..ebde94a 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -6,16 +6,16 @@ driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root - password: 123456 + password: Casic203 dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: master: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true + url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root - password: 123456 + password: Casic203 # use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver @@ -42,7 +42,9 @@ db: init: enable: false - + config: + #模板下载路径 + config-path: D:\code\iot\sensorhub-plus\casic-iot-web\src\main\resources\config\temp logging: level: root: error diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 0fcd40b..ba1bf55 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -87,6 +87,6 @@ code: generate: #作者 - author: cz + author: zt #待生成对象表名 - table-name: product_data_item,product_config_item \ No newline at end of file + table-name: device_latest_state,device_security,subscribe_frame_log \ No newline at end of file diff --git a/casic-iot-web/src/main/resources/config/temp/device_template.xlsx b/casic-iot-web/src/main/resources/config/temp/device_template.xlsx new file mode 100644 index 0000000..84b9613 --- /dev/null +++ b/casic-iot-web/src/main/resources/config/temp/device_template.xlsx Binary files differ diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java new file mode 100644 index 0000000..ef14b28 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.casic.missiles.mapper.SubscribeFrameLogMapper; +import com.casic.missiles.service.ISubscribeFrameLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class SubscribeFrameLogServiceImpl extends ServiceImpl implements ISubscribeFrameLogService { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java index 2854f94..032f25b 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java @@ -24,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 设备配置 设备下发配置所用表 前端控制器 @@ -61,6 +63,15 @@ return busConfigService.addBusConfig(request); } + @ApiOperation("批量下发配置(只针对同一类设备)") + @PostMapping("/addBatchConfig") + public ReturnDTO addBatchConfig(@RequestBody @Validated List request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return busConfigService.addBatchConfig(request); + } + @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteBusConfig(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java index 9df26fc..6f5a049 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -79,6 +80,7 @@ return deviceService.updateDevice(device); } + @CacheEvict(value="busDeviceCache", allEntries = true) @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteDeviceGroup(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java index 9660fa4..08984aa 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java @@ -12,23 +12,22 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; -import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.DeviceGroup; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.service.IDeviceGroupService; -import com.casic.missiles.util.DictCodeUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; -import java.io.IOException; -import java.util.List; /** *

@@ -103,4 +102,13 @@ return ReturnUtil.success(deviceGroupService.deviceGroupDetail(idDTO.getId())); } + + @ApiOperation("新增设备分组绑定关系") + @PostMapping("/addDeviceToGroup") + public ReturnDTO addDeviceToGroup(@RequestBody @Validated DeviceToGroupRequest deviceToGroup, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return ReturnUtil.success(deviceGroupService.addDeviceToGroup(deviceToGroup)); + } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java new file mode 100644 index 0000000..18cfdd3 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 租户管理 前端控制器 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@RestController +@RequestMapping("/subscribe-frame-log") +public class SubscribeFrameLogController { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java new file mode 100644 index 0000000..69f5863 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java @@ -0,0 +1,76 @@ +package com.casic.missiles.controller; + +import com.casic.missiles.DeviceServerProperties; +import com.casic.missiles.core.base.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +/** + * 模板管理包 + * + * @author dev123 + * @Date 2018-11-19 13:15:14 + */ +@Api(tags = "文件下载") +@RestController +public class TemplateController extends BaseController { + private static Logger logger = LoggerFactory.getLogger(TemplateController.class); + @Autowired + private DeviceServerProperties gunsProperties; + + + @ApiOperation("文件下载:1、设备导入模板:device_template.xlsx") + @GetMapping("/template/download") + public void doPost(@RequestParam("filename") String filename, HttpServletResponse response) + throws ServletException, IOException { + String path = gunsProperties.getConfigPath(); + logger.info(path); + if (path.startsWith("/")) { + path = path.substring(1); + } + File file = new File(path, filename); + // 获取文件名 + String fileName = null; + if (filename.contains("/")) { + fileName = filename.substring(filename.lastIndexOf("/") + 1); + } else { + fileName = filename; + } + + // 设置以流的形式下载文件,这样可以实现任意格式的文件下载 + response.setContentType("application/octet-stream"); + response.addHeader("Content-Disposition", " attachment;filename=" + fileName); +// response.setContentLength((int) file.length()); + response.setHeader("content-Length",String.valueOf(file.length()));//解决文件提示损坏 + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + byte[] buffer = new byte[1024]; + int readTmp = 0; + while ((readTmp = fis.read(buffer)) != -1) { + response.getOutputStream().write(buffer, 0, readTmp); + } + } catch (Exception e) { + logger.info(e.getMessage()); + e.printStackTrace(); + } finally { + response.getOutputStream().flush(); + response.getOutputStream().close(); + fis.close(); + } + } + + +} diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 5199412..ebde94a 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -6,16 +6,16 @@ driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root - password: 123456 + password: Casic203 dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: master: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true + url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root - password: 123456 + password: Casic203 # use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver @@ -42,7 +42,9 @@ db: init: enable: false - + config: + #模板下载路径 + config-path: D:\code\iot\sensorhub-plus\casic-iot-web\src\main\resources\config\temp logging: level: root: error diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 0fcd40b..ba1bf55 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -87,6 +87,6 @@ code: generate: #作者 - author: cz + author: zt #待生成对象表名 - table-name: product_data_item,product_config_item \ No newline at end of file + table-name: device_latest_state,device_security,subscribe_frame_log \ No newline at end of file diff --git a/casic-iot-web/src/main/resources/config/temp/device_template.xlsx b/casic-iot-web/src/main/resources/config/temp/device_template.xlsx new file mode 100644 index 0000000..84b9613 --- /dev/null +++ b/casic-iot-web/src/main/resources/config/temp/device_template.xlsx Binary files differ diff --git a/casic-iot-web/src/main/resources/ehcache.xml b/casic-iot-web/src/main/resources/ehcache.xml new file mode 100644 index 0000000..38ca08e --- /dev/null +++ b/casic-iot-web/src/main/resources/ehcache.xml @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java new file mode 100644 index 0000000..ef14b28 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.casic.missiles.mapper.SubscribeFrameLogMapper; +import com.casic.missiles.service.ISubscribeFrameLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class SubscribeFrameLogServiceImpl extends ServiceImpl implements ISubscribeFrameLogService { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java index 2854f94..032f25b 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java @@ -24,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 设备配置 设备下发配置所用表 前端控制器 @@ -61,6 +63,15 @@ return busConfigService.addBusConfig(request); } + @ApiOperation("批量下发配置(只针对同一类设备)") + @PostMapping("/addBatchConfig") + public ReturnDTO addBatchConfig(@RequestBody @Validated List request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return busConfigService.addBatchConfig(request); + } + @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteBusConfig(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java index 9df26fc..6f5a049 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -79,6 +80,7 @@ return deviceService.updateDevice(device); } + @CacheEvict(value="busDeviceCache", allEntries = true) @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteDeviceGroup(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java index 9660fa4..08984aa 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java @@ -12,23 +12,22 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; -import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.DeviceGroup; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.service.IDeviceGroupService; -import com.casic.missiles.util.DictCodeUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; -import java.io.IOException; -import java.util.List; /** *

@@ -103,4 +102,13 @@ return ReturnUtil.success(deviceGroupService.deviceGroupDetail(idDTO.getId())); } + + @ApiOperation("新增设备分组绑定关系") + @PostMapping("/addDeviceToGroup") + public ReturnDTO addDeviceToGroup(@RequestBody @Validated DeviceToGroupRequest deviceToGroup, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return ReturnUtil.success(deviceGroupService.addDeviceToGroup(deviceToGroup)); + } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java new file mode 100644 index 0000000..18cfdd3 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 租户管理 前端控制器 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@RestController +@RequestMapping("/subscribe-frame-log") +public class SubscribeFrameLogController { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java new file mode 100644 index 0000000..69f5863 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java @@ -0,0 +1,76 @@ +package com.casic.missiles.controller; + +import com.casic.missiles.DeviceServerProperties; +import com.casic.missiles.core.base.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +/** + * 模板管理包 + * + * @author dev123 + * @Date 2018-11-19 13:15:14 + */ +@Api(tags = "文件下载") +@RestController +public class TemplateController extends BaseController { + private static Logger logger = LoggerFactory.getLogger(TemplateController.class); + @Autowired + private DeviceServerProperties gunsProperties; + + + @ApiOperation("文件下载:1、设备导入模板:device_template.xlsx") + @GetMapping("/template/download") + public void doPost(@RequestParam("filename") String filename, HttpServletResponse response) + throws ServletException, IOException { + String path = gunsProperties.getConfigPath(); + logger.info(path); + if (path.startsWith("/")) { + path = path.substring(1); + } + File file = new File(path, filename); + // 获取文件名 + String fileName = null; + if (filename.contains("/")) { + fileName = filename.substring(filename.lastIndexOf("/") + 1); + } else { + fileName = filename; + } + + // 设置以流的形式下载文件,这样可以实现任意格式的文件下载 + response.setContentType("application/octet-stream"); + response.addHeader("Content-Disposition", " attachment;filename=" + fileName); +// response.setContentLength((int) file.length()); + response.setHeader("content-Length",String.valueOf(file.length()));//解决文件提示损坏 + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + byte[] buffer = new byte[1024]; + int readTmp = 0; + while ((readTmp = fis.read(buffer)) != -1) { + response.getOutputStream().write(buffer, 0, readTmp); + } + } catch (Exception e) { + logger.info(e.getMessage()); + e.printStackTrace(); + } finally { + response.getOutputStream().flush(); + response.getOutputStream().close(); + fis.close(); + } + } + + +} diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 5199412..ebde94a 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -6,16 +6,16 @@ driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root - password: 123456 + password: Casic203 dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: master: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true + url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root - password: 123456 + password: Casic203 # use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver @@ -42,7 +42,9 @@ db: init: enable: false - + config: + #模板下载路径 + config-path: D:\code\iot\sensorhub-plus\casic-iot-web\src\main\resources\config\temp logging: level: root: error diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 0fcd40b..ba1bf55 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -87,6 +87,6 @@ code: generate: #作者 - author: cz + author: zt #待生成对象表名 - table-name: product_data_item,product_config_item \ No newline at end of file + table-name: device_latest_state,device_security,subscribe_frame_log \ No newline at end of file diff --git a/casic-iot-web/src/main/resources/config/temp/device_template.xlsx b/casic-iot-web/src/main/resources/config/temp/device_template.xlsx new file mode 100644 index 0000000..84b9613 --- /dev/null +++ b/casic-iot-web/src/main/resources/config/temp/device_template.xlsx Binary files differ diff --git a/casic-iot-web/src/main/resources/ehcache.xml b/casic-iot-web/src/main/resources/ehcache.xml new file mode 100644 index 0000000..38ca08e --- /dev/null +++ b/casic-iot-web/src/main/resources/ehcache.xml @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java index 09615b2..b1f62b6 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java @@ -59,6 +59,7 @@ // 工厂类创建frame对象 BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { + //toDo:不建议串行处理业务数据,使用线程池并行处理 // 处理业务数据 defaultService.doParseBizTag(birmmFrame); diff --git a/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java new file mode 100644 index 0000000..0dc5a70 --- /dev/null +++ b/casic-iot-common/src/main/java/com/casic/missiles/DeviceServerProperties.java @@ -0,0 +1,22 @@ +package com.casic.missiles; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + */ +@Data +@Component +@ConfigurationProperties(prefix = "casic.config") +public class DeviceServerProperties { + + private String exportPath = null; + private String configPath = null; + private String downloadPath = null; + + public DeviceServerProperties() { + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java new file mode 100644 index 0000000..8f0361d --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceLatestStateMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceLatestStateMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 587b115..1d95a13 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -9,6 +9,8 @@ import com.casic.missiles.model.Device; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -30,6 +32,10 @@ List listCtnbByDevCode(@Param("devCode") String devCode); + @Cacheable(value = "busDeviceCache", key = "#a0") + @Select("SELECT id FROM `device` where valid=1 and devcode= #{devCode} limit 1") + Long getDeviceIdByDevCode(@Param("devCode") String devCode); + String getDeviceEncipherType(@Param("devCode") String devCode); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java new file mode 100644 index 0000000..343603e --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceSecurityMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface DeviceSecurityMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java new file mode 100644 index 0000000..25f7f7c --- /dev/null +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/SubscribeFrameLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 租户管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface SubscribeFrameLogMapper extends BaseMapper { + +} diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml new file mode 100644 index 0000000..ddc84f3 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceLatestStateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + ID, DEVICE_ID, CELL, MONITOR_VALUE, STATE, LOG_TIME + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index ede2f81..2e7ef62 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -28,8 +28,8 @@ diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml new file mode 100644 index 0000000..169341a --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/DeviceSecurityMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + DEVICE_ID, SECRET_KEY + + + diff --git a/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml new file mode 100644 index 0000000..1cc96e2 --- /dev/null +++ b/casic-iot-dao/src/main/resources/mapper/SubscribeFrameLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + ID, MESSAGE_TYPE, SUBSCRIBE_TYPE, DATA_JSON, SUBSCRIBE_TIME, RESPONSE_TIME, STATUS, DEVICE_ID + + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java index 09d6d9a..773eba0 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceListVO.java @@ -39,7 +39,7 @@ private String groupName; @ApiModelProperty(value = "设备状态(0离线/1在线/2报警)", dataType = "String") - @ExcelProperty(value = "设备状态", order = 2) + @DictCodeField(message = "设备状态不合法", cacheName = STATUS) private String status; @ExcelProperty(value = "设备最新数据", order = 3) @@ -52,22 +52,21 @@ @TableField("device_type") private String deviceType; + @ExcelProperty(value = "设备状态", order = 2) + @ApiModelProperty(value = "设备状态名称", dataType = "String") + @TableField(exist = false) + private String statusName; + @ExcelProperty(value = "设备类型", order = 4) @ApiModelProperty(value = "设备类型", dataType = "String") @TableField(exist = false) private String deviceTypeName; - @ApiModelProperty(value = "设备型号", dataType = "Integer") - @DictCodeField(message = "型号类型不合法", cacheName = MODEL) + @ApiModelProperty(value = "设备型号", dataType = "String") + @ExcelProperty(value = "设备型号", order = 5) @TableField("model") private String model; - @ExcelProperty(value = "设备型号", order = 5) - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; - - @ExcelProperty(value = "IMEI", order = 6) @ApiModelProperty(value = "IMEI", dataType = "String") @TableField(exist = false) diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java new file mode 100644 index 0000000..bdab750 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/group/DeviceToGroupRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.dto.group; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zt + * @date 2025-05-14 + */ +@ApiModel +@Data +public class DeviceToGroupRequest { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ids集合", dataType = "List") + private List deviceIds; + +} + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java index 3b82878..f599136 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/product/ProductListDTO.java @@ -14,9 +14,12 @@ @ApiModelProperty(value = "产品名称", dataType = "String") private String productName; - @ApiModelProperty(value = "设备类型", dataType = "String") + @ApiModelProperty(value = "产品类型", dataType = "String") private String productType; + @ApiModelProperty(value = "设备类型", dataType = "String") + private String deviceType; + @ApiModelProperty(value = "设备型号", dataType = "String") private String model; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 131b927..b67944c 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -12,6 +12,7 @@ HANDLE_FAILED(500, "操作失败"), PARAMS_ILLEGALITY(2021, "参数不合法"), GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + DATA_VALID_EXCEPTION(1500, "数据检验异常"), VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index 0757408..9826441 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -72,4 +72,9 @@ */ String ALARM_CATEGORY = "alarmCategory"; + /** + * 设备状态 + */ + String STATUS = "deviceStatus"; + } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java index b6733e0..8de7e77 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/Device.java @@ -80,13 +80,9 @@ * 设备型号 */ @TableField("model") - @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") - @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) - private Integer model; - @ApiModelProperty(value = "设备型号", dataType = "String") - @TableField(exist = false) - private String modelName; + private String model; + /** * 名称 */ @@ -116,6 +112,13 @@ private String iccid; /** + * 电量 + */ + @TableField("cell") + @ApiModelProperty(value = "电量", dataType = "Float") + private Float cell; + + /** * 创建日期 默认为当前时间 */ @TableField("create_time") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java index c25574f..d209642 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceBizData.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -86,7 +87,7 @@ * 采集时间 */ @TableField("uptime") - private LocalDateTime uptime; + private Date uptime; /** * 记录日期 默认为当前时间 diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java new file mode 100644 index 0000000..3e4e88b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceLatestState.java @@ -0,0 +1,63 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_latest_state") +public class DeviceLatestState implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 电量 + */ + @TableField("CELL") + private String cell; + + /** + * 最新值 + */ + @TableField("MONITOR_VALUE") + private String monitorValue; + + /** + * 状态 + */ + @TableField("STATE") + private String state; + + /** + * 最新时间 + */ + @TableField("LOG_TIME") + private Date logTime; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java new file mode 100644 index 0000000..985447b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceSecurity.java @@ -0,0 +1,37 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("device_security") +public class DeviceSecurity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + /** + * 密钥 + */ + @TableField("SECRET_KEY") + private String secretKey; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java new file mode 100644 index 0000000..61a55b9 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/SubscribeFrameLog.java @@ -0,0 +1,74 @@ +package com.casic.missiles.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 租户管理 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Getter +@Setter +@TableName("subscribe_frame_log") +public class SubscribeFrameLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 自增主键 + */ + @TableField("ID") + private Long id; + + /** + * 消息类型 + */ + @TableField("MESSAGE_TYPE") + private String messageType; + + /** + * 订阅类型 + */ + @TableField("SUBSCRIBE_TYPE") + private String subscribeType; + + /** + * json数据 + */ + @TableField("DATA_JSON") + private String dataJson; + + /** + * 订阅时间 + */ + @TableField("SUBSCRIBE_TIME") + private LocalDateTime subscribeTime; + + /** + * 响应时间 + */ + @TableField("RESPONSE_TIME") + private LocalDateTime responseTime; + + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + /** + * 设备id + */ + @TableField("DEVICE_ID") + private Long deviceId; + + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java index 720bb30..644b055 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IBusConfigService.java @@ -23,6 +23,8 @@ ReturnDTO addBusConfig(BusConfig busConfig); + ReturnDTO addBatchConfig(List busConfigs); + ReturnDTO deleteBusConfig(List ids); BusConfig findLatestConfigToBeSend(Long deviceId); diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java index bf0a76b..049ac23 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceGroupService.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.model.DeviceGroup; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -35,4 +36,6 @@ DeviceGroup deviceGroupDetail(Long id); + boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup); + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java new file mode 100644 index 0000000..6abdde6 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceLatestStateService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceLatestState; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceLatestStateService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java new file mode 100644 index 0000000..a56bd80 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceSecurityService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.DeviceSecurity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface IDeviceSecurityService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java index e8f5377..5651bc2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java @@ -11,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Date; import java.util.List; /** @@ -56,6 +57,15 @@ */ void updateDeviceVersion(String deviceCode, String version); + /** + * 更新设备电量 + * @param deviceCode + * @param cell + */ + void updateDeviceCell(String deviceCode, Integer cell); + + void updateDeviceLatestState(String deviceCode, Integer cell, String value, Date uptime); + ReturnDTO deleteDevice(List ids); Device deviceDetail(Long id) throws Exception; diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java new file mode 100644 index 0000000..0ef6a78 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/ISubscribeFrameLogService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 租户管理 服务类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +public interface ISubscribeFrameLogService extends IService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java index 4fc577c..4da7f6a 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/BusConfigServiceImpl.java @@ -54,12 +54,23 @@ } @Override + public ReturnDTO addBatchConfig(List busConfigs) { + AuthUser shiroUser = ShiroKit.getUser(); + busConfigs.forEach(busConfig -> { + busConfig.setCreateUserId(shiroUser.getId()); + busConfig.setCreateUserName(shiroUser.getName()); + }); + return ReturnUtil.success(this.saveBatch(busConfigs)); + } + + @Override public ReturnDTO addBusConfig(BusConfig busConfig) { AuthUser shiroUser = ShiroKit.getUser(); busConfig.setCreateUserId(shiroUser.getId()); busConfig.setCreateUserName(shiroUser.getName()); List busConfigList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(busConfig.getDevcodeList())) { + //toDo:没存储设备id for (String devcode : busConfig.getDevcodeList()) { BusConfig tempBusConfig = new BusConfig(); BeanUtil.copyProperties(busConfig, tempBusConfig); @@ -68,7 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); @@ -88,7 +100,6 @@ if (ObjectUtil.isNotNull(configList) && !configList.isEmpty()) { return configList.get(0); } - return null; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java index 0a16486..28c186f 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceGroupServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; @@ -144,4 +145,12 @@ } + @Override + public boolean addDeviceToGroup(DeviceToGroupRequest deviceToGroup) { + List deviceList = deviceService.listByIds(deviceToGroup.getDeviceIds()); + deviceList.forEach(device -> { + device.setGroupId(deviceToGroup.getGroupId()); + }); + return deviceService.updateBatchById(deviceList); + } } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java new file mode 100644 index 0000000..955b482 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceLatestStateServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceLatestState; +import com.casic.missiles.mapper.DeviceLatestStateMapper; +import com.casic.missiles.service.IDeviceLatestStateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceLatestStateServiceImpl extends ServiceImpl implements IDeviceLatestStateService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java new file mode 100644 index 0000000..110dd96 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceSecurityServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.DeviceSecurity; +import com.casic.missiles.mapper.DeviceSecurityMapper; +import com.casic.missiles.service.IDeviceSecurityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class DeviceSecurityServiceImpl extends ServiceImpl implements IDeviceSecurityService { + +} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java index 4b7ce4b..e3be61e 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +30,9 @@ import com.casic.missiles.mapper.common.SysCommonMapper; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceGroup; +import com.casic.missiles.model.DeviceLatestState; import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.service.IDeviceLatestStateService; import com.casic.missiles.service.IDeviceService; import com.casic.missiles.util.CommonExcelListener; import com.casic.missiles.util.DictCodeUtils; @@ -37,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -57,7 +61,7 @@ private final ProductInfoMapper productInfoMapper; private final DeviceGroupMapper deviceGroupMapper; private final SysCommonMapper sysCommonMapper; - + private final IDeviceLatestStateService latestStateService; @Override public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception { //防止出现空结构,sql语句判别失效 @@ -157,6 +161,42 @@ } @Override + public void updateDeviceCell(String deviceCode, Integer cell) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("devcode", deviceCode); + updateWrapper.set("cell", cell); + this.update(updateWrapper); + } + + @Override + public void updateDeviceLatestState(String deviceCode, + Integer cell, + String value, + Date uptime) { + Long deviceId = this.baseMapper.getDeviceIdByDevCode(deviceCode); + if(ObjectUtil.isNotEmpty(deviceId)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("device_id",deviceId); + DeviceLatestState latestState = latestStateService.getOne(queryWrapper); + if(ObjectUtil.isNotEmpty(latestState)){ + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.updateById(latestState); + }else { + latestState = new DeviceLatestState(); + latestState.setDeviceId(deviceId); + latestState.setCell(cell+""); + latestState.setLogTime(uptime); + latestState.setMonitorValue(value); + latestState.setState("1"); + latestStateService.save(latestState); + } + } + } + + @Override public ReturnDTO deleteDevice(List ids) { if (this.baseMapper.deleteBatchIds(ids) > 0) { return ReturnUtil.success(); @@ -217,27 +257,27 @@ for (int i = 0; i < list.size(); i++) { ImportDeviceDTO importDTO = list.get(i); if (StrUtil.isBlank(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号不能为空")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号不能为空")); } else if (devcodeMap.containsKey(importDTO.getDevcode())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备编号在系统已存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备编号在系统已存在")); } if (ObjectUtil.isEmpty(importDTO.getProductName()) || !productInfoMap.containsKey(importDTO.getProductName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "产品名称不能为空或系统不存在")); } else { importDTO.setProductId(productInfoMap.get(importDTO.getProductName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getGroupName()) || !deviceGroupInfoMap.containsKey(importDTO.getGroupName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "分组名称不能为空或系统不存在")); } else { importDTO.setGroupId(deviceGroupInfoMap.get(importDTO.getGroupName()).getId()); } if (ObjectUtil.isEmpty(importDTO.getModelName()) || !modelMap.containsKey(importDTO.getModelName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备型号不能为空或系统不存在")); } else { importDTO.setModel(Integer.valueOf(modelMap.get(importDTO.getModelName()))); } if (ObjectUtil.isEmpty(importDTO.getDeviceTypeName()) || !deviceMap.containsKey(importDTO.getDeviceTypeName())) { - throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); + throw new BusinessException(BusinessExceptionEnum.DATA_VALID_EXCEPTION.getCode(), String.format(validMsg, i + 1, "设备类型不能为空或系统不存在")); } else { importDTO.setDeviceType(Integer.valueOf(deviceMap.get(importDTO.getDeviceTypeName()))); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java index 1799192..fa4d9a2 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/ProductInfoServiceImpl.java @@ -43,10 +43,18 @@ public Page listPage(Page page, ProductListDTO request, DataScope dataScope) throws Exception { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(request.getProductName()), - "product_name", request.getProductName()); + "name", request.getProductName()); queryWrapper.like(StringUtils.isNotBlank(request.getProductNo()), "product_no", request.getProductNo()); + queryWrapper.eq(StringUtils.isNotBlank(request.getDeviceType()), + "device_type", request.getDeviceType()); queryWrapper.eq("valid", 1); + queryWrapper.like(StringUtils.isNotBlank(request.getModel()), + "model", request.getModel()); + queryWrapper.eq(StringUtils.isNotBlank(request.getEncipherType()), + "encipher_type", request.getEncipherType()); + queryWrapper.eq(StringUtils.isNotBlank(request.getAccessType()), + "access_type", request.getAccessType()); page = this.baseMapper.selectPage(page, queryWrapper); for (ProductInfo productInfo : page.getRecords()) { DictCodeUtils.convertDictCodeToName(productInfo); @@ -82,7 +90,6 @@ @Override public ProductInfo productDetail(Long id) throws Exception{ ProductInfo productInfo = this.baseMapper.selectById(id); - DictCodeUtils.convertDictCodeToName(productInfo); return productInfo; } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java new file mode 100644 index 0000000..ef14b28 --- /dev/null +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/SubscribeFrameLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.impl; + +import com.casic.missiles.model.SubscribeFrameLog; +import com.casic.missiles.mapper.SubscribeFrameLogMapper; +import com.casic.missiles.service.ISubscribeFrameLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 租户管理 服务实现类 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@Service +public class SubscribeFrameLogServiceImpl extends ServiceImpl implements ISubscribeFrameLogService { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java index 2854f94..032f25b 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/BusConfigController.java @@ -24,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 设备配置 设备下发配置所用表 前端控制器 @@ -61,6 +63,15 @@ return busConfigService.addBusConfig(request); } + @ApiOperation("批量下发配置(只针对同一类设备)") + @PostMapping("/addBatchConfig") + public ReturnDTO addBatchConfig(@RequestBody @Validated List request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return busConfigService.addBatchConfig(request); + } + @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteBusConfig(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java index 9df26fc..6f5a049 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -79,6 +80,7 @@ return deviceService.updateDevice(device); } + @CacheEvict(value="busDeviceCache", allEntries = true) @ApiOperation("删除(支持批删、单删)") @PostMapping("/delete") public ReturnDTO deleteDeviceGroup(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java index 9660fa4..08984aa 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceGroupController.java @@ -12,23 +12,22 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.group.DeviceGroupListRequest; import com.casic.missiles.dto.group.DeviceGroupListVO; -import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.dto.group.DeviceToGroupRequest; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.DeviceGroup; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.service.IDeviceGroupService; -import com.casic.missiles.util.DictCodeUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; -import java.io.IOException; -import java.util.List; /** *

@@ -103,4 +102,13 @@ return ReturnUtil.success(deviceGroupService.deviceGroupDetail(idDTO.getId())); } + + @ApiOperation("新增设备分组绑定关系") + @PostMapping("/addDeviceToGroup") + public ReturnDTO addDeviceToGroup(@RequestBody @Validated DeviceToGroupRequest deviceToGroup, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return ReturnUtil.success(deviceGroupService.addDeviceToGroup(deviceToGroup)); + } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java new file mode 100644 index 0000000..18cfdd3 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/SubscribeFrameLogController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 租户管理 前端控制器 + *

+ * + * @author zt + * @since 2025-06-16 + */ +@RestController +@RequestMapping("/subscribe-frame-log") +public class SubscribeFrameLogController { + +} diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java new file mode 100644 index 0000000..69f5863 --- /dev/null +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/TemplateController.java @@ -0,0 +1,76 @@ +package com.casic.missiles.controller; + +import com.casic.missiles.DeviceServerProperties; +import com.casic.missiles.core.base.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +/** + * 模板管理包 + * + * @author dev123 + * @Date 2018-11-19 13:15:14 + */ +@Api(tags = "文件下载") +@RestController +public class TemplateController extends BaseController { + private static Logger logger = LoggerFactory.getLogger(TemplateController.class); + @Autowired + private DeviceServerProperties gunsProperties; + + + @ApiOperation("文件下载:1、设备导入模板:device_template.xlsx") + @GetMapping("/template/download") + public void doPost(@RequestParam("filename") String filename, HttpServletResponse response) + throws ServletException, IOException { + String path = gunsProperties.getConfigPath(); + logger.info(path); + if (path.startsWith("/")) { + path = path.substring(1); + } + File file = new File(path, filename); + // 获取文件名 + String fileName = null; + if (filename.contains("/")) { + fileName = filename.substring(filename.lastIndexOf("/") + 1); + } else { + fileName = filename; + } + + // 设置以流的形式下载文件,这样可以实现任意格式的文件下载 + response.setContentType("application/octet-stream"); + response.addHeader("Content-Disposition", " attachment;filename=" + fileName); +// response.setContentLength((int) file.length()); + response.setHeader("content-Length",String.valueOf(file.length()));//解决文件提示损坏 + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + byte[] buffer = new byte[1024]; + int readTmp = 0; + while ((readTmp = fis.read(buffer)) != -1) { + response.getOutputStream().write(buffer, 0, readTmp); + } + } catch (Exception e) { + logger.info(e.getMessage()); + e.printStackTrace(); + } finally { + response.getOutputStream().flush(); + response.getOutputStream().close(); + fis.close(); + } + } + + +} diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 5199412..ebde94a 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -6,16 +6,16 @@ driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root - password: 123456 + password: Casic203 dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: master: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true + url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root - password: 123456 + password: Casic203 # use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver @@ -42,7 +42,9 @@ db: init: enable: false - + config: + #模板下载路径 + config-path: D:\code\iot\sensorhub-plus\casic-iot-web\src\main\resources\config\temp logging: level: root: error diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 0fcd40b..ba1bf55 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -87,6 +87,6 @@ code: generate: #作者 - author: cz + author: zt #待生成对象表名 - table-name: product_data_item,product_config_item \ No newline at end of file + table-name: device_latest_state,device_security,subscribe_frame_log \ No newline at end of file diff --git a/casic-iot-web/src/main/resources/config/temp/device_template.xlsx b/casic-iot-web/src/main/resources/config/temp/device_template.xlsx new file mode 100644 index 0000000..84b9613 --- /dev/null +++ b/casic-iot-web/src/main/resources/config/temp/device_template.xlsx Binary files differ diff --git a/casic-iot-web/src/main/resources/ehcache.xml b/casic-iot-web/src/main/resources/ehcache.xml new file mode 100644 index 0000000..38ca08e --- /dev/null +++ b/casic-iot-web/src/main/resources/ehcache.xml @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java index 09615b2..b1f62b6 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java @@ -59,6 +59,7 @@ // 工厂类创建frame对象 BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { + //toDo:不建议串行处理业务数据,使用线程池并行处理 // 处理业务数据 defaultService.doParseBizTag(birmmFrame); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java index ec4c9d7..ff34926 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -8,7 +9,6 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmStartupRequest; import com.casic.missiles.frame.base.*; import com.casic.missiles.frame.tag.biz.SensorStartupTag; import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; @@ -61,6 +61,9 @@ @Resource ISubscribeStoreService subscribeService; + @Resource + IDeviceLatestStateService latestStateService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -199,6 +202,7 @@ /** * 保存业务数据 + * * @param trapRequest * @param frameLogId */ @@ -221,11 +225,30 @@ // 批量保存 bizDataService.saveBatch(bizDataList); + + try { +// //更新设备表电量信息 +// if (CollectionUtil.isNotEmpty(bizDataList)) { +// DeviceBizData bizData = bizDataList.get(bizDataList.size() - 1); +// if (ObjectUtil.isNotEmpty(bizData.getCell())) +// deviceService.updateDeviceCell(bizData.getDevcode(), bizData.getCell()); +// } + //更新设备最新状态表信息 + if (CollectionUtil.isNotEmpty(bizDataList)) { + DeviceBizData bizData = bizDataList.get(bizDataList.size() - 1); + deviceService.updateDeviceLatestState(bizData.getDevcode(), bizData.getCell() + , bizData.getValue(), bizData.getUptime()); + } + } catch (Exception e) { + log.info("更新设备最新状态表信息异常"); + } + } /** * 保存三码到数据库 * 更新对应设备编号的IMEI和ICCID + * * @param startupRequest */ private void saveSensorDevCodeAndImei(BirmmStartupRequest startupRequest) { @@ -251,6 +274,7 @@ /** * 更新设备当前配置项的值 * 更新最新的下发配置项的状态 + * * @param setResponse * @param frameLogId */ @@ -308,7 +332,7 @@ public void pushMessage(BirmmBaseFrame birmmFrame) { if (!birmmFrame.needPushToApplication()) { log.debug("[{}][{}, {}]类消息,无需推送", birmmFrame.getDevCode(), birmmFrame.getDeviceTypeName(), birmmFrame.getOperationTypeName()); - return ; + return; } Device device = deviceService.getDeviceByDeviceCode(birmmFrame.getDevCode());