diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java index 92ebb93..09d5e8e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java @@ -25,7 +25,6 @@ public class ProcessorInstanceProvider { private final DatagramEventConfig processorInstance; - private final List subscribeConfigs; private static Boolean textPlain = false; public ProcessorInstanceProvider(Long ruleId) { @@ -34,7 +33,6 @@ datagramEventRegistry.getDatagramEventList(ruleId); processorInstance = this.getProcessorInstance(datagramEventConfigList); SubscribeRegistry subscribeRegistry = SpringContextUtil.getBean(SubscribeRegistry.class); - subscribeConfigs = subscribeRegistry.getSubscribeRegistry(ruleId); } public DatagramEventConfig getProcessorInstance() { @@ -148,7 +146,7 @@ public void storeData(List> bizDataMap) { SensorhubProperties sensorhubProperties = SpringContextUtil.getBean(SensorhubProperties.class); DataSubscribeProvider subscribeProvider = SpringContextUtil.getBean(sensorhubProperties.getBean()); - subscribeProvider.publishDataSubscribe(bizDataMap, null); + subscribeProvider.publishDataSubscribe(bizDataMap); } // DataSubscribeProvider dataSubscribeProvider = SpringContextUtil.getBean(processorInstance.getSubscribeBean()); diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java index 92ebb93..09d5e8e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java @@ -25,7 +25,6 @@ public class ProcessorInstanceProvider { private final DatagramEventConfig processorInstance; - private final List subscribeConfigs; private static Boolean textPlain = false; public ProcessorInstanceProvider(Long ruleId) { @@ -34,7 +33,6 @@ datagramEventRegistry.getDatagramEventList(ruleId); processorInstance = this.getProcessorInstance(datagramEventConfigList); SubscribeRegistry subscribeRegistry = SpringContextUtil.getBean(SubscribeRegistry.class); - subscribeConfigs = subscribeRegistry.getSubscribeRegistry(ruleId); } public DatagramEventConfig getProcessorInstance() { @@ -148,7 +146,7 @@ public void storeData(List> bizDataMap) { SensorhubProperties sensorhubProperties = SpringContextUtil.getBean(SensorhubProperties.class); DataSubscribeProvider subscribeProvider = SpringContextUtil.getBean(sensorhubProperties.getBean()); - subscribeProvider.publishDataSubscribe(bizDataMap, null); + subscribeProvider.publishDataSubscribe(bizDataMap); } // DataSubscribeProvider dataSubscribeProvider = SpringContextUtil.getBean(processorInstance.getSubscribeBean()); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java index 51de533..224437f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java @@ -51,6 +51,7 @@ return null; } //为回复配置 + //TODO 配置特定设备升级 Map bizDataMap = beforeRuleReply(parseResult); //规则指定回复配置 defaultRuleReply(sendRuleConfig, replyBytes, bizDataMap, fieldConfigsMap, parseResult.getRuleConfigFactory(), fieldRuleConfigMap); diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java index 92ebb93..09d5e8e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java @@ -25,7 +25,6 @@ public class ProcessorInstanceProvider { private final DatagramEventConfig processorInstance; - private final List subscribeConfigs; private static Boolean textPlain = false; public ProcessorInstanceProvider(Long ruleId) { @@ -34,7 +33,6 @@ datagramEventRegistry.getDatagramEventList(ruleId); processorInstance = this.getProcessorInstance(datagramEventConfigList); SubscribeRegistry subscribeRegistry = SpringContextUtil.getBean(SubscribeRegistry.class); - subscribeConfigs = subscribeRegistry.getSubscribeRegistry(ruleId); } public DatagramEventConfig getProcessorInstance() { @@ -148,7 +146,7 @@ public void storeData(List> bizDataMap) { SensorhubProperties sensorhubProperties = SpringContextUtil.getBean(SensorhubProperties.class); DataSubscribeProvider subscribeProvider = SpringContextUtil.getBean(sensorhubProperties.getBean()); - subscribeProvider.publishDataSubscribe(bizDataMap, null); + subscribeProvider.publishDataSubscribe(bizDataMap); } // DataSubscribeProvider dataSubscribeProvider = SpringContextUtil.getBean(processorInstance.getSubscribeBean()); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java index 51de533..224437f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java @@ -51,6 +51,7 @@ return null; } //为回复配置 + //TODO 配置特定设备升级 Map bizDataMap = beforeRuleReply(parseResult); //规则指定回复配置 defaultRuleReply(sendRuleConfig, replyBytes, bizDataMap, fieldConfigsMap, parseResult.getRuleConfigFactory(), fieldRuleConfigMap); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java new file mode 100644 index 0000000..b48702c --- /dev/null +++ b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java @@ -0,0 +1,18 @@ +package com.casic.missiles.dto; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Integer code; + private String message; + private T data; +} \ No newline at end of file diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java index 92ebb93..09d5e8e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java @@ -25,7 +25,6 @@ public class ProcessorInstanceProvider { private final DatagramEventConfig processorInstance; - private final List subscribeConfigs; private static Boolean textPlain = false; public ProcessorInstanceProvider(Long ruleId) { @@ -34,7 +33,6 @@ datagramEventRegistry.getDatagramEventList(ruleId); processorInstance = this.getProcessorInstance(datagramEventConfigList); SubscribeRegistry subscribeRegistry = SpringContextUtil.getBean(SubscribeRegistry.class); - subscribeConfigs = subscribeRegistry.getSubscribeRegistry(ruleId); } public DatagramEventConfig getProcessorInstance() { @@ -148,7 +146,7 @@ public void storeData(List> bizDataMap) { SensorhubProperties sensorhubProperties = SpringContextUtil.getBean(SensorhubProperties.class); DataSubscribeProvider subscribeProvider = SpringContextUtil.getBean(sensorhubProperties.getBean()); - subscribeProvider.publishDataSubscribe(bizDataMap, null); + subscribeProvider.publishDataSubscribe(bizDataMap); } // DataSubscribeProvider dataSubscribeProvider = SpringContextUtil.getBean(processorInstance.getSubscribeBean()); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java index 51de533..224437f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java @@ -51,6 +51,7 @@ return null; } //为回复配置 + //TODO 配置特定设备升级 Map bizDataMap = beforeRuleReply(parseResult); //规则指定回复配置 defaultRuleReply(sendRuleConfig, replyBytes, bizDataMap, fieldConfigsMap, parseResult.getRuleConfigFactory(), fieldRuleConfigMap); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java new file mode 100644 index 0000000..b48702c --- /dev/null +++ b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java @@ -0,0 +1,18 @@ +package com.casic.missiles.dto; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Integer code; + private String message; + private T data; +} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java index 128b09d..7368988 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; @Mapper +@Deprecated public interface CommandEventMapper extends BaseMapper { } diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java index 92ebb93..09d5e8e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java @@ -25,7 +25,6 @@ public class ProcessorInstanceProvider { private final DatagramEventConfig processorInstance; - private final List subscribeConfigs; private static Boolean textPlain = false; public ProcessorInstanceProvider(Long ruleId) { @@ -34,7 +33,6 @@ datagramEventRegistry.getDatagramEventList(ruleId); processorInstance = this.getProcessorInstance(datagramEventConfigList); SubscribeRegistry subscribeRegistry = SpringContextUtil.getBean(SubscribeRegistry.class); - subscribeConfigs = subscribeRegistry.getSubscribeRegistry(ruleId); } public DatagramEventConfig getProcessorInstance() { @@ -148,7 +146,7 @@ public void storeData(List> bizDataMap) { SensorhubProperties sensorhubProperties = SpringContextUtil.getBean(SensorhubProperties.class); DataSubscribeProvider subscribeProvider = SpringContextUtil.getBean(sensorhubProperties.getBean()); - subscribeProvider.publishDataSubscribe(bizDataMap, null); + subscribeProvider.publishDataSubscribe(bizDataMap); } // DataSubscribeProvider dataSubscribeProvider = SpringContextUtil.getBean(processorInstance.getSubscribeBean()); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java index 51de533..224437f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java @@ -51,6 +51,7 @@ return null; } //为回复配置 + //TODO 配置特定设备升级 Map bizDataMap = beforeRuleReply(parseResult); //规则指定回复配置 defaultRuleReply(sendRuleConfig, replyBytes, bizDataMap, fieldConfigsMap, parseResult.getRuleConfigFactory(), fieldRuleConfigMap); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java new file mode 100644 index 0000000..b48702c --- /dev/null +++ b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java @@ -0,0 +1,18 @@ +package com.casic.missiles.dto; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Integer code; + private String message; + private T data; +} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java index 128b09d..7368988 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; @Mapper +@Deprecated public interface CommandEventMapper extends BaseMapper { } diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java index f45ddd7..5901442 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java @@ -6,6 +6,7 @@ import java.util.Date; @Data +@Deprecated @TableName("command_event_config") public class CommandEventConfig { private Long id; diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java index 92ebb93..09d5e8e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java @@ -25,7 +25,6 @@ public class ProcessorInstanceProvider { private final DatagramEventConfig processorInstance; - private final List subscribeConfigs; private static Boolean textPlain = false; public ProcessorInstanceProvider(Long ruleId) { @@ -34,7 +33,6 @@ datagramEventRegistry.getDatagramEventList(ruleId); processorInstance = this.getProcessorInstance(datagramEventConfigList); SubscribeRegistry subscribeRegistry = SpringContextUtil.getBean(SubscribeRegistry.class); - subscribeConfigs = subscribeRegistry.getSubscribeRegistry(ruleId); } public DatagramEventConfig getProcessorInstance() { @@ -148,7 +146,7 @@ public void storeData(List> bizDataMap) { SensorhubProperties sensorhubProperties = SpringContextUtil.getBean(SensorhubProperties.class); DataSubscribeProvider subscribeProvider = SpringContextUtil.getBean(sensorhubProperties.getBean()); - subscribeProvider.publishDataSubscribe(bizDataMap, null); + subscribeProvider.publishDataSubscribe(bizDataMap); } // DataSubscribeProvider dataSubscribeProvider = SpringContextUtil.getBean(processorInstance.getSubscribeBean()); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java index 51de533..224437f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java @@ -51,6 +51,7 @@ return null; } //为回复配置 + //TODO 配置特定设备升级 Map bizDataMap = beforeRuleReply(parseResult); //规则指定回复配置 defaultRuleReply(sendRuleConfig, replyBytes, bizDataMap, fieldConfigsMap, parseResult.getRuleConfigFactory(), fieldRuleConfigMap); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java new file mode 100644 index 0000000..b48702c --- /dev/null +++ b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java @@ -0,0 +1,18 @@ +package com.casic.missiles.dto; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Integer code; + private String message; + private T data; +} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java index 128b09d..7368988 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; @Mapper +@Deprecated public interface CommandEventMapper extends BaseMapper { } diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java index f45ddd7..5901442 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java @@ -6,6 +6,7 @@ import java.util.Date; @Data +@Deprecated @TableName("command_event_config") public class CommandEventConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java deleted file mode 100644 index 5b0bf41..0000000 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles.pojo; - -import lombok.Data; - -/** - * @author cz - * @date 2022-8-12 - */ -@Data -public class ResponseData { - public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; - public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; - public static final Integer DEFAULT_SUCCESS_CODE = 200; - public static final Integer DEFAULT_ERROR_CODE = 500; - private Integer code; - private String message; - private T data; -} \ No newline at end of file diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java index 92ebb93..09d5e8e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java @@ -25,7 +25,6 @@ public class ProcessorInstanceProvider { private final DatagramEventConfig processorInstance; - private final List subscribeConfigs; private static Boolean textPlain = false; public ProcessorInstanceProvider(Long ruleId) { @@ -34,7 +33,6 @@ datagramEventRegistry.getDatagramEventList(ruleId); processorInstance = this.getProcessorInstance(datagramEventConfigList); SubscribeRegistry subscribeRegistry = SpringContextUtil.getBean(SubscribeRegistry.class); - subscribeConfigs = subscribeRegistry.getSubscribeRegistry(ruleId); } public DatagramEventConfig getProcessorInstance() { @@ -148,7 +146,7 @@ public void storeData(List> bizDataMap) { SensorhubProperties sensorhubProperties = SpringContextUtil.getBean(SensorhubProperties.class); DataSubscribeProvider subscribeProvider = SpringContextUtil.getBean(sensorhubProperties.getBean()); - subscribeProvider.publishDataSubscribe(bizDataMap, null); + subscribeProvider.publishDataSubscribe(bizDataMap); } // DataSubscribeProvider dataSubscribeProvider = SpringContextUtil.getBean(processorInstance.getSubscribeBean()); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java index 51de533..224437f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java @@ -51,6 +51,7 @@ return null; } //为回复配置 + //TODO 配置特定设备升级 Map bizDataMap = beforeRuleReply(parseResult); //规则指定回复配置 defaultRuleReply(sendRuleConfig, replyBytes, bizDataMap, fieldConfigsMap, parseResult.getRuleConfigFactory(), fieldRuleConfigMap); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java new file mode 100644 index 0000000..b48702c --- /dev/null +++ b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java @@ -0,0 +1,18 @@ +package com.casic.missiles.dto; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Integer code; + private String message; + private T data; +} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java index 128b09d..7368988 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; @Mapper +@Deprecated public interface CommandEventMapper extends BaseMapper { } diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java index f45ddd7..5901442 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java @@ -6,6 +6,7 @@ import java.util.Date; @Data +@Deprecated @TableName("command_event_config") public class CommandEventConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java deleted file mode 100644 index 5b0bf41..0000000 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles.pojo; - -import lombok.Data; - -/** - * @author cz - * @date 2022-8-12 - */ -@Data -public class ResponseData { - public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; - public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; - public static final Integer DEFAULT_SUCCESS_CODE = 200; - public static final Integer DEFAULT_ERROR_CODE = 500; - private Integer code; - private String message; - private T data; -} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java index bb16cd9..45822b4 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java @@ -12,6 +12,7 @@ */ @TableName("subscribe_config") @Data +@Deprecated public class SubscribeConfig { private Long id; diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java index 92ebb93..09d5e8e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java @@ -25,7 +25,6 @@ public class ProcessorInstanceProvider { private final DatagramEventConfig processorInstance; - private final List subscribeConfigs; private static Boolean textPlain = false; public ProcessorInstanceProvider(Long ruleId) { @@ -34,7 +33,6 @@ datagramEventRegistry.getDatagramEventList(ruleId); processorInstance = this.getProcessorInstance(datagramEventConfigList); SubscribeRegistry subscribeRegistry = SpringContextUtil.getBean(SubscribeRegistry.class); - subscribeConfigs = subscribeRegistry.getSubscribeRegistry(ruleId); } public DatagramEventConfig getProcessorInstance() { @@ -148,7 +146,7 @@ public void storeData(List> bizDataMap) { SensorhubProperties sensorhubProperties = SpringContextUtil.getBean(SensorhubProperties.class); DataSubscribeProvider subscribeProvider = SpringContextUtil.getBean(sensorhubProperties.getBean()); - subscribeProvider.publishDataSubscribe(bizDataMap, null); + subscribeProvider.publishDataSubscribe(bizDataMap); } // DataSubscribeProvider dataSubscribeProvider = SpringContextUtil.getBean(processorInstance.getSubscribeBean()); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java index 51de533..224437f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java @@ -51,6 +51,7 @@ return null; } //为回复配置 + //TODO 配置特定设备升级 Map bizDataMap = beforeRuleReply(parseResult); //规则指定回复配置 defaultRuleReply(sendRuleConfig, replyBytes, bizDataMap, fieldConfigsMap, parseResult.getRuleConfigFactory(), fieldRuleConfigMap); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java new file mode 100644 index 0000000..b48702c --- /dev/null +++ b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java @@ -0,0 +1,18 @@ +package com.casic.missiles.dto; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Integer code; + private String message; + private T data; +} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java index 128b09d..7368988 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; @Mapper +@Deprecated public interface CommandEventMapper extends BaseMapper { } diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java index f45ddd7..5901442 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java @@ -6,6 +6,7 @@ import java.util.Date; @Data +@Deprecated @TableName("command_event_config") public class CommandEventConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java deleted file mode 100644 index 5b0bf41..0000000 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles.pojo; - -import lombok.Data; - -/** - * @author cz - * @date 2022-8-12 - */ -@Data -public class ResponseData { - public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; - public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; - public static final Integer DEFAULT_SUCCESS_CODE = 200; - public static final Integer DEFAULT_ERROR_CODE = 500; - private Integer code; - private String message; - private T data; -} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java index bb16cd9..45822b4 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java @@ -12,6 +12,7 @@ */ @TableName("subscribe_config") @Data +@Deprecated public class SubscribeConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java index 5403d8d..dc358fb 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java @@ -7,6 +7,7 @@ @Data @TableName("subscribe_detail_config") +@Deprecated public class SubscribeDetailConfig { private Long id; diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java index 92ebb93..09d5e8e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java @@ -25,7 +25,6 @@ public class ProcessorInstanceProvider { private final DatagramEventConfig processorInstance; - private final List subscribeConfigs; private static Boolean textPlain = false; public ProcessorInstanceProvider(Long ruleId) { @@ -34,7 +33,6 @@ datagramEventRegistry.getDatagramEventList(ruleId); processorInstance = this.getProcessorInstance(datagramEventConfigList); SubscribeRegistry subscribeRegistry = SpringContextUtil.getBean(SubscribeRegistry.class); - subscribeConfigs = subscribeRegistry.getSubscribeRegistry(ruleId); } public DatagramEventConfig getProcessorInstance() { @@ -148,7 +146,7 @@ public void storeData(List> bizDataMap) { SensorhubProperties sensorhubProperties = SpringContextUtil.getBean(SensorhubProperties.class); DataSubscribeProvider subscribeProvider = SpringContextUtil.getBean(sensorhubProperties.getBean()); - subscribeProvider.publishDataSubscribe(bizDataMap, null); + subscribeProvider.publishDataSubscribe(bizDataMap); } // DataSubscribeProvider dataSubscribeProvider = SpringContextUtil.getBean(processorInstance.getSubscribeBean()); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java index 51de533..224437f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java @@ -51,6 +51,7 @@ return null; } //为回复配置 + //TODO 配置特定设备升级 Map bizDataMap = beforeRuleReply(parseResult); //规则指定回复配置 defaultRuleReply(sendRuleConfig, replyBytes, bizDataMap, fieldConfigsMap, parseResult.getRuleConfigFactory(), fieldRuleConfigMap); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java new file mode 100644 index 0000000..b48702c --- /dev/null +++ b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java @@ -0,0 +1,18 @@ +package com.casic.missiles.dto; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Integer code; + private String message; + private T data; +} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java index 128b09d..7368988 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; @Mapper +@Deprecated public interface CommandEventMapper extends BaseMapper { } diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java index f45ddd7..5901442 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java @@ -6,6 +6,7 @@ import java.util.Date; @Data +@Deprecated @TableName("command_event_config") public class CommandEventConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java deleted file mode 100644 index 5b0bf41..0000000 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles.pojo; - -import lombok.Data; - -/** - * @author cz - * @date 2022-8-12 - */ -@Data -public class ResponseData { - public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; - public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; - public static final Integer DEFAULT_SUCCESS_CODE = 200; - public static final Integer DEFAULT_ERROR_CODE = 500; - private Integer code; - private String message; - private T data; -} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java index bb16cd9..45822b4 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java @@ -12,6 +12,7 @@ */ @TableName("subscribe_config") @Data +@Deprecated public class SubscribeConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java index 5403d8d..dc358fb 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java @@ -7,6 +7,7 @@ @Data @TableName("subscribe_detail_config") +@Deprecated public class SubscribeDetailConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java b/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java index 60ce075..28a6186 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java @@ -4,6 +4,7 @@ import java.util.List; +@Deprecated public interface SubscribeRegistry { diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java index 92ebb93..09d5e8e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java @@ -25,7 +25,6 @@ public class ProcessorInstanceProvider { private final DatagramEventConfig processorInstance; - private final List subscribeConfigs; private static Boolean textPlain = false; public ProcessorInstanceProvider(Long ruleId) { @@ -34,7 +33,6 @@ datagramEventRegistry.getDatagramEventList(ruleId); processorInstance = this.getProcessorInstance(datagramEventConfigList); SubscribeRegistry subscribeRegistry = SpringContextUtil.getBean(SubscribeRegistry.class); - subscribeConfigs = subscribeRegistry.getSubscribeRegistry(ruleId); } public DatagramEventConfig getProcessorInstance() { @@ -148,7 +146,7 @@ public void storeData(List> bizDataMap) { SensorhubProperties sensorhubProperties = SpringContextUtil.getBean(SensorhubProperties.class); DataSubscribeProvider subscribeProvider = SpringContextUtil.getBean(sensorhubProperties.getBean()); - subscribeProvider.publishDataSubscribe(bizDataMap, null); + subscribeProvider.publishDataSubscribe(bizDataMap); } // DataSubscribeProvider dataSubscribeProvider = SpringContextUtil.getBean(processorInstance.getSubscribeBean()); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java index 51de533..224437f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java @@ -51,6 +51,7 @@ return null; } //为回复配置 + //TODO 配置特定设备升级 Map bizDataMap = beforeRuleReply(parseResult); //规则指定回复配置 defaultRuleReply(sendRuleConfig, replyBytes, bizDataMap, fieldConfigsMap, parseResult.getRuleConfigFactory(), fieldRuleConfigMap); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java new file mode 100644 index 0000000..b48702c --- /dev/null +++ b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java @@ -0,0 +1,18 @@ +package com.casic.missiles.dto; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Integer code; + private String message; + private T data; +} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java index 128b09d..7368988 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; @Mapper +@Deprecated public interface CommandEventMapper extends BaseMapper { } diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java index f45ddd7..5901442 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java @@ -6,6 +6,7 @@ import java.util.Date; @Data +@Deprecated @TableName("command_event_config") public class CommandEventConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java deleted file mode 100644 index 5b0bf41..0000000 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles.pojo; - -import lombok.Data; - -/** - * @author cz - * @date 2022-8-12 - */ -@Data -public class ResponseData { - public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; - public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; - public static final Integer DEFAULT_SUCCESS_CODE = 200; - public static final Integer DEFAULT_ERROR_CODE = 500; - private Integer code; - private String message; - private T data; -} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java index bb16cd9..45822b4 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java @@ -12,6 +12,7 @@ */ @TableName("subscribe_config") @Data +@Deprecated public class SubscribeConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java index 5403d8d..dc358fb 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java @@ -7,6 +7,7 @@ @Data @TableName("subscribe_detail_config") +@Deprecated public class SubscribeDetailConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java b/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java index 60ce075..28a6186 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java @@ -4,6 +4,7 @@ import java.util.List; +@Deprecated public interface SubscribeRegistry { diff --git a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/CommandEventRegistryImpl.java b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/CommandEventRegistryImpl.java index b0e8304..fdca97d 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/CommandEventRegistryImpl.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/CommandEventRegistryImpl.java @@ -12,6 +12,7 @@ import java.util.Optional; @DS("sensorhub") +@Deprecated public class CommandEventRegistryImpl extends ServiceImpl implements CommandEventRegistry { @Override diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java index 92ebb93..09d5e8e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java @@ -25,7 +25,6 @@ public class ProcessorInstanceProvider { private final DatagramEventConfig processorInstance; - private final List subscribeConfigs; private static Boolean textPlain = false; public ProcessorInstanceProvider(Long ruleId) { @@ -34,7 +33,6 @@ datagramEventRegistry.getDatagramEventList(ruleId); processorInstance = this.getProcessorInstance(datagramEventConfigList); SubscribeRegistry subscribeRegistry = SpringContextUtil.getBean(SubscribeRegistry.class); - subscribeConfigs = subscribeRegistry.getSubscribeRegistry(ruleId); } public DatagramEventConfig getProcessorInstance() { @@ -148,7 +146,7 @@ public void storeData(List> bizDataMap) { SensorhubProperties sensorhubProperties = SpringContextUtil.getBean(SensorhubProperties.class); DataSubscribeProvider subscribeProvider = SpringContextUtil.getBean(sensorhubProperties.getBean()); - subscribeProvider.publishDataSubscribe(bizDataMap, null); + subscribeProvider.publishDataSubscribe(bizDataMap); } // DataSubscribeProvider dataSubscribeProvider = SpringContextUtil.getBean(processorInstance.getSubscribeBean()); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java index 51de533..224437f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java @@ -51,6 +51,7 @@ return null; } //为回复配置 + //TODO 配置特定设备升级 Map bizDataMap = beforeRuleReply(parseResult); //规则指定回复配置 defaultRuleReply(sendRuleConfig, replyBytes, bizDataMap, fieldConfigsMap, parseResult.getRuleConfigFactory(), fieldRuleConfigMap); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java new file mode 100644 index 0000000..b48702c --- /dev/null +++ b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java @@ -0,0 +1,18 @@ +package com.casic.missiles.dto; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Integer code; + private String message; + private T data; +} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java index 128b09d..7368988 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; @Mapper +@Deprecated public interface CommandEventMapper extends BaseMapper { } diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java index f45ddd7..5901442 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java @@ -6,6 +6,7 @@ import java.util.Date; @Data +@Deprecated @TableName("command_event_config") public class CommandEventConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java deleted file mode 100644 index 5b0bf41..0000000 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles.pojo; - -import lombok.Data; - -/** - * @author cz - * @date 2022-8-12 - */ -@Data -public class ResponseData { - public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; - public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; - public static final Integer DEFAULT_SUCCESS_CODE = 200; - public static final Integer DEFAULT_ERROR_CODE = 500; - private Integer code; - private String message; - private T data; -} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java index bb16cd9..45822b4 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java @@ -12,6 +12,7 @@ */ @TableName("subscribe_config") @Data +@Deprecated public class SubscribeConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java index 5403d8d..dc358fb 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java @@ -7,6 +7,7 @@ @Data @TableName("subscribe_detail_config") +@Deprecated public class SubscribeDetailConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java b/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java index 60ce075..28a6186 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java @@ -4,6 +4,7 @@ import java.util.List; +@Deprecated public interface SubscribeRegistry { diff --git a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/CommandEventRegistryImpl.java b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/CommandEventRegistryImpl.java index b0e8304..fdca97d 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/CommandEventRegistryImpl.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/CommandEventRegistryImpl.java @@ -12,6 +12,7 @@ import java.util.Optional; @DS("sensorhub") +@Deprecated public class CommandEventRegistryImpl extends ServiceImpl implements CommandEventRegistry { @Override diff --git a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/DatagramEventRegistryImpl.java b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/DatagramEventRegistryImpl.java index d2d1748..0d1ce16 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/DatagramEventRegistryImpl.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/DatagramEventRegistryImpl.java @@ -16,7 +16,6 @@ @DS("sensorhub") public class DatagramEventRegistryImpl extends ServiceImpl implements DatagramEventRegistry { - @Override @Cacheable(value = "datagramEventConfigCache", key = "'datagram'+#ruleId", unless = "#result == null") public List getDatagramEventList(Long ruleId) { diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml index 8cc8bc3..d454732 100644 --- a/casic-iot-common/pom.xml +++ b/casic-iot-common/pom.xml @@ -56,7 +56,7 @@ org.springframework.boot spring-boot-starter-websocket - 2.4.5 + ${spring.version} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java index b0c2933..a5dc4ef 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/AlarmDataMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,8 @@ */ public interface AlarmDataMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("request") AlarmDataDTO request, + @Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java index f83aa6e..24fa5ad 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceUpgradeTaskMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceUpgradeTaskMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") UpgradeTaskDTO request, + @Param("dataScope") DataScope dataScope); } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java index 339ca9b..07c2285 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceVersionMapper.java @@ -1,7 +1,14 @@ package com.casic.missiles.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +20,6 @@ */ public interface DeviceVersionMapper extends BaseMapper { + List listPage(@Param("page") Page page, @Param("request") DeviceVersionDTO request,@Param("dataScope") DataScope dataScope); + } diff --git a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml index 4aee44a..ea44fb5 100644 --- a/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/AlarmDataMapper.xml @@ -4,15 +4,16 @@ - - - - - - - - - + + + + + + + + + + @@ -20,4 +21,84 @@ id, alarm_type, alarm_content, devcode, alarm_time, alarm_value, status, CreatorName, create_time + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml index a5bf5e7..a2edc7f 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceUpgradeTaskMapper.xml @@ -4,12 +4,12 @@ - - - - - - + + + + + + @@ -17,4 +17,50 @@ id, version_id, device_id, status, create_time, create_user_id + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + + + + diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml index e39ec1f..661f2d5 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceVersionMapper.xml @@ -2,22 +2,65 @@ - - - - - - - - - + + + + + + + + + + + ${paramStr} + + + + TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone + + + + TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi') + + Id, product_id, version_file, version, owner, dscn, create_time, create_user_id + + diff --git a/casic-iot-job/pom.xml b/casic-iot-job/pom.xml new file mode 100644 index 0000000..f1782b0 --- /dev/null +++ b/casic-iot-job/pom.xml @@ -0,0 +1,22 @@ + + + + casic-iot + com.casic + 1.0.0-SNAPSHOT + + 4.0.0 + + casic-iot-job + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java new file mode 100644 index 0000000..cd564d3 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.casic.missiles.job.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: + * @Author: cz + * @Date: 2024/5/6 + */ +@Slf4j +@Configuration +@Data +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + +// @Value("${xxl.job.executor.address}") +// private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); +// xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java new file mode 100644 index 0000000..1f77931 --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -0,0 +1,42 @@ +package com.casic.missiles.job.handler; + +/** + * @Description: JobHandler + * @Author: cz + * @Date: 2024/5/6 + */ + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * XxlJob开发示例(Bean模式) + * + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + */ +@Slf4j +@Component +public class DemoJobHandler { + + @XxlJob(value = "demoHandler") + public ReturnT execute(String param) throws Exception { + System.out.println("调度任务Demo执行"); + XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); + +// for (int i = 0; i < 5; i++) { +// XxlJobLogger.log("beat at:" + i); +// TimeUnit.SECONDS.sleep(2); +// } + return SUCCESS; + } + +} diff --git a/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java new file mode 100644 index 0000000..1762f6e --- /dev/null +++ b/casic-iot-job/src/main/java/com/casic/missiles/job/handler/SystemOperationHandler.java @@ -0,0 +1,52 @@ +package com.casic.missiles.job.handler; + +import com.sun.management.OperatingSystemMXBean; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.ThreadMXBean; + +import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; + +/** + * 系统运行情况 + * cpu占用,线程、内存使用情况 + * + * @author cz + * @date 2024/5/6 + */ +public class SystemOperationHandler { + + /** + * 计划每十分钟进行一次计算,仅用于问题排查 + * 保留最新三个小时内 + * + * @param param + * @return + * @throws Exception + */ + @XxlJob(value = "systemOperation") + public ReturnT execute(String param) throws Exception { + // 获取内存MXBean + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + + // 获取线程MXBean + ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + // 获取操作系统MXBean + OperatingSystemMXBean osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + + // 获取当前内存使用情况 + long totalMemory = osMXBean.getTotalPhysicalMemorySize(); + long freeMemory = osMXBean.getFreePhysicalMemorySize(); + // 获取CPU使用情况(需要更多代码) + + // 获取线程信息 + int threadCount = threadMXBean.getThreadCount(); + int daemonThreadCount = threadMXBean.getDaemonThreadCount(); + return SUCCESS; + } + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java new file mode 100644 index 0000000..852b037 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataDTO.java @@ -0,0 +1,36 @@ +package com.casic.missiles.dto.alarm; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class AlarmDataDTO { + + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + private Integer deviceType; + + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + @ApiModelProperty(value = "报警类别", dataType = "Integer") + private Integer alarmCategory; + + @ApiModelProperty(value = "报警开始时间", dataType = "String") + private String beginTime; + + @ApiModelProperty(value = "报警结束时间", dataType = "String") + private String endTime; + + @ApiModelProperty(value = "ids列表(导出用)", dataType = "String") + private List ids; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java new file mode 100644 index 0000000..8f0c322 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/alarm/AlarmDataListVO.java @@ -0,0 +1,130 @@ +package com.casic.missiles.dto.alarm; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.casic.missiles.annotation.DictCodeField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import static com.casic.missiles.enums.DictCodeEnum.ALARM_CATEGORY; +import static com.casic.missiles.enums.DictCodeEnum.ALARM_TYPE; + +/** + * @author cz + * @date 2024/5/6 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +public class AlarmDataListVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @TableId("id") + private Long id; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组id", dataType = "Long") + @TableField(exist = false) + private Long groupId; + + /** + * 分组名称 + */ + @ApiModelProperty(value = "分组名称", dataType = "String") + @ExcelProperty(value = "分组名称", order = 1) + @TableField(exist = false) + private String groupName; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + @ExcelProperty(value = "设备编号", order = 2) + private String devcode; + + /** + * 报警类型 + */ + @TableField("alarm_type") + @DictCodeField(message = "报警类型不合法", cacheName = ALARM_TYPE) + private Integer alarmType; + + @ApiModelProperty(value = "报警类型", dataType = "String") + @ExcelProperty(value = "报警类型", order = 3) + @TableField(exist = false) + private String alarmTypeName; + + + /** + * 报警类型 + */ + @TableField("alarm_category") + @DictCodeField(message = "报警类别不合法", cacheName = ALARM_CATEGORY) + private Integer alarmCategory; + + @ApiModelProperty(value = "报警类别", dataType = "String") + @ExcelProperty(value = "报警类别", order = 4) + @TableField(exist = false) + private String alarmCategoryName; + + /** + * 报警内容 + */ + @TableField("alarm_content") + @ApiModelProperty(value = "报警内容", dataType = "String") + @ExcelProperty(value = "报警内容", order = 5) + private String alarmContent; + + /** + * 报警时间 + */ + @TableField("alarm_time") + @ApiModelProperty(value = "报警时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "报警时间", order = 6) + private LocalDateTime alarmTime; + + /** + * 报警数值 + */ + @TableField("alarm_value") + @ApiModelProperty(value = "报警数值", dataType = "String") + private String alarmValue; + + /** + * 报警状态 + */ + @TableField("status") + @ApiModelProperty(value = "报警状态", dataType = "Integer") + private Integer status; + + /** + * 创建日期 默认为当前时间 + */ + @TableField("create_time") + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java new file mode 100644 index 0000000..6350671 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskDTO.java @@ -0,0 +1,26 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Value; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskDTO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String upgradeVersionName; + + @ApiModelProperty(value = "任务状态", dataType = "Integer") + private Integer status; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java new file mode 100644 index 0000000..4125dcb --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/upgrade/UpgradeTaskListVO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.dto.upgrade; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class UpgradeTaskListVO { + + @ApiModelProperty(value = "任务名称", dataType = "String") + private String taskName; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String versionDscn; + + @ApiModelProperty(value = "升级包版本号", dataType = "String") + private String status; + + @ApiModelProperty(value = "创建人id", dataType = "Long") + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", dataType = "String") + private String createUserName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + private String createTime; + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java new file mode 100644 index 0000000..dd17617 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.dto.version; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionDTO { + + @ApiModelProperty(value = "产品名称id", dataType = "Long") + private Long productId; + + +} diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java new file mode 100644 index 0000000..2aa5ae7 --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/version/DeviceVersionListVO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.dto.version; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author cz + * @date 2024/5/6 + */ +@Data +public class DeviceVersionListVO { + + @ApiModelProperty(value = "产品名称", dataType = "Long") + private Long productId; + + @ApiModelProperty(value = "产品名称", dataType = "String") + private String productName; + + @ApiModelProperty(value = "升级包名称", dataType = "String") + private String versionName; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String version; + + @ApiModelProperty(value = "版本号", dataType = "String") + private String dscn; + + @ApiModelProperty(value = "负责人Id", dataType = "String") + private Long owner; + + @ApiModelProperty(value = "负责人", dataType = "String") + private String ownerName; + + @ApiModelProperty(value = "创建时间", dataType = "String") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private String createTime; + +} 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 92465e5..131b927 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 @@ -10,8 +10,9 @@ public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { HANDLE_FAILED(500, "操作失败"), - GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"); - + PARAMS_ILLEGALITY(2021, "参数不合法"), + GROUP_BIND_DEVICE(2023, "删除失败,设备组绑定的有设备"), + VERSION_BIND_TASK(2024, "删除失败,升级包绑定的有任务"); private Integer code; private String message; diff --git a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java index da221ae..7647466 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/enums/DictCodeEnum.java @@ -65,5 +65,9 @@ */ String ALARM_TYPE = "alarmType"; + /** + * 报警类别 + */ + String ALARM_CATEGORY = "alarmCategory"; } diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java index 06ee5d0..2f28b39 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/AlarmData.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.time.LocalDateTime; + import lombok.Getter; import lombok.Setter; @@ -27,7 +29,7 @@ /** * 编号 */ - @TableId("id") + @TableId("id") private Long id; /** @@ -37,6 +39,13 @@ private Integer alarmType; /** + * 报警类别 + */ + @TableField("alarm_category") + private Integer alarmCategory; + + + /** * 报警内容 */ @TableField("alarm_content") diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java index 75ac62b..6f33b9d 100644 --- a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java +++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceVersion.java @@ -43,6 +43,13 @@ private String versionFile; /** + * 升级包文件 + */ + @TableField("version_name") + private String versionName; + + + /** * 版本号 */ @TableField("version") @@ -58,7 +65,7 @@ * 升级包描述 */ @TableField("dscn") - private String dscn; + private String descn; /** * 创建日期 默认为当前时间 diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java index d5df02e..7146225 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IAlarmDataService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; import com.casic.missiles.model.AlarmData; +import java.util.List; + /** *

* 报警数据 服务类 @@ -13,4 +20,8 @@ */ public interface IAlarmDataService extends IService { + + Page listPage(Page page, AlarmDataDTO alarmDataDTO, DataScope dataScope)throws Exception; + + ReturnDTO deleteAlarmData(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java index 3276588..7b36b61 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceUpgradeTaskService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; import com.casic.missiles.model.DeviceUpgradeTask; +import java.util.List; + /** *

* 设备升级任务 服务类 @@ -13,4 +20,10 @@ */ public interface IDeviceUpgradeTaskService extends IService { + + Page listPage(Page page, UpgradeTaskDTO upgradeTaskDTO, DataScope dataScope)throws Exception; + + ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceVersion); + + ReturnDTO deleteUpgradeTask(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java index 278cf3a..dbb7edf 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceVersionService.java @@ -1,8 +1,15 @@ package com.casic.missiles.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; import com.casic.missiles.model.DeviceVersion; +import java.util.List; + /** *

* 设备版本 服务类 @@ -13,6 +20,12 @@ */ public interface IDeviceVersionService extends IService { - void ListPage(); + Page listPage(Page page, DeviceVersionDTO deviceVersionDTO) throws Exception; + + ReturnDTO addDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion); + + ReturnDTO deleteDeviceVersion(List ids); } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java deleted file mode 100644 index 586dee8..0000000 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmConfigServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.service.impl; - -import com.casic.missiles.mapper.AlarmConfigMapper; -import com.casic.missiles.model.AlarmConfig; -import com.casic.missiles.service.IAlarmConfigService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 报警配置 用于报警数据的生成 服务实现类 - *

- * - * @author cz - * @since 2023-11-20 - */ -@Service -public class AlarmConfigServiceImpl extends ServiceImpl implements IAlarmConfigService { - -} diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java index 43dc9ce..f413734 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/AlarmDataServiceImpl.java @@ -1,11 +1,24 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.AlarmDataMapper; import com.casic.missiles.model.AlarmData; import com.casic.missiles.service.IAlarmDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 报警数据 服务实现类 @@ -17,4 +30,26 @@ @Service public class AlarmDataServiceImpl extends ServiceImpl implements IAlarmDataService { + @Override + public Page listPage(Page page, AlarmDataDTO request, DataScope dataScope) throws Exception { + //防止出现空结构,sql语句判别失效 + if (CollectionUtils.isEmpty(request.getIds())) { + request.setIds(null); + } + List alarmDataList = this.baseMapper.listPage(page, request, dataScope); + for (AlarmDataListVO alarmData : alarmDataList) { + DictCodeUtils.convertDictCodeToName(alarmData); + } + page.setRecords(alarmDataList); + return page; + } + + @Override + public ReturnDTO deleteAlarmData(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java index e18991d..dd5f7fc 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceUpgradeTaskServiceImpl.java @@ -1,11 +1,26 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.service.IDeviceUpgradeTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 设备升级任务 服务实现类 @@ -17,4 +32,34 @@ @Service public class DeviceUpgradeTaskServiceImpl extends ServiceImpl implements IDeviceUpgradeTaskService { + @Override + public Page listPage(Page page, UpgradeTaskDTO request, DataScope dataScope)throws Exception { + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (UpgradeTaskListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + } + page.setRecords(deviceVersionListVOList); + return page; + } + + @Override + public ReturnDTO addUpgradeTask(DeviceUpgradeTask deviceUpgradeTask) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceUpgradeTask.setCreateUserId(shiroUser.getId()); + deviceUpgradeTask.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceUpgradeTask) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteUpgradeTask(List ids) { + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java index 7c2b62d..6c0ffbb 100644 --- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java +++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceVersionServiceImpl.java @@ -1,11 +1,37 @@ package com.casic.missiles.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.DeviceUpgradeTaskMapper; import com.casic.missiles.mapper.DeviceVersionMapper; +import com.casic.missiles.model.DeviceUpgradeTask; import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.ProductInfo; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.IDeviceVersionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.util.DictCodeUtils; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 设备版本 服务实现类 @@ -15,12 +41,66 @@ * @since 2023-11-20 */ @Service +@RequiredArgsConstructor public class DeviceVersionServiceImpl extends ServiceImpl implements IDeviceVersionService { + private final DeviceUpgradeTaskMapper deviceUpgradeTaskMapper; + private final AbstractPermissionContext iCommonPermissionService; @Override - public void ListPage() { + public Page listPage(Page page, DeviceVersionDTO request) throws Exception { + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + List userList=iCommonPermissionService.getUserService().list(null); + Map userMap=userList.stream().collect(Collectors.toMap(e->e.getId(), e->e.getName())); + //防止出现空结构,sql语句判别失效 + List deviceVersionListVOList = this.baseMapper.listPage(page, request, dataScope); + for (DeviceVersionListVO deviceVersionListVO : deviceVersionListVOList) { + DictCodeUtils.convertDictCodeToName(deviceVersionListVO); + if(ObjectUtils.isNotEmpty(deviceVersionListVO.getOwner())){ + deviceVersionListVO.setOwnerName(userMap.get(deviceVersionListVO.getOwner())); + } + } + page.setRecords(deviceVersionListVOList); + return page; + } + @Override + public ReturnDTO addDeviceVersion(DeviceVersion deviceVersion) { + AuthUser shiroUser = ShiroKit.getUser(); + deviceVersion.setCreateUserId(shiroUser.getId()); + deviceVersion.setCreateUserName(shiroUser.getName()); + if (this.baseMapper.insert(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO updateDeviceVersion(DeviceVersion deviceVersion) { + if (ObjectUtils.isEmpty(deviceVersion.getId())) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + if (this.baseMapper.updateById(deviceVersion) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO deleteDeviceVersion(List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new BusinessException(BusinessExceptionEnum.PARAMS_ILLEGALITY); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("version_id", ids); + List existUpgradeTask = deviceUpgradeTaskMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(existUpgradeTask)) { + throw new BusinessException(BusinessExceptionEnum.VERSION_BIND_TASK); + } + if (this.baseMapper.deleteBatchIds(ids) > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java index d46304f..49d11cb 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/SensorhubWebApplication.java @@ -1,6 +1,5 @@ package com.casic.missiles; -import com.alibaba.druid.pool.DruidAbstractDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.casic.missiles.netty.SensorhubServer; import lombok.extern.slf4j.Slf4j; @@ -9,7 +8,6 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java index e881e7b..bf09f0f 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/AlarmDataController.java @@ -1,9 +1,35 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.data.DeviceDataListRequest; +import com.casic.missiles.dto.data.DeviceDataListVO; +import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.AlarmData; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IAlarmDataService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** *

* 报警数据 前端控制器 @@ -15,6 +41,44 @@ @RestController @Api(tags = "报警数据管理模块") @RequestMapping("/alarm/data") -public class AlarmDataController { +@RequiredArgsConstructor +public class AlarmDataController extends ExportController { + + private final IAlarmDataService alarmDataService; + private final AbstractPermissionContext iCommonPermissionService; + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated AlarmDataDTO alarmDataDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(alarmDataService.listPage(page, alarmDataDTO, dataScope))); + } + + @ApiOperation("删除(支持批删、单删)") + @PostMapping("/delete") + public ReturnDTO deleteAlarmData(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return alarmDataService.deleteAlarmData(idsDTO.getIds()); + } + + @ApiOperation("导出") + @PostMapping("/list-export") + public void export(@RequestBody @Validated AlarmDataDTO request) throws Exception { + List list; + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + list = alarmDataService.listPage(page, request, dataScope).getRecords(); + super.exportExcel(AlarmDataListVO.class, list, ExportEnum.DEVICE_DATA_EXPORT.getSheetName()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java index 7f1c934..986fcdc 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceUpgradeTaskController.java @@ -1,6 +1,29 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.upgrade.UpgradeTaskDTO; +import com.casic.missiles.dto.upgrade.UpgradeTaskListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceUpgradeTask; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +38,41 @@ @RestController @Api(tags = "设备升级任务管理") @RequestMapping("/device/upgrade/task") -public class DeviceUpgradeTaskController { +@RequiredArgsConstructor +public class DeviceUpgradeTaskController extends ExportController { + + private final IDeviceUpgradeTaskService upgradeTaskService; + private final AbstractPermissionContext iCommonPermissionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated UpgradeTaskDTO upgradeTaskDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + DataScope dataScope = iCommonPermissionService.getAuthService().getLoginUserDataScope(); + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(upgradeTaskService.listPage(page, upgradeTaskDTO, dataScope))); + } + + @ApiOperation("创建升级任务") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceUpgradeTask deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.addUpgradeTask(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return upgradeTaskService.deleteUpgradeTask(idsDTO.getIds()); + } + } diff --git a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java index 900d131..5167766 100644 --- a/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java +++ b/casic-iot-web/src/main/java/com/casic/missiles/controller/DeviceVersionController.java @@ -1,12 +1,37 @@ package com.casic.missiles.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.alarm.AlarmDataDTO; +import com.casic.missiles.dto.alarm.AlarmDataListVO; +import com.casic.missiles.dto.version.DeviceVersionDTO; +import com.casic.missiles.dto.version.DeviceVersionListVO; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.DeviceVersion; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.service.IDeviceUpgradeTaskService; +import com.casic.missiles.service.IDeviceVersionService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** *

- * 设备版本 前端控制器 + * 设备版本 即升级包进行 前端控制器 *

* * @author cz @@ -15,6 +40,49 @@ @RestController @Api(tags = "设备版本管理") @RequestMapping("/device/version") -public class DeviceVersionController { +@RequiredArgsConstructor +public class DeviceVersionController extends ExportController { + + + private final IDeviceVersionService deviceVersionService; + + + @ApiOperation("分页列表") + @PostMapping("/list-page") + public ReturnDTO> listPage(@RequestBody @Validated DeviceVersionDTO deviceVersionDTO, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(deviceVersionService.listPage(page, deviceVersionDTO))); + } + + @ApiOperation("更新") + @PostMapping("/update") + public ReturnDTO update(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.updateDeviceVersion(deviceVersion); + } + + + @ApiOperation("新增") + @PostMapping("/add") + public ReturnDTO add(@RequestBody @Validated DeviceVersion deviceVersion, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.addDeviceVersion(deviceVersion); + } + + @ApiOperation("删除") + @PostMapping("/delete") + public ReturnDTO delete(@RequestBody IdsDTO idsDTO, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return deviceVersionService.deleteDeviceVersion(idsDTO.getIds()); + } } diff --git a/pom.xml b/pom.xml index 73addfd..3ad2470 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-iot-model casic-iot-dao casic-iot-service + casic-iot-job @@ -30,6 +31,7 @@ 1.0.0-SNAPSHOT 2.0.0.alpha + 2.3.0 2.0.0.alpha 2.0.0.alpha @@ -45,6 +47,9 @@ 2.9.2 2.0.0.alpha + 2.5.4 + 2.5.6 + 2.0.0.alpha diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index 26b0b61..8e72368 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -1,7 +1,7 @@ package com.casic.missiles.controller; import com.alibaba.fastjson.JSON; -import com.casic.missiles.pojo.ResponseData; +import com.casic.missiles.dto.ResponseData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java index fccfa7c..014140a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/SensorhubDecoder.java @@ -68,6 +68,7 @@ } } + // public void destroy(ByteBuf byteBuf) { // if (byteBuf != null && byteBuf.refCnt() > 0) { // byteBuf.release(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index 1dfbdc9..6e6b507 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -95,6 +95,7 @@ .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) .fixedStoreMap(parseFixedDataMap) .build()); + //TODO sortList 需要进行seq排序, //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { ByteBuf currentByteBuf = expiringByteBuf.getByteBuf(); @@ -128,6 +129,7 @@ } + /** * 存储当前不需要直接进行的帧结构及相应的帧结构信息 * diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f65e4eb..4d18f63 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,7 +43,7 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 -// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { Integer originPositionByte = abstractFieldConfig.getOriginPositionByte(); abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java index aea21e8..0b5f79f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/FieldResolver.java @@ -37,7 +37,6 @@ Boolean networkOrder = ObjectUtils.isNotEmpty(fieldConfig.getNetworkOrder()) && fieldConfig.getNetworkOrder() == 1 ? true : false; if (fieldConfig.getOffsetUnit().equals("bit")) { fieldValue = BitFieldParser.doParseBitField(byteBuf, fieldConfig, fieldRuleConfigMap,networkOrder); - } else { ByteBuf fieldBytes = byteBuf.slice(originPosition, fieldConfig.getOffsetLength()); fieldBytes.resetReaderIndex(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java index 5cefd90..b5331c5 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/MyUtils.java @@ -7,11 +7,11 @@ int i32Count = len / 4; int i32Index = 0; for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { - RetInt[i32Increase] = (long)( - Mybytes[3 + i32Index] <<24 - | Mybytes[2 + i32Index] << 16 - | Mybytes[1 + i32Index] << 8 - | Mybytes[0 + i32Index] + RetInt[i32Increase] = (long) ( + Mybytes[3 + i32Index] << 24 + | Mybytes[2 + i32Index] << 16 + | Mybytes[1 + i32Index] << 8 + | Mybytes[0 + i32Index] ); i32Index += 4; } @@ -32,10 +32,68 @@ for (int i32Index = 0; i32Index < len; i32Index++) { RetBytes[0 + i32Index * 4] = (byte) (MyInts[i32Index]); RetBytes[1 + i32Index * 4] = (byte) (MyInts[i32Index] >> 8); - RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16) ; + RetBytes[2 + i32Index * 4] = (byte) (MyInts[i32Index] >> 16); RetBytes[3 + i32Index * 4] = (byte) (MyInts[i32Index] >> 24); } return RetBytes; } + + private static long UINT32_MAX = 0xFFFFFFFFL; + + private static long BYTE_1 = 0xFFL; + + private static long BYTE_2 = 0xFF00L; + + private static long BYTE_3 = 0xFF0000L; + + private static long BYTE_4 = 0xFF000000L; + + private static long delta = 0x9E3779B9L; + + private long k0, k1, k2, k3; + + private int loops = 32; + + public static byte[] long_to_bytes(long[] MyInts, int len) { + byte[] RetBytes = new byte[len * 4]; + for (int i32Index = 0; i32Index < len; i32Index++) { + RetBytes[0 + i32Index * 4] = (byte) ((MyInts[i32Index]) & BYTE_1); + RetBytes[1 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_2) >> 8); + RetBytes[2 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_3) >> 16); + RetBytes[3 + i32Index * 4] = (byte) ((MyInts[i32Index] & BYTE_4) >> 24); + } + return RetBytes; + } + + private static long toUInt32(long n) { + + return n & UINT32_MAX; + + } + + /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 + *@parambs 需要转换的字节 + *@return返回 long,高32位为0,低32位视为Unsigned Integer*/ + + public static long[] bytes_to_uint32(byte[] Mybytes, int len) { + + long[] RetInt = new long[len / 4]; + int i32Count = len / 4; + int i32Index = 0; + for (int i32Increase = 0; i32Increase < i32Count; i32Increase++) { + RetInt[i32Increase] = (long) ((Mybytes[0 + i32Index] << 24) & BYTE_4) + + + ((Mybytes[1 + i32Index] << 16) & BYTE_3) + + + ((Mybytes[2 + i32Index] << 8) & BYTE_2) + + + (Mybytes[3 + i32Index] & BYTE_1); + i32Index += 4; + } + return RetInt; + + } + + } \ No newline at end of file diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java index e763316..9f89e78 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Tea.java @@ -350,7 +350,6 @@ byte hd = (byte) ((n >> 32) & BYTE_1); return new byte[]{ha, hb, hc, hd, a, b, c, d}; - } /*** 将4个byte转为 Unsigned Integer 32,以 long 形式返回 @@ -401,20 +400,6 @@ TEA t = new TEA(); - byte[] pnt = new byte[]{ - - 0x00, 0x00, 0x00, 0x20, - - 0x00, 0x00, 0x00, 0x10 - - }; - - byte[] k = new byte[]{ - 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01 - }; byte[] TEA_key = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; t.setKey(TEA_key); String info = "6000002000013310000050000300010160000009000102c502d1e200040000000060000511000200ec600005130002ffa56000051600020002"; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java index 7968952..75ef727 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/safe/impl/Teas.java @@ -19,14 +19,14 @@ public static byte[] MyTea_Encrypt(byte[] MyTeaContent, int ByteLen, byte[] MyTeakey) { System.out.println("加密函数:"); - long[] value = MyUtils.byteToInt(MyTeaContent, MyTeaContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaContent, MyTeaContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { encrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } /** @@ -38,14 +38,14 @@ */ public static byte[] MyTea_Decrypt(byte[] MyTeaSecContent, int ByteLen, byte[] MyTeakey) { System.out.println("解密函数:"); - long[] value = MyUtils.byteToInt(MyTeaSecContent, MyTeaSecContent.length); - long[] key = MyUtils.byteToInt(MyTeakey, MyTeakey.length); + long[] value = MyUtils.bytes_to_uint32(MyTeaSecContent, MyTeaSecContent.length); + long[] key = MyUtils.bytes_to_uint32(MyTeakey, MyTeakey.length); int num = ByteLen / 8; for (int i = 0; i < num; i++) { decrypt(value, i * 2, key); } int len = ByteLen / 4; - return MyUtils.IntToBytes(value, len); + return MyUtils.long_to_bytes(value, len); } public static void main(String[] args) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java index 4813901..13ad2ae 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/DataSubscribeProvider.java @@ -7,6 +7,6 @@ public interface DataSubscribeProvider { - void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig); + void publishDataSubscribe(List> bizDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java index 78f62ff..c8a1c15 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/FunctionCallback.java @@ -29,7 +29,7 @@ @Override - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 95494eb..061fb13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -34,7 +34,7 @@ @Override @Transactional - public void publishDataSubscribe(List> bizDataMapList, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMapList) { if (CollectionUtils.isEmpty(bizDataMapList)) { return; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java index 90a93d8..7d013ec 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/MiddlewareSubscribe.java @@ -15,7 +15,7 @@ public class MiddlewareSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java index 2b2a134..2f783fd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/NoSqlSubscribe.java @@ -11,7 +11,7 @@ public class NoSqlSubscribe implements DataSubscribeProvider { @Override - public void publishDataSubscribe(List> bizDataMap, SubscribeDetailConfig subscribeDetailConfig) { + public void publishDataSubscribe(List> bizDataMap) { } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java index 92ebb93..09d5e8e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java @@ -25,7 +25,6 @@ public class ProcessorInstanceProvider { private final DatagramEventConfig processorInstance; - private final List subscribeConfigs; private static Boolean textPlain = false; public ProcessorInstanceProvider(Long ruleId) { @@ -34,7 +33,6 @@ datagramEventRegistry.getDatagramEventList(ruleId); processorInstance = this.getProcessorInstance(datagramEventConfigList); SubscribeRegistry subscribeRegistry = SpringContextUtil.getBean(SubscribeRegistry.class); - subscribeConfigs = subscribeRegistry.getSubscribeRegistry(ruleId); } public DatagramEventConfig getProcessorInstance() { @@ -148,7 +146,7 @@ public void storeData(List> bizDataMap) { SensorhubProperties sensorhubProperties = SpringContextUtil.getBean(SensorhubProperties.class); DataSubscribeProvider subscribeProvider = SpringContextUtil.getBean(sensorhubProperties.getBean()); - subscribeProvider.publishDataSubscribe(bizDataMap, null); + subscribeProvider.publishDataSubscribe(bizDataMap); } // DataSubscribeProvider dataSubscribeProvider = SpringContextUtil.getBean(processorInstance.getSubscribeBean()); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java index 51de533..224437f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/DefaultReplyCommand.java @@ -51,6 +51,7 @@ return null; } //为回复配置 + //TODO 配置特定设备升级 Map bizDataMap = beforeRuleReply(parseResult); //规则指定回复配置 defaultRuleReply(sendRuleConfig, replyBytes, bizDataMap, fieldConfigsMap, parseResult.getRuleConfigFactory(), fieldRuleConfigMap); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java new file mode 100644 index 0000000..b48702c --- /dev/null +++ b/sensorhub-support/src/main/java/com/casic/missiles/dto/ResponseData.java @@ -0,0 +1,18 @@ +package com.casic.missiles.dto; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Integer code; + private String message; + private T data; +} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java index 128b09d..7368988 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/mapper/CommandEventMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; @Mapper +@Deprecated public interface CommandEventMapper extends BaseMapper { } diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java index f45ddd7..5901442 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/CommandEventConfig.java @@ -6,6 +6,7 @@ import java.util.Date; @Data +@Deprecated @TableName("command_event_config") public class CommandEventConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java deleted file mode 100644 index 5b0bf41..0000000 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/ResponseData.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles.pojo; - -import lombok.Data; - -/** - * @author cz - * @date 2022-8-12 - */ -@Data -public class ResponseData { - public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; - public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; - public static final Integer DEFAULT_SUCCESS_CODE = 200; - public static final Integer DEFAULT_ERROR_CODE = 500; - private Integer code; - private String message; - private T data; -} \ No newline at end of file diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java index bb16cd9..45822b4 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeConfig.java @@ -12,6 +12,7 @@ */ @TableName("subscribe_config") @Data +@Deprecated public class SubscribeConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java index 5403d8d..dc358fb 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/pojo/SubscribeDetailConfig.java @@ -7,6 +7,7 @@ @Data @TableName("subscribe_detail_config") +@Deprecated public class SubscribeDetailConfig { private Long id; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java b/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java index 60ce075..28a6186 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/registry/SubscribeRegistry.java @@ -4,6 +4,7 @@ import java.util.List; +@Deprecated public interface SubscribeRegistry { diff --git a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/CommandEventRegistryImpl.java b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/CommandEventRegistryImpl.java index b0e8304..fdca97d 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/CommandEventRegistryImpl.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/CommandEventRegistryImpl.java @@ -12,6 +12,7 @@ import java.util.Optional; @DS("sensorhub") +@Deprecated public class CommandEventRegistryImpl extends ServiceImpl implements CommandEventRegistry { @Override diff --git a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/DatagramEventRegistryImpl.java b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/DatagramEventRegistryImpl.java index d2d1748..0d1ce16 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/DatagramEventRegistryImpl.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/DatagramEventRegistryImpl.java @@ -16,7 +16,6 @@ @DS("sensorhub") public class DatagramEventRegistryImpl extends ServiceImpl implements DatagramEventRegistry { - @Override @Cacheable(value = "datagramEventConfigCache", key = "'datagram'+#ruleId", unless = "#result == null") public List getDatagramEventList(Long ruleId) { diff --git a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/SubscribeRegistryImpl.java b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/SubscribeRegistryImpl.java index 77017dc..e26c8a2 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/SubscribeRegistryImpl.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/SubscribeRegistryImpl.java @@ -20,6 +20,7 @@ @Service @DS("sensorhub") +@Deprecated @RequiredArgsConstructor public class SubscribeRegistryImpl extends ServiceImpl implements SubscribeRegistry {