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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 375f189..cf9826b 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语句判别失效 @@ -147,6 +151,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(); @@ -207,27 +247,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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 375f189..cf9826b 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语句判别失效 @@ -147,6 +151,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(); @@ -207,27 +247,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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 375f189..cf9826b 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语句判别失效 @@ -147,6 +151,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(); @@ -207,27 +247,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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 375f189..cf9826b 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语句判别失效 @@ -147,6 +151,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(); @@ -207,27 +247,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/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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 375f189..cf9826b 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语句判别失效 @@ -147,6 +151,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(); @@ -207,27 +247,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/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/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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 375f189..cf9826b 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语句判别失效 @@ -147,6 +151,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(); @@ -207,27 +247,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/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/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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 375f189..cf9826b 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语句判别失效 @@ -147,6 +151,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(); @@ -207,27 +247,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/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/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 ec165dc..ebde94a 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 375f189..cf9826b 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语句判别失效 @@ -147,6 +151,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(); @@ -207,27 +247,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/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/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 ec165dc..ebde94a 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -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 789b3d9..ba1bf55 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -89,4 +89,4 @@ #作者 author: zt #待生成对象表名 - table-name: device_to_group,device_to_product \ 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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 375f189..cf9826b 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语句判别失效 @@ -147,6 +151,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(); @@ -207,27 +247,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/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/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 ec165dc..ebde94a 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -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 789b3d9..ba1bf55 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -89,4 +89,4 @@ #作者 author: zt #待生成对象表名 - table-name: device_to_group,device_to_product \ 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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 375f189..cf9826b 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语句判别失效 @@ -147,6 +151,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(); @@ -207,27 +247,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/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/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 ec165dc..ebde94a 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -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 789b3d9..ba1bf55 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -89,4 +89,4 @@ #作者 author: zt #待生成对象表名 - table-name: device_to_group,device_to_product \ 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 34a4133..83a31b1 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,4 +32,8 @@ 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); + } 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 1652cf1..2330a0e 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -26,8 +26,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 b5575f5..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 @@ -62,17 +62,11 @@ @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/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/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/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 e1eb579..25eb140 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; /** @@ -54,6 +55,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 ebce87b..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 @@ -79,8 +79,8 @@ } } if (this.saveBatch(busConfigList)) { - //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 - convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); +// //TODO:是否需要配置项,若不需要只能根据每个产品固定写,是否需要通过redis,待定 +// convertParamItemToSend(busConfig.getConfigJson(), busConfig.getDevcodeList()); return ReturnUtil.success(); } throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); 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 375f189..cf9826b 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语句判别失效 @@ -147,6 +151,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(); @@ -207,27 +247,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/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/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 ec165dc..ebde94a 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -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 789b3d9..ba1bf55 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -89,4 +89,4 @@ #作者 author: zt #待生成对象表名 - table-name: device_to_group,device_to_product \ 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/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java index 04345f4..11b5a01 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,13 +1,13 @@ 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 com.alibaba.fastjson.JSONArray; 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; @@ -60,6 +60,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 }; @@ -208,6 +211,7 @@ /** * 保存业务数据 + * * @param trapRequest * @param frameLogId */ @@ -230,11 +234,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) { @@ -260,6 +283,7 @@ /** * 更新设备当前配置项的值 * 更新最新的下发配置项的状态 + * * @param setResponse * @param frameLogId */ @@ -317,7 +341,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());