diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java index c5fa1f5..c8ea1ed 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java @@ -10,13 +10,14 @@ /** * @ClassName AlarmStrategyContext - * @Description 上下文 + * @Description 告警上下文 执行策略验证 * @Author lwh * @Date 2021/3/5 15:46 * @Version 1.0 */ public class AlarmStrategyContext { + private List strategies = new ArrayList<>(); /** @@ -38,6 +39,7 @@ * @param strategy */ public void addStrategy(BaseAlarmStrategy strategy) { + strategy.setContext(this); strategies.add(strategy); } } diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java index c5fa1f5..c8ea1ed 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java @@ -10,13 +10,14 @@ /** * @ClassName AlarmStrategyContext - * @Description 上下文 + * @Description 告警上下文 执行策略验证 * @Author lwh * @Date 2021/3/5 15:46 * @Version 1.0 */ public class AlarmStrategyContext { + private List strategies = new ArrayList<>(); /** @@ -38,6 +39,7 @@ * @param strategy */ public void addStrategy(BaseAlarmStrategy strategy) { + strategy.setContext(this); strategies.add(strategy); } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java index 6903de7..2682c26 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java @@ -1,25 +1,32 @@ package com.casic.missiles.modular.system.alarm.strategy; import com.casic.missiles.core.base.response.ResponseData; -import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; import com.casic.missiles.modular.system.alarm.dto.PostionDTO; import com.casic.missiles.modular.system.alarm.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; + +import java.util.HashMap; +import java.util.Map; /** * @ClassName TrajectoryTimeAlarmStrategy - * @Description 车辆轨迹巡查 作业次数巡查 + * @Description 车辆轨迹巡查 作业次数巡查(时间间隔出现在线段中某个点附近的次数,同时根据点位) * @Author lwh * @Date 2021/3/5 16:37 * @Version 1.0 */ public class TrajectoryTimeAlarmStrategy extends BaseAlarmStrategy { + + + /** * @param data 校验数据 * @return */ @Override public ResponseData processHandler(AlarmProcessDTO data) { + // return null; } } diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java index c5fa1f5..c8ea1ed 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java @@ -10,13 +10,14 @@ /** * @ClassName AlarmStrategyContext - * @Description 上下文 + * @Description 告警上下文 执行策略验证 * @Author lwh * @Date 2021/3/5 15:46 * @Version 1.0 */ public class AlarmStrategyContext { + private List strategies = new ArrayList<>(); /** @@ -38,6 +39,7 @@ * @param strategy */ public void addStrategy(BaseAlarmStrategy strategy) { + strategy.setContext(this); strategies.add(strategy); } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java index 6903de7..2682c26 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java @@ -1,25 +1,32 @@ package com.casic.missiles.modular.system.alarm.strategy; import com.casic.missiles.core.base.response.ResponseData; -import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; import com.casic.missiles.modular.system.alarm.dto.PostionDTO; import com.casic.missiles.modular.system.alarm.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; + +import java.util.HashMap; +import java.util.Map; /** * @ClassName TrajectoryTimeAlarmStrategy - * @Description 车辆轨迹巡查 作业次数巡查 + * @Description 车辆轨迹巡查 作业次数巡查(时间间隔出现在线段中某个点附近的次数,同时根据点位) * @Author lwh * @Date 2021/3/5 16:37 * @Version 1.0 */ public class TrajectoryTimeAlarmStrategy extends BaseAlarmStrategy { + + + /** * @param data 校验数据 * @return */ @Override public ResponseData processHandler(AlarmProcessDTO data) { + // return null; } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java index 7d56b9f..3fd22c8 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java @@ -2,13 +2,16 @@ import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; +import com.casic.missiles.modular.system.alarm.strategy.AlarmStrategyContext; /** * 基础思路:提供基础校验接口 分状态实现校验 * 路线报警基础报警handler + * * @author lwh */ public abstract class BaseAlarmStrategy { + private AlarmStrategyContext context; /** * 根据告警规则处理告警数据 @@ -17,4 +20,12 @@ * @return 处理结果 */ public abstract ResponseData processHandler(AlarmProcessDTO data); + + public AlarmStrategyContext getContext() { + return context; + } + + public void setContext(AlarmStrategyContext context) { + this.context = context; + } } diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java index c5fa1f5..c8ea1ed 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java @@ -10,13 +10,14 @@ /** * @ClassName AlarmStrategyContext - * @Description 上下文 + * @Description 告警上下文 执行策略验证 * @Author lwh * @Date 2021/3/5 15:46 * @Version 1.0 */ public class AlarmStrategyContext { + private List strategies = new ArrayList<>(); /** @@ -38,6 +39,7 @@ * @param strategy */ public void addStrategy(BaseAlarmStrategy strategy) { + strategy.setContext(this); strategies.add(strategy); } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java index 6903de7..2682c26 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java @@ -1,25 +1,32 @@ package com.casic.missiles.modular.system.alarm.strategy; import com.casic.missiles.core.base.response.ResponseData; -import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; import com.casic.missiles.modular.system.alarm.dto.PostionDTO; import com.casic.missiles.modular.system.alarm.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; + +import java.util.HashMap; +import java.util.Map; /** * @ClassName TrajectoryTimeAlarmStrategy - * @Description 车辆轨迹巡查 作业次数巡查 + * @Description 车辆轨迹巡查 作业次数巡查(时间间隔出现在线段中某个点附近的次数,同时根据点位) * @Author lwh * @Date 2021/3/5 16:37 * @Version 1.0 */ public class TrajectoryTimeAlarmStrategy extends BaseAlarmStrategy { + + + /** * @param data 校验数据 * @return */ @Override public ResponseData processHandler(AlarmProcessDTO data) { + // return null; } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java index 7d56b9f..3fd22c8 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java @@ -2,13 +2,16 @@ import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; +import com.casic.missiles.modular.system.alarm.strategy.AlarmStrategyContext; /** * 基础思路:提供基础校验接口 分状态实现校验 * 路线报警基础报警handler + * * @author lwh */ public abstract class BaseAlarmStrategy { + private AlarmStrategyContext context; /** * 根据告警规则处理告警数据 @@ -17,4 +20,12 @@ * @return 处理结果 */ public abstract ResponseData processHandler(AlarmProcessDTO data); + + public AlarmStrategyContext getContext() { + return context; + } + + public void setContext(AlarmStrategyContext context) { + this.context = context; + } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java new file mode 100644 index 0000000..528593c --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.alarm.strategy.config; + +/** + * @ClassName AlarmStrategyConfig + * @Description 环卫策略配置项 + * @Author lenovo + * @Date 2021/4/23 10:46 + * @Version 1.0 + */ +public class AlarmStrategyConfig { + /** + *  采集点权重 例如:2 则为每两次判定一次 必须为正整数 + */ + private String alarmWeight; + + /** + * 作业占比阀值 行驶路段数占比最小值(及满足多少占比可作为一次) + */ + private String proportion; +} diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java index c5fa1f5..c8ea1ed 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java @@ -10,13 +10,14 @@ /** * @ClassName AlarmStrategyContext - * @Description 上下文 + * @Description 告警上下文 执行策略验证 * @Author lwh * @Date 2021/3/5 15:46 * @Version 1.0 */ public class AlarmStrategyContext { + private List strategies = new ArrayList<>(); /** @@ -38,6 +39,7 @@ * @param strategy */ public void addStrategy(BaseAlarmStrategy strategy) { + strategy.setContext(this); strategies.add(strategy); } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java index 6903de7..2682c26 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java @@ -1,25 +1,32 @@ package com.casic.missiles.modular.system.alarm.strategy; import com.casic.missiles.core.base.response.ResponseData; -import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; import com.casic.missiles.modular.system.alarm.dto.PostionDTO; import com.casic.missiles.modular.system.alarm.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; + +import java.util.HashMap; +import java.util.Map; /** * @ClassName TrajectoryTimeAlarmStrategy - * @Description 车辆轨迹巡查 作业次数巡查 + * @Description 车辆轨迹巡查 作业次数巡查(时间间隔出现在线段中某个点附近的次数,同时根据点位) * @Author lwh * @Date 2021/3/5 16:37 * @Version 1.0 */ public class TrajectoryTimeAlarmStrategy extends BaseAlarmStrategy { + + + /** * @param data 校验数据 * @return */ @Override public ResponseData processHandler(AlarmProcessDTO data) { + // return null; } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java index 7d56b9f..3fd22c8 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java @@ -2,13 +2,16 @@ import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; +import com.casic.missiles.modular.system.alarm.strategy.AlarmStrategyContext; /** * 基础思路:提供基础校验接口 分状态实现校验 * 路线报警基础报警handler + * * @author lwh */ public abstract class BaseAlarmStrategy { + private AlarmStrategyContext context; /** * 根据告警规则处理告警数据 @@ -17,4 +20,12 @@ * @return 处理结果 */ public abstract ResponseData processHandler(AlarmProcessDTO data); + + public AlarmStrategyContext getContext() { + return context; + } + + public void setContext(AlarmStrategyContext context) { + this.context = context; + } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java new file mode 100644 index 0000000..528593c --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.alarm.strategy.config; + +/** + * @ClassName AlarmStrategyConfig + * @Description 环卫策略配置项 + * @Author lenovo + * @Date 2021/4/23 10:46 + * @Version 1.0 + */ +public class AlarmStrategyConfig { + /** + *  采集点权重 例如:2 则为每两次判定一次 必须为正整数 + */ + private String alarmWeight; + + /** + * 作业占比阀值 行驶路段数占比最小值(及满足多少占比可作为一次) + */ + private String proportion; +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java new file mode 100644 index 0000000..8359d1b --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.system.alarm.util; + +import java.util.List; + +/** + * 点位信息判定工具类 + */ +public class GPSCalculatorUtil { + + private static double EARTH_RADIUS = 6378137; + + /** + * 计算线段p1p2的距离 + * + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToPoint(Point p1, Point p2) { + if (p1.equals(p2)) { + return 0.0; + } + if ((Math.abs(p1.getLng() - p2.getLng()) < 0.0000000001) && (Math.abs(p1.getLat() - p2.getLat()) < 0.0000000001)) { + return 0.0; + } + double c = Math.sin(p1.getLat()) * Math.sin(p2.getLat()) + Math.cos(p1.getLat()) * Math.cos(p2.getLat()) * Math.cos(p1.getLng() - p2.getLng()); + if (Math.abs(c - 1) < 0.0000000001) { + return 0.0; + } + double distance = EARTH_RADIUS * Math.acos(c) * Math.PI / 180; + + return distance; + } + + /** + * 计算点p到线段p1p2之间的距离 + * + * @param p + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToLine(Point p, Point p1, Point p2) { + double dist = 0; + double p1p2; + double pp1; + double pp2; + // 线段的长度 + p1p2 = calDistancePointToPoint(p1, p2); + // (x1,y1)到点的距离 + pp1 = calDistancePointToPoint(p, p1); + // (x2,y2)到点的距离 + pp2 = calDistancePointToPoint(p, p2); + + if (pp2 * pp2 >= p1p2 * p1p2 + pp1 * pp1) { + dist = pp1; + return dist; + } + + if (pp1 * pp1 >= p1p2 * p1p2 + pp2 * pp2) { + dist = pp2; + return dist; + } + // 半周长 + double hc = (p1p2 + pp1 + pp2) / 2; + // 海伦公式求面积 + double s = Math.sqrt(hc * (hc - p1p2) * (hc - pp1) * (hc - pp2)); + // 返回点到线的距离(利用三角形面积公式求高) + dist = 2 * s / p1p2; + return dist; + } + + /** + * 计算点是否在矩形内 + * + * @param p + * @param max + * @param min + * @return + */ + public static boolean isPointInRect(Point p, Point max, Point min) { + if (p.getLng() < min.getLng() || p.getLng() > max.getLng() || p.getLat() < min.getLat() || p.getLat() > max.getLat()) { + return false; + } else { + return true; + } + } + + + /** + * 计算点是否在多边形内 + * + * @param p + * @param points + * @return + */ + public static boolean isPointInPolygon(Point p, List points) { + int nvert = points.size(); + int i = 0; + int j = 0; + boolean c = false; + + for (i = 0, j = nvert - 1; i < nvert; j = i++) { + if (((points.get(i).getLat() > p.getLat()) != (points.get(j).getLat() > p.getLat())) && + (p.getLng() < (points.get(j).getLng() - points.get(i).getLng()) * (p.getLat() - points.get(i).getLat()) / (points.get(j).getLat() - points.get(i).getLat()) + points.get(i).getLng())) { + c = !c; + } + } + return c; + } + + public static void main(String[] args) { + Point p1 = new Point("116.626215", "28.249713"); + Point p2 = new Point("116.635054", "28.256459"); + Point p = new Point("116.6306345", "28.253086"); + System.out.println(calDistancePointToLine(p, p1, p2)); + } +} diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java index c5fa1f5..c8ea1ed 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java @@ -10,13 +10,14 @@ /** * @ClassName AlarmStrategyContext - * @Description 上下文 + * @Description 告警上下文 执行策略验证 * @Author lwh * @Date 2021/3/5 15:46 * @Version 1.0 */ public class AlarmStrategyContext { + private List strategies = new ArrayList<>(); /** @@ -38,6 +39,7 @@ * @param strategy */ public void addStrategy(BaseAlarmStrategy strategy) { + strategy.setContext(this); strategies.add(strategy); } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java index 6903de7..2682c26 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java @@ -1,25 +1,32 @@ package com.casic.missiles.modular.system.alarm.strategy; import com.casic.missiles.core.base.response.ResponseData; -import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; import com.casic.missiles.modular.system.alarm.dto.PostionDTO; import com.casic.missiles.modular.system.alarm.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; + +import java.util.HashMap; +import java.util.Map; /** * @ClassName TrajectoryTimeAlarmStrategy - * @Description 车辆轨迹巡查 作业次数巡查 + * @Description 车辆轨迹巡查 作业次数巡查(时间间隔出现在线段中某个点附近的次数,同时根据点位) * @Author lwh * @Date 2021/3/5 16:37 * @Version 1.0 */ public class TrajectoryTimeAlarmStrategy extends BaseAlarmStrategy { + + + /** * @param data 校验数据 * @return */ @Override public ResponseData processHandler(AlarmProcessDTO data) { + // return null; } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java index 7d56b9f..3fd22c8 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java @@ -2,13 +2,16 @@ import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; +import com.casic.missiles.modular.system.alarm.strategy.AlarmStrategyContext; /** * 基础思路:提供基础校验接口 分状态实现校验 * 路线报警基础报警handler + * * @author lwh */ public abstract class BaseAlarmStrategy { + private AlarmStrategyContext context; /** * 根据告警规则处理告警数据 @@ -17,4 +20,12 @@ * @return 处理结果 */ public abstract ResponseData processHandler(AlarmProcessDTO data); + + public AlarmStrategyContext getContext() { + return context; + } + + public void setContext(AlarmStrategyContext context) { + this.context = context; + } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java new file mode 100644 index 0000000..528593c --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.alarm.strategy.config; + +/** + * @ClassName AlarmStrategyConfig + * @Description 环卫策略配置项 + * @Author lenovo + * @Date 2021/4/23 10:46 + * @Version 1.0 + */ +public class AlarmStrategyConfig { + /** + *  采集点权重 例如:2 则为每两次判定一次 必须为正整数 + */ + private String alarmWeight; + + /** + * 作业占比阀值 行驶路段数占比最小值(及满足多少占比可作为一次) + */ + private String proportion; +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java new file mode 100644 index 0000000..8359d1b --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.system.alarm.util; + +import java.util.List; + +/** + * 点位信息判定工具类 + */ +public class GPSCalculatorUtil { + + private static double EARTH_RADIUS = 6378137; + + /** + * 计算线段p1p2的距离 + * + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToPoint(Point p1, Point p2) { + if (p1.equals(p2)) { + return 0.0; + } + if ((Math.abs(p1.getLng() - p2.getLng()) < 0.0000000001) && (Math.abs(p1.getLat() - p2.getLat()) < 0.0000000001)) { + return 0.0; + } + double c = Math.sin(p1.getLat()) * Math.sin(p2.getLat()) + Math.cos(p1.getLat()) * Math.cos(p2.getLat()) * Math.cos(p1.getLng() - p2.getLng()); + if (Math.abs(c - 1) < 0.0000000001) { + return 0.0; + } + double distance = EARTH_RADIUS * Math.acos(c) * Math.PI / 180; + + return distance; + } + + /** + * 计算点p到线段p1p2之间的距离 + * + * @param p + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToLine(Point p, Point p1, Point p2) { + double dist = 0; + double p1p2; + double pp1; + double pp2; + // 线段的长度 + p1p2 = calDistancePointToPoint(p1, p2); + // (x1,y1)到点的距离 + pp1 = calDistancePointToPoint(p, p1); + // (x2,y2)到点的距离 + pp2 = calDistancePointToPoint(p, p2); + + if (pp2 * pp2 >= p1p2 * p1p2 + pp1 * pp1) { + dist = pp1; + return dist; + } + + if (pp1 * pp1 >= p1p2 * p1p2 + pp2 * pp2) { + dist = pp2; + return dist; + } + // 半周长 + double hc = (p1p2 + pp1 + pp2) / 2; + // 海伦公式求面积 + double s = Math.sqrt(hc * (hc - p1p2) * (hc - pp1) * (hc - pp2)); + // 返回点到线的距离(利用三角形面积公式求高) + dist = 2 * s / p1p2; + return dist; + } + + /** + * 计算点是否在矩形内 + * + * @param p + * @param max + * @param min + * @return + */ + public static boolean isPointInRect(Point p, Point max, Point min) { + if (p.getLng() < min.getLng() || p.getLng() > max.getLng() || p.getLat() < min.getLat() || p.getLat() > max.getLat()) { + return false; + } else { + return true; + } + } + + + /** + * 计算点是否在多边形内 + * + * @param p + * @param points + * @return + */ + public static boolean isPointInPolygon(Point p, List points) { + int nvert = points.size(); + int i = 0; + int j = 0; + boolean c = false; + + for (i = 0, j = nvert - 1; i < nvert; j = i++) { + if (((points.get(i).getLat() > p.getLat()) != (points.get(j).getLat() > p.getLat())) && + (p.getLng() < (points.get(j).getLng() - points.get(i).getLng()) * (p.getLat() - points.get(i).getLat()) / (points.get(j).getLat() - points.get(i).getLat()) + points.get(i).getLng())) { + c = !c; + } + } + return c; + } + + public static void main(String[] args) { + Point p1 = new Point("116.626215", "28.249713"); + Point p2 = new Point("116.635054", "28.256459"); + Point p = new Point("116.6306345", "28.253086"); + System.out.println(calDistancePointToLine(p, p1, p2)); + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java new file mode 100644 index 0000000..2e8e47e --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.alarm.util; + +/** + * 点位信息 + */ +public class Point { + private Double lng; + private Double lat; + + public Point(String lng, String lat) { + this.lng = Double.parseDouble(lng); + this.lat = Double.parseDouble(lat); + } + + public Double getLng() { + return lng; + } + + public void setLng(Double lng) { + this.lng = lng; + } + + public Double getLat() { + return lat; + } + + public void setLat(Double lat) { + this.lat = lat; + } +} diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java index c5fa1f5..c8ea1ed 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java @@ -10,13 +10,14 @@ /** * @ClassName AlarmStrategyContext - * @Description 上下文 + * @Description 告警上下文 执行策略验证 * @Author lwh * @Date 2021/3/5 15:46 * @Version 1.0 */ public class AlarmStrategyContext { + private List strategies = new ArrayList<>(); /** @@ -38,6 +39,7 @@ * @param strategy */ public void addStrategy(BaseAlarmStrategy strategy) { + strategy.setContext(this); strategies.add(strategy); } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java index 6903de7..2682c26 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java @@ -1,25 +1,32 @@ package com.casic.missiles.modular.system.alarm.strategy; import com.casic.missiles.core.base.response.ResponseData; -import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; import com.casic.missiles.modular.system.alarm.dto.PostionDTO; import com.casic.missiles.modular.system.alarm.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; + +import java.util.HashMap; +import java.util.Map; /** * @ClassName TrajectoryTimeAlarmStrategy - * @Description 车辆轨迹巡查 作业次数巡查 + * @Description 车辆轨迹巡查 作业次数巡查(时间间隔出现在线段中某个点附近的次数,同时根据点位) * @Author lwh * @Date 2021/3/5 16:37 * @Version 1.0 */ public class TrajectoryTimeAlarmStrategy extends BaseAlarmStrategy { + + + /** * @param data 校验数据 * @return */ @Override public ResponseData processHandler(AlarmProcessDTO data) { + // return null; } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java index 7d56b9f..3fd22c8 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java @@ -2,13 +2,16 @@ import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; +import com.casic.missiles.modular.system.alarm.strategy.AlarmStrategyContext; /** * 基础思路:提供基础校验接口 分状态实现校验 * 路线报警基础报警handler + * * @author lwh */ public abstract class BaseAlarmStrategy { + private AlarmStrategyContext context; /** * 根据告警规则处理告警数据 @@ -17,4 +20,12 @@ * @return 处理结果 */ public abstract ResponseData processHandler(AlarmProcessDTO data); + + public AlarmStrategyContext getContext() { + return context; + } + + public void setContext(AlarmStrategyContext context) { + this.context = context; + } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java new file mode 100644 index 0000000..528593c --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.alarm.strategy.config; + +/** + * @ClassName AlarmStrategyConfig + * @Description 环卫策略配置项 + * @Author lenovo + * @Date 2021/4/23 10:46 + * @Version 1.0 + */ +public class AlarmStrategyConfig { + /** + *  采集点权重 例如:2 则为每两次判定一次 必须为正整数 + */ + private String alarmWeight; + + /** + * 作业占比阀值 行驶路段数占比最小值(及满足多少占比可作为一次) + */ + private String proportion; +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java new file mode 100644 index 0000000..8359d1b --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.system.alarm.util; + +import java.util.List; + +/** + * 点位信息判定工具类 + */ +public class GPSCalculatorUtil { + + private static double EARTH_RADIUS = 6378137; + + /** + * 计算线段p1p2的距离 + * + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToPoint(Point p1, Point p2) { + if (p1.equals(p2)) { + return 0.0; + } + if ((Math.abs(p1.getLng() - p2.getLng()) < 0.0000000001) && (Math.abs(p1.getLat() - p2.getLat()) < 0.0000000001)) { + return 0.0; + } + double c = Math.sin(p1.getLat()) * Math.sin(p2.getLat()) + Math.cos(p1.getLat()) * Math.cos(p2.getLat()) * Math.cos(p1.getLng() - p2.getLng()); + if (Math.abs(c - 1) < 0.0000000001) { + return 0.0; + } + double distance = EARTH_RADIUS * Math.acos(c) * Math.PI / 180; + + return distance; + } + + /** + * 计算点p到线段p1p2之间的距离 + * + * @param p + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToLine(Point p, Point p1, Point p2) { + double dist = 0; + double p1p2; + double pp1; + double pp2; + // 线段的长度 + p1p2 = calDistancePointToPoint(p1, p2); + // (x1,y1)到点的距离 + pp1 = calDistancePointToPoint(p, p1); + // (x2,y2)到点的距离 + pp2 = calDistancePointToPoint(p, p2); + + if (pp2 * pp2 >= p1p2 * p1p2 + pp1 * pp1) { + dist = pp1; + return dist; + } + + if (pp1 * pp1 >= p1p2 * p1p2 + pp2 * pp2) { + dist = pp2; + return dist; + } + // 半周长 + double hc = (p1p2 + pp1 + pp2) / 2; + // 海伦公式求面积 + double s = Math.sqrt(hc * (hc - p1p2) * (hc - pp1) * (hc - pp2)); + // 返回点到线的距离(利用三角形面积公式求高) + dist = 2 * s / p1p2; + return dist; + } + + /** + * 计算点是否在矩形内 + * + * @param p + * @param max + * @param min + * @return + */ + public static boolean isPointInRect(Point p, Point max, Point min) { + if (p.getLng() < min.getLng() || p.getLng() > max.getLng() || p.getLat() < min.getLat() || p.getLat() > max.getLat()) { + return false; + } else { + return true; + } + } + + + /** + * 计算点是否在多边形内 + * + * @param p + * @param points + * @return + */ + public static boolean isPointInPolygon(Point p, List points) { + int nvert = points.size(); + int i = 0; + int j = 0; + boolean c = false; + + for (i = 0, j = nvert - 1; i < nvert; j = i++) { + if (((points.get(i).getLat() > p.getLat()) != (points.get(j).getLat() > p.getLat())) && + (p.getLng() < (points.get(j).getLng() - points.get(i).getLng()) * (p.getLat() - points.get(i).getLat()) / (points.get(j).getLat() - points.get(i).getLat()) + points.get(i).getLng())) { + c = !c; + } + } + return c; + } + + public static void main(String[] args) { + Point p1 = new Point("116.626215", "28.249713"); + Point p2 = new Point("116.635054", "28.256459"); + Point p = new Point("116.6306345", "28.253086"); + System.out.println(calDistancePointToLine(p, p1, p2)); + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java new file mode 100644 index 0000000..2e8e47e --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.alarm.util; + +/** + * 点位信息 + */ +public class Point { + private Double lng; + private Double lat; + + public Point(String lng, String lat) { + this.lng = Double.parseDouble(lng); + this.lat = Double.parseDouble(lat); + } + + public Double getLng() { + return lng; + } + + public void setLng(Double lng) { + this.lng = lng; + } + + public Double getLat() { + return lat; + } + + public void setLat(Double lat) { + this.lat = lat; + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java new file mode 100644 index 0000000..d051c70 --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.modular.car.model.BusCarInfo; +import com.casic.missiles.modular.car.service.IBusCarInfoSupportService; +import com.casic.missiles.modular.position.dto.CarPositionDto; +import com.casic.missiles.modular.position.es.BusCarPosition; +import com.casic.missiles.modular.position.service.IBusCarPositionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName CarPositionController + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 13:45 + * @Version 1.0 + */ +@RestController +@RequestMapping("/carPosition") +public class CarPositionController { + @Autowired + private ICommonPermissionService permissionService; + @Autowired + private IBusCarInfoSupportService carInfoSupportService; + @Autowired + private IBusCarPositionService busCarPositionService; + /** + * 跟踪(查询车辆最新位置) + */ + @RequestMapping("/track") + public Object track(Long carId){ + BusCarInfo carInfo = carInfoSupportService.selectByCarId(carId); + BusCarPosition positionInfo = busCarPositionService.selectLastestCarPosition(carId); + CarPositionDto carPositionDto = new CarPositionDto(); + CarPositionDto.convCarInfo(carInfo,carPositionDto); + CarPositionDto.convPositionInfo(positionInfo,carPositionDto); + carPositionDto.setStatus(busCarPositionService.getCarStatus(positionInfo)); + return ResponseData.success(carPositionDto); + } +} diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java index c5fa1f5..c8ea1ed 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java @@ -10,13 +10,14 @@ /** * @ClassName AlarmStrategyContext - * @Description 上下文 + * @Description 告警上下文 执行策略验证 * @Author lwh * @Date 2021/3/5 15:46 * @Version 1.0 */ public class AlarmStrategyContext { + private List strategies = new ArrayList<>(); /** @@ -38,6 +39,7 @@ * @param strategy */ public void addStrategy(BaseAlarmStrategy strategy) { + strategy.setContext(this); strategies.add(strategy); } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java index 6903de7..2682c26 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java @@ -1,25 +1,32 @@ package com.casic.missiles.modular.system.alarm.strategy; import com.casic.missiles.core.base.response.ResponseData; -import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; import com.casic.missiles.modular.system.alarm.dto.PostionDTO; import com.casic.missiles.modular.system.alarm.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; + +import java.util.HashMap; +import java.util.Map; /** * @ClassName TrajectoryTimeAlarmStrategy - * @Description 车辆轨迹巡查 作业次数巡查 + * @Description 车辆轨迹巡查 作业次数巡查(时间间隔出现在线段中某个点附近的次数,同时根据点位) * @Author lwh * @Date 2021/3/5 16:37 * @Version 1.0 */ public class TrajectoryTimeAlarmStrategy extends BaseAlarmStrategy { + + + /** * @param data 校验数据 * @return */ @Override public ResponseData processHandler(AlarmProcessDTO data) { + // return null; } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java index 7d56b9f..3fd22c8 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java @@ -2,13 +2,16 @@ import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; +import com.casic.missiles.modular.system.alarm.strategy.AlarmStrategyContext; /** * 基础思路:提供基础校验接口 分状态实现校验 * 路线报警基础报警handler + * * @author lwh */ public abstract class BaseAlarmStrategy { + private AlarmStrategyContext context; /** * 根据告警规则处理告警数据 @@ -17,4 +20,12 @@ * @return 处理结果 */ public abstract ResponseData processHandler(AlarmProcessDTO data); + + public AlarmStrategyContext getContext() { + return context; + } + + public void setContext(AlarmStrategyContext context) { + this.context = context; + } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java new file mode 100644 index 0000000..528593c --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.alarm.strategy.config; + +/** + * @ClassName AlarmStrategyConfig + * @Description 环卫策略配置项 + * @Author lenovo + * @Date 2021/4/23 10:46 + * @Version 1.0 + */ +public class AlarmStrategyConfig { + /** + *  采集点权重 例如:2 则为每两次判定一次 必须为正整数 + */ + private String alarmWeight; + + /** + * 作业占比阀值 行驶路段数占比最小值(及满足多少占比可作为一次) + */ + private String proportion; +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java new file mode 100644 index 0000000..8359d1b --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.system.alarm.util; + +import java.util.List; + +/** + * 点位信息判定工具类 + */ +public class GPSCalculatorUtil { + + private static double EARTH_RADIUS = 6378137; + + /** + * 计算线段p1p2的距离 + * + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToPoint(Point p1, Point p2) { + if (p1.equals(p2)) { + return 0.0; + } + if ((Math.abs(p1.getLng() - p2.getLng()) < 0.0000000001) && (Math.abs(p1.getLat() - p2.getLat()) < 0.0000000001)) { + return 0.0; + } + double c = Math.sin(p1.getLat()) * Math.sin(p2.getLat()) + Math.cos(p1.getLat()) * Math.cos(p2.getLat()) * Math.cos(p1.getLng() - p2.getLng()); + if (Math.abs(c - 1) < 0.0000000001) { + return 0.0; + } + double distance = EARTH_RADIUS * Math.acos(c) * Math.PI / 180; + + return distance; + } + + /** + * 计算点p到线段p1p2之间的距离 + * + * @param p + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToLine(Point p, Point p1, Point p2) { + double dist = 0; + double p1p2; + double pp1; + double pp2; + // 线段的长度 + p1p2 = calDistancePointToPoint(p1, p2); + // (x1,y1)到点的距离 + pp1 = calDistancePointToPoint(p, p1); + // (x2,y2)到点的距离 + pp2 = calDistancePointToPoint(p, p2); + + if (pp2 * pp2 >= p1p2 * p1p2 + pp1 * pp1) { + dist = pp1; + return dist; + } + + if (pp1 * pp1 >= p1p2 * p1p2 + pp2 * pp2) { + dist = pp2; + return dist; + } + // 半周长 + double hc = (p1p2 + pp1 + pp2) / 2; + // 海伦公式求面积 + double s = Math.sqrt(hc * (hc - p1p2) * (hc - pp1) * (hc - pp2)); + // 返回点到线的距离(利用三角形面积公式求高) + dist = 2 * s / p1p2; + return dist; + } + + /** + * 计算点是否在矩形内 + * + * @param p + * @param max + * @param min + * @return + */ + public static boolean isPointInRect(Point p, Point max, Point min) { + if (p.getLng() < min.getLng() || p.getLng() > max.getLng() || p.getLat() < min.getLat() || p.getLat() > max.getLat()) { + return false; + } else { + return true; + } + } + + + /** + * 计算点是否在多边形内 + * + * @param p + * @param points + * @return + */ + public static boolean isPointInPolygon(Point p, List points) { + int nvert = points.size(); + int i = 0; + int j = 0; + boolean c = false; + + for (i = 0, j = nvert - 1; i < nvert; j = i++) { + if (((points.get(i).getLat() > p.getLat()) != (points.get(j).getLat() > p.getLat())) && + (p.getLng() < (points.get(j).getLng() - points.get(i).getLng()) * (p.getLat() - points.get(i).getLat()) / (points.get(j).getLat() - points.get(i).getLat()) + points.get(i).getLng())) { + c = !c; + } + } + return c; + } + + public static void main(String[] args) { + Point p1 = new Point("116.626215", "28.249713"); + Point p2 = new Point("116.635054", "28.256459"); + Point p = new Point("116.6306345", "28.253086"); + System.out.println(calDistancePointToLine(p, p1, p2)); + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java new file mode 100644 index 0000000..2e8e47e --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.alarm.util; + +/** + * 点位信息 + */ +public class Point { + private Double lng; + private Double lat; + + public Point(String lng, String lat) { + this.lng = Double.parseDouble(lng); + this.lat = Double.parseDouble(lat); + } + + public Double getLng() { + return lng; + } + + public void setLng(Double lng) { + this.lng = lng; + } + + public Double getLat() { + return lat; + } + + public void setLat(Double lat) { + this.lat = lat; + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java new file mode 100644 index 0000000..d051c70 --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.modular.car.model.BusCarInfo; +import com.casic.missiles.modular.car.service.IBusCarInfoSupportService; +import com.casic.missiles.modular.position.dto.CarPositionDto; +import com.casic.missiles.modular.position.es.BusCarPosition; +import com.casic.missiles.modular.position.service.IBusCarPositionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName CarPositionController + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 13:45 + * @Version 1.0 + */ +@RestController +@RequestMapping("/carPosition") +public class CarPositionController { + @Autowired + private ICommonPermissionService permissionService; + @Autowired + private IBusCarInfoSupportService carInfoSupportService; + @Autowired + private IBusCarPositionService busCarPositionService; + /** + * 跟踪(查询车辆最新位置) + */ + @RequestMapping("/track") + public Object track(Long carId){ + BusCarInfo carInfo = carInfoSupportService.selectByCarId(carId); + BusCarPosition positionInfo = busCarPositionService.selectLastestCarPosition(carId); + CarPositionDto carPositionDto = new CarPositionDto(); + CarPositionDto.convCarInfo(carInfo,carPositionDto); + CarPositionDto.convPositionInfo(positionInfo,carPositionDto); + carPositionDto.setStatus(busCarPositionService.getCarStatus(positionInfo)); + return ResponseData.success(carPositionDto); + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java new file mode 100644 index 0000000..d1fdc33 --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.alarm.model.BusAlarmRecord; +import com.casic.missiles.modular.alarm.service.IBusAlarmRecordSupportService; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName BusAlarmRecordSupportServiceImpl + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 14:24 + * @Version 1.0 + */ +@Component +public class BusAlarmRecordSupportServiceImpl implements IBusAlarmRecordSupportService { + @Override + public List selectAlarm(Long aLong, String s, String s1) { + return null; + } +} diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java index c5fa1f5..c8ea1ed 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java @@ -10,13 +10,14 @@ /** * @ClassName AlarmStrategyContext - * @Description 上下文 + * @Description 告警上下文 执行策略验证 * @Author lwh * @Date 2021/3/5 15:46 * @Version 1.0 */ public class AlarmStrategyContext { + private List strategies = new ArrayList<>(); /** @@ -38,6 +39,7 @@ * @param strategy */ public void addStrategy(BaseAlarmStrategy strategy) { + strategy.setContext(this); strategies.add(strategy); } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java index 6903de7..2682c26 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java @@ -1,25 +1,32 @@ package com.casic.missiles.modular.system.alarm.strategy; import com.casic.missiles.core.base.response.ResponseData; -import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; import com.casic.missiles.modular.system.alarm.dto.PostionDTO; import com.casic.missiles.modular.system.alarm.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; + +import java.util.HashMap; +import java.util.Map; /** * @ClassName TrajectoryTimeAlarmStrategy - * @Description 车辆轨迹巡查 作业次数巡查 + * @Description 车辆轨迹巡查 作业次数巡查(时间间隔出现在线段中某个点附近的次数,同时根据点位) * @Author lwh * @Date 2021/3/5 16:37 * @Version 1.0 */ public class TrajectoryTimeAlarmStrategy extends BaseAlarmStrategy { + + + /** * @param data 校验数据 * @return */ @Override public ResponseData processHandler(AlarmProcessDTO data) { + // return null; } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java index 7d56b9f..3fd22c8 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java @@ -2,13 +2,16 @@ import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; +import com.casic.missiles.modular.system.alarm.strategy.AlarmStrategyContext; /** * 基础思路:提供基础校验接口 分状态实现校验 * 路线报警基础报警handler + * * @author lwh */ public abstract class BaseAlarmStrategy { + private AlarmStrategyContext context; /** * 根据告警规则处理告警数据 @@ -17,4 +20,12 @@ * @return 处理结果 */ public abstract ResponseData processHandler(AlarmProcessDTO data); + + public AlarmStrategyContext getContext() { + return context; + } + + public void setContext(AlarmStrategyContext context) { + this.context = context; + } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java new file mode 100644 index 0000000..528593c --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.alarm.strategy.config; + +/** + * @ClassName AlarmStrategyConfig + * @Description 环卫策略配置项 + * @Author lenovo + * @Date 2021/4/23 10:46 + * @Version 1.0 + */ +public class AlarmStrategyConfig { + /** + *  采集点权重 例如:2 则为每两次判定一次 必须为正整数 + */ + private String alarmWeight; + + /** + * 作业占比阀值 行驶路段数占比最小值(及满足多少占比可作为一次) + */ + private String proportion; +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java new file mode 100644 index 0000000..8359d1b --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.system.alarm.util; + +import java.util.List; + +/** + * 点位信息判定工具类 + */ +public class GPSCalculatorUtil { + + private static double EARTH_RADIUS = 6378137; + + /** + * 计算线段p1p2的距离 + * + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToPoint(Point p1, Point p2) { + if (p1.equals(p2)) { + return 0.0; + } + if ((Math.abs(p1.getLng() - p2.getLng()) < 0.0000000001) && (Math.abs(p1.getLat() - p2.getLat()) < 0.0000000001)) { + return 0.0; + } + double c = Math.sin(p1.getLat()) * Math.sin(p2.getLat()) + Math.cos(p1.getLat()) * Math.cos(p2.getLat()) * Math.cos(p1.getLng() - p2.getLng()); + if (Math.abs(c - 1) < 0.0000000001) { + return 0.0; + } + double distance = EARTH_RADIUS * Math.acos(c) * Math.PI / 180; + + return distance; + } + + /** + * 计算点p到线段p1p2之间的距离 + * + * @param p + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToLine(Point p, Point p1, Point p2) { + double dist = 0; + double p1p2; + double pp1; + double pp2; + // 线段的长度 + p1p2 = calDistancePointToPoint(p1, p2); + // (x1,y1)到点的距离 + pp1 = calDistancePointToPoint(p, p1); + // (x2,y2)到点的距离 + pp2 = calDistancePointToPoint(p, p2); + + if (pp2 * pp2 >= p1p2 * p1p2 + pp1 * pp1) { + dist = pp1; + return dist; + } + + if (pp1 * pp1 >= p1p2 * p1p2 + pp2 * pp2) { + dist = pp2; + return dist; + } + // 半周长 + double hc = (p1p2 + pp1 + pp2) / 2; + // 海伦公式求面积 + double s = Math.sqrt(hc * (hc - p1p2) * (hc - pp1) * (hc - pp2)); + // 返回点到线的距离(利用三角形面积公式求高) + dist = 2 * s / p1p2; + return dist; + } + + /** + * 计算点是否在矩形内 + * + * @param p + * @param max + * @param min + * @return + */ + public static boolean isPointInRect(Point p, Point max, Point min) { + if (p.getLng() < min.getLng() || p.getLng() > max.getLng() || p.getLat() < min.getLat() || p.getLat() > max.getLat()) { + return false; + } else { + return true; + } + } + + + /** + * 计算点是否在多边形内 + * + * @param p + * @param points + * @return + */ + public static boolean isPointInPolygon(Point p, List points) { + int nvert = points.size(); + int i = 0; + int j = 0; + boolean c = false; + + for (i = 0, j = nvert - 1; i < nvert; j = i++) { + if (((points.get(i).getLat() > p.getLat()) != (points.get(j).getLat() > p.getLat())) && + (p.getLng() < (points.get(j).getLng() - points.get(i).getLng()) * (p.getLat() - points.get(i).getLat()) / (points.get(j).getLat() - points.get(i).getLat()) + points.get(i).getLng())) { + c = !c; + } + } + return c; + } + + public static void main(String[] args) { + Point p1 = new Point("116.626215", "28.249713"); + Point p2 = new Point("116.635054", "28.256459"); + Point p = new Point("116.6306345", "28.253086"); + System.out.println(calDistancePointToLine(p, p1, p2)); + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java new file mode 100644 index 0000000..2e8e47e --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.alarm.util; + +/** + * 点位信息 + */ +public class Point { + private Double lng; + private Double lat; + + public Point(String lng, String lat) { + this.lng = Double.parseDouble(lng); + this.lat = Double.parseDouble(lat); + } + + public Double getLng() { + return lng; + } + + public void setLng(Double lng) { + this.lng = lng; + } + + public Double getLat() { + return lat; + } + + public void setLat(Double lat) { + this.lat = lat; + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java new file mode 100644 index 0000000..d051c70 --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.modular.car.model.BusCarInfo; +import com.casic.missiles.modular.car.service.IBusCarInfoSupportService; +import com.casic.missiles.modular.position.dto.CarPositionDto; +import com.casic.missiles.modular.position.es.BusCarPosition; +import com.casic.missiles.modular.position.service.IBusCarPositionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName CarPositionController + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 13:45 + * @Version 1.0 + */ +@RestController +@RequestMapping("/carPosition") +public class CarPositionController { + @Autowired + private ICommonPermissionService permissionService; + @Autowired + private IBusCarInfoSupportService carInfoSupportService; + @Autowired + private IBusCarPositionService busCarPositionService; + /** + * 跟踪(查询车辆最新位置) + */ + @RequestMapping("/track") + public Object track(Long carId){ + BusCarInfo carInfo = carInfoSupportService.selectByCarId(carId); + BusCarPosition positionInfo = busCarPositionService.selectLastestCarPosition(carId); + CarPositionDto carPositionDto = new CarPositionDto(); + CarPositionDto.convCarInfo(carInfo,carPositionDto); + CarPositionDto.convPositionInfo(positionInfo,carPositionDto); + carPositionDto.setStatus(busCarPositionService.getCarStatus(positionInfo)); + return ResponseData.success(carPositionDto); + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java new file mode 100644 index 0000000..d1fdc33 --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.alarm.model.BusAlarmRecord; +import com.casic.missiles.modular.alarm.service.IBusAlarmRecordSupportService; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName BusAlarmRecordSupportServiceImpl + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 14:24 + * @Version 1.0 + */ +@Component +public class BusAlarmRecordSupportServiceImpl implements IBusAlarmRecordSupportService { + @Override + public List selectAlarm(Long aLong, String s, String s1) { + return null; + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmThresholdSupportServiceImpl.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmThresholdSupportServiceImpl.java new file mode 100644 index 0000000..16f715a --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmThresholdSupportServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.alarm.model.BusAlarmThreshold; +import com.casic.missiles.modular.alarm.service.IBusAlarmThresholdSupportService; +import org.springframework.stereotype.Component; + +/** + * @ClassName BusAlarmThresholdSupportServiceImpl + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 14:10 + * @Version 1.0 + */ +@Component +public class BusAlarmThresholdSupportServiceImpl implements IBusAlarmThresholdSupportService { + @Override + public BusAlarmThreshold selectByCarId(Long aLong) { + return null; + } +} diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java index c5fa1f5..c8ea1ed 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java @@ -10,13 +10,14 @@ /** * @ClassName AlarmStrategyContext - * @Description 上下文 + * @Description 告警上下文 执行策略验证 * @Author lwh * @Date 2021/3/5 15:46 * @Version 1.0 */ public class AlarmStrategyContext { + private List strategies = new ArrayList<>(); /** @@ -38,6 +39,7 @@ * @param strategy */ public void addStrategy(BaseAlarmStrategy strategy) { + strategy.setContext(this); strategies.add(strategy); } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java index 6903de7..2682c26 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java @@ -1,25 +1,32 @@ package com.casic.missiles.modular.system.alarm.strategy; import com.casic.missiles.core.base.response.ResponseData; -import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; import com.casic.missiles.modular.system.alarm.dto.PostionDTO; import com.casic.missiles.modular.system.alarm.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; + +import java.util.HashMap; +import java.util.Map; /** * @ClassName TrajectoryTimeAlarmStrategy - * @Description 车辆轨迹巡查 作业次数巡查 + * @Description 车辆轨迹巡查 作业次数巡查(时间间隔出现在线段中某个点附近的次数,同时根据点位) * @Author lwh * @Date 2021/3/5 16:37 * @Version 1.0 */ public class TrajectoryTimeAlarmStrategy extends BaseAlarmStrategy { + + + /** * @param data 校验数据 * @return */ @Override public ResponseData processHandler(AlarmProcessDTO data) { + // return null; } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java index 7d56b9f..3fd22c8 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java @@ -2,13 +2,16 @@ import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; +import com.casic.missiles.modular.system.alarm.strategy.AlarmStrategyContext; /** * 基础思路:提供基础校验接口 分状态实现校验 * 路线报警基础报警handler + * * @author lwh */ public abstract class BaseAlarmStrategy { + private AlarmStrategyContext context; /** * 根据告警规则处理告警数据 @@ -17,4 +20,12 @@ * @return 处理结果 */ public abstract ResponseData processHandler(AlarmProcessDTO data); + + public AlarmStrategyContext getContext() { + return context; + } + + public void setContext(AlarmStrategyContext context) { + this.context = context; + } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java new file mode 100644 index 0000000..528593c --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.alarm.strategy.config; + +/** + * @ClassName AlarmStrategyConfig + * @Description 环卫策略配置项 + * @Author lenovo + * @Date 2021/4/23 10:46 + * @Version 1.0 + */ +public class AlarmStrategyConfig { + /** + *  采集点权重 例如:2 则为每两次判定一次 必须为正整数 + */ + private String alarmWeight; + + /** + * 作业占比阀值 行驶路段数占比最小值(及满足多少占比可作为一次) + */ + private String proportion; +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java new file mode 100644 index 0000000..8359d1b --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.system.alarm.util; + +import java.util.List; + +/** + * 点位信息判定工具类 + */ +public class GPSCalculatorUtil { + + private static double EARTH_RADIUS = 6378137; + + /** + * 计算线段p1p2的距离 + * + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToPoint(Point p1, Point p2) { + if (p1.equals(p2)) { + return 0.0; + } + if ((Math.abs(p1.getLng() - p2.getLng()) < 0.0000000001) && (Math.abs(p1.getLat() - p2.getLat()) < 0.0000000001)) { + return 0.0; + } + double c = Math.sin(p1.getLat()) * Math.sin(p2.getLat()) + Math.cos(p1.getLat()) * Math.cos(p2.getLat()) * Math.cos(p1.getLng() - p2.getLng()); + if (Math.abs(c - 1) < 0.0000000001) { + return 0.0; + } + double distance = EARTH_RADIUS * Math.acos(c) * Math.PI / 180; + + return distance; + } + + /** + * 计算点p到线段p1p2之间的距离 + * + * @param p + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToLine(Point p, Point p1, Point p2) { + double dist = 0; + double p1p2; + double pp1; + double pp2; + // 线段的长度 + p1p2 = calDistancePointToPoint(p1, p2); + // (x1,y1)到点的距离 + pp1 = calDistancePointToPoint(p, p1); + // (x2,y2)到点的距离 + pp2 = calDistancePointToPoint(p, p2); + + if (pp2 * pp2 >= p1p2 * p1p2 + pp1 * pp1) { + dist = pp1; + return dist; + } + + if (pp1 * pp1 >= p1p2 * p1p2 + pp2 * pp2) { + dist = pp2; + return dist; + } + // 半周长 + double hc = (p1p2 + pp1 + pp2) / 2; + // 海伦公式求面积 + double s = Math.sqrt(hc * (hc - p1p2) * (hc - pp1) * (hc - pp2)); + // 返回点到线的距离(利用三角形面积公式求高) + dist = 2 * s / p1p2; + return dist; + } + + /** + * 计算点是否在矩形内 + * + * @param p + * @param max + * @param min + * @return + */ + public static boolean isPointInRect(Point p, Point max, Point min) { + if (p.getLng() < min.getLng() || p.getLng() > max.getLng() || p.getLat() < min.getLat() || p.getLat() > max.getLat()) { + return false; + } else { + return true; + } + } + + + /** + * 计算点是否在多边形内 + * + * @param p + * @param points + * @return + */ + public static boolean isPointInPolygon(Point p, List points) { + int nvert = points.size(); + int i = 0; + int j = 0; + boolean c = false; + + for (i = 0, j = nvert - 1; i < nvert; j = i++) { + if (((points.get(i).getLat() > p.getLat()) != (points.get(j).getLat() > p.getLat())) && + (p.getLng() < (points.get(j).getLng() - points.get(i).getLng()) * (p.getLat() - points.get(i).getLat()) / (points.get(j).getLat() - points.get(i).getLat()) + points.get(i).getLng())) { + c = !c; + } + } + return c; + } + + public static void main(String[] args) { + Point p1 = new Point("116.626215", "28.249713"); + Point p2 = new Point("116.635054", "28.256459"); + Point p = new Point("116.6306345", "28.253086"); + System.out.println(calDistancePointToLine(p, p1, p2)); + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java new file mode 100644 index 0000000..2e8e47e --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.alarm.util; + +/** + * 点位信息 + */ +public class Point { + private Double lng; + private Double lat; + + public Point(String lng, String lat) { + this.lng = Double.parseDouble(lng); + this.lat = Double.parseDouble(lat); + } + + public Double getLng() { + return lng; + } + + public void setLng(Double lng) { + this.lng = lng; + } + + public Double getLat() { + return lat; + } + + public void setLat(Double lat) { + this.lat = lat; + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java new file mode 100644 index 0000000..d051c70 --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.modular.car.model.BusCarInfo; +import com.casic.missiles.modular.car.service.IBusCarInfoSupportService; +import com.casic.missiles.modular.position.dto.CarPositionDto; +import com.casic.missiles.modular.position.es.BusCarPosition; +import com.casic.missiles.modular.position.service.IBusCarPositionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName CarPositionController + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 13:45 + * @Version 1.0 + */ +@RestController +@RequestMapping("/carPosition") +public class CarPositionController { + @Autowired + private ICommonPermissionService permissionService; + @Autowired + private IBusCarInfoSupportService carInfoSupportService; + @Autowired + private IBusCarPositionService busCarPositionService; + /** + * 跟踪(查询车辆最新位置) + */ + @RequestMapping("/track") + public Object track(Long carId){ + BusCarInfo carInfo = carInfoSupportService.selectByCarId(carId); + BusCarPosition positionInfo = busCarPositionService.selectLastestCarPosition(carId); + CarPositionDto carPositionDto = new CarPositionDto(); + CarPositionDto.convCarInfo(carInfo,carPositionDto); + CarPositionDto.convPositionInfo(positionInfo,carPositionDto); + carPositionDto.setStatus(busCarPositionService.getCarStatus(positionInfo)); + return ResponseData.success(carPositionDto); + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java new file mode 100644 index 0000000..d1fdc33 --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.alarm.model.BusAlarmRecord; +import com.casic.missiles.modular.alarm.service.IBusAlarmRecordSupportService; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName BusAlarmRecordSupportServiceImpl + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 14:24 + * @Version 1.0 + */ +@Component +public class BusAlarmRecordSupportServiceImpl implements IBusAlarmRecordSupportService { + @Override + public List selectAlarm(Long aLong, String s, String s1) { + return null; + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmThresholdSupportServiceImpl.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmThresholdSupportServiceImpl.java new file mode 100644 index 0000000..16f715a --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmThresholdSupportServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.alarm.model.BusAlarmThreshold; +import com.casic.missiles.modular.alarm.service.IBusAlarmThresholdSupportService; +import org.springframework.stereotype.Component; + +/** + * @ClassName BusAlarmThresholdSupportServiceImpl + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 14:10 + * @Version 1.0 + */ +@Component +public class BusAlarmThresholdSupportServiceImpl implements IBusAlarmThresholdSupportService { + @Override + public BusAlarmThreshold selectByCarId(Long aLong) { + return null; + } +} diff --git a/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/statistics/StatisticsController.java b/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/statistics/StatisticsController.java index 0005292..d07a135 100644 --- a/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/statistics/StatisticsController.java +++ b/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/statistics/StatisticsController.java @@ -33,7 +33,7 @@ @RequestMapping("/statistic") public class StatisticsController extends BaseController { - @Value("${mybatis-plus.configuration-properties.bizDataBaseName}") + @Value("${mybatis-plus.configuration-properties.sanitationBaseName}") private String bizDataBaseName; @Value("${mybatis-plus.configuration-properties.carDataBaseName}") private String carDataBaseName; diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java index c5fa1f5..c8ea1ed 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java @@ -10,13 +10,14 @@ /** * @ClassName AlarmStrategyContext - * @Description 上下文 + * @Description 告警上下文 执行策略验证 * @Author lwh * @Date 2021/3/5 15:46 * @Version 1.0 */ public class AlarmStrategyContext { + private List strategies = new ArrayList<>(); /** @@ -38,6 +39,7 @@ * @param strategy */ public void addStrategy(BaseAlarmStrategy strategy) { + strategy.setContext(this); strategies.add(strategy); } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java index 6903de7..2682c26 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java @@ -1,25 +1,32 @@ package com.casic.missiles.modular.system.alarm.strategy; import com.casic.missiles.core.base.response.ResponseData; -import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; import com.casic.missiles.modular.system.alarm.dto.PostionDTO; import com.casic.missiles.modular.system.alarm.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; + +import java.util.HashMap; +import java.util.Map; /** * @ClassName TrajectoryTimeAlarmStrategy - * @Description 车辆轨迹巡查 作业次数巡查 + * @Description 车辆轨迹巡查 作业次数巡查(时间间隔出现在线段中某个点附近的次数,同时根据点位) * @Author lwh * @Date 2021/3/5 16:37 * @Version 1.0 */ public class TrajectoryTimeAlarmStrategy extends BaseAlarmStrategy { + + + /** * @param data 校验数据 * @return */ @Override public ResponseData processHandler(AlarmProcessDTO data) { + // return null; } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java index 7d56b9f..3fd22c8 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java @@ -2,13 +2,16 @@ import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; +import com.casic.missiles.modular.system.alarm.strategy.AlarmStrategyContext; /** * 基础思路:提供基础校验接口 分状态实现校验 * 路线报警基础报警handler + * * @author lwh */ public abstract class BaseAlarmStrategy { + private AlarmStrategyContext context; /** * 根据告警规则处理告警数据 @@ -17,4 +20,12 @@ * @return 处理结果 */ public abstract ResponseData processHandler(AlarmProcessDTO data); + + public AlarmStrategyContext getContext() { + return context; + } + + public void setContext(AlarmStrategyContext context) { + this.context = context; + } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java new file mode 100644 index 0000000..528593c --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.alarm.strategy.config; + +/** + * @ClassName AlarmStrategyConfig + * @Description 环卫策略配置项 + * @Author lenovo + * @Date 2021/4/23 10:46 + * @Version 1.0 + */ +public class AlarmStrategyConfig { + /** + *  采集点权重 例如:2 则为每两次判定一次 必须为正整数 + */ + private String alarmWeight; + + /** + * 作业占比阀值 行驶路段数占比最小值(及满足多少占比可作为一次) + */ + private String proportion; +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java new file mode 100644 index 0000000..8359d1b --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.system.alarm.util; + +import java.util.List; + +/** + * 点位信息判定工具类 + */ +public class GPSCalculatorUtil { + + private static double EARTH_RADIUS = 6378137; + + /** + * 计算线段p1p2的距离 + * + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToPoint(Point p1, Point p2) { + if (p1.equals(p2)) { + return 0.0; + } + if ((Math.abs(p1.getLng() - p2.getLng()) < 0.0000000001) && (Math.abs(p1.getLat() - p2.getLat()) < 0.0000000001)) { + return 0.0; + } + double c = Math.sin(p1.getLat()) * Math.sin(p2.getLat()) + Math.cos(p1.getLat()) * Math.cos(p2.getLat()) * Math.cos(p1.getLng() - p2.getLng()); + if (Math.abs(c - 1) < 0.0000000001) { + return 0.0; + } + double distance = EARTH_RADIUS * Math.acos(c) * Math.PI / 180; + + return distance; + } + + /** + * 计算点p到线段p1p2之间的距离 + * + * @param p + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToLine(Point p, Point p1, Point p2) { + double dist = 0; + double p1p2; + double pp1; + double pp2; + // 线段的长度 + p1p2 = calDistancePointToPoint(p1, p2); + // (x1,y1)到点的距离 + pp1 = calDistancePointToPoint(p, p1); + // (x2,y2)到点的距离 + pp2 = calDistancePointToPoint(p, p2); + + if (pp2 * pp2 >= p1p2 * p1p2 + pp1 * pp1) { + dist = pp1; + return dist; + } + + if (pp1 * pp1 >= p1p2 * p1p2 + pp2 * pp2) { + dist = pp2; + return dist; + } + // 半周长 + double hc = (p1p2 + pp1 + pp2) / 2; + // 海伦公式求面积 + double s = Math.sqrt(hc * (hc - p1p2) * (hc - pp1) * (hc - pp2)); + // 返回点到线的距离(利用三角形面积公式求高) + dist = 2 * s / p1p2; + return dist; + } + + /** + * 计算点是否在矩形内 + * + * @param p + * @param max + * @param min + * @return + */ + public static boolean isPointInRect(Point p, Point max, Point min) { + if (p.getLng() < min.getLng() || p.getLng() > max.getLng() || p.getLat() < min.getLat() || p.getLat() > max.getLat()) { + return false; + } else { + return true; + } + } + + + /** + * 计算点是否在多边形内 + * + * @param p + * @param points + * @return + */ + public static boolean isPointInPolygon(Point p, List points) { + int nvert = points.size(); + int i = 0; + int j = 0; + boolean c = false; + + for (i = 0, j = nvert - 1; i < nvert; j = i++) { + if (((points.get(i).getLat() > p.getLat()) != (points.get(j).getLat() > p.getLat())) && + (p.getLng() < (points.get(j).getLng() - points.get(i).getLng()) * (p.getLat() - points.get(i).getLat()) / (points.get(j).getLat() - points.get(i).getLat()) + points.get(i).getLng())) { + c = !c; + } + } + return c; + } + + public static void main(String[] args) { + Point p1 = new Point("116.626215", "28.249713"); + Point p2 = new Point("116.635054", "28.256459"); + Point p = new Point("116.6306345", "28.253086"); + System.out.println(calDistancePointToLine(p, p1, p2)); + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java new file mode 100644 index 0000000..2e8e47e --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.alarm.util; + +/** + * 点位信息 + */ +public class Point { + private Double lng; + private Double lat; + + public Point(String lng, String lat) { + this.lng = Double.parseDouble(lng); + this.lat = Double.parseDouble(lat); + } + + public Double getLng() { + return lng; + } + + public void setLng(Double lng) { + this.lng = lng; + } + + public Double getLat() { + return lat; + } + + public void setLat(Double lat) { + this.lat = lat; + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java new file mode 100644 index 0000000..d051c70 --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.modular.car.model.BusCarInfo; +import com.casic.missiles.modular.car.service.IBusCarInfoSupportService; +import com.casic.missiles.modular.position.dto.CarPositionDto; +import com.casic.missiles.modular.position.es.BusCarPosition; +import com.casic.missiles.modular.position.service.IBusCarPositionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName CarPositionController + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 13:45 + * @Version 1.0 + */ +@RestController +@RequestMapping("/carPosition") +public class CarPositionController { + @Autowired + private ICommonPermissionService permissionService; + @Autowired + private IBusCarInfoSupportService carInfoSupportService; + @Autowired + private IBusCarPositionService busCarPositionService; + /** + * 跟踪(查询车辆最新位置) + */ + @RequestMapping("/track") + public Object track(Long carId){ + BusCarInfo carInfo = carInfoSupportService.selectByCarId(carId); + BusCarPosition positionInfo = busCarPositionService.selectLastestCarPosition(carId); + CarPositionDto carPositionDto = new CarPositionDto(); + CarPositionDto.convCarInfo(carInfo,carPositionDto); + CarPositionDto.convPositionInfo(positionInfo,carPositionDto); + carPositionDto.setStatus(busCarPositionService.getCarStatus(positionInfo)); + return ResponseData.success(carPositionDto); + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java new file mode 100644 index 0000000..d1fdc33 --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.alarm.model.BusAlarmRecord; +import com.casic.missiles.modular.alarm.service.IBusAlarmRecordSupportService; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName BusAlarmRecordSupportServiceImpl + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 14:24 + * @Version 1.0 + */ +@Component +public class BusAlarmRecordSupportServiceImpl implements IBusAlarmRecordSupportService { + @Override + public List selectAlarm(Long aLong, String s, String s1) { + return null; + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmThresholdSupportServiceImpl.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmThresholdSupportServiceImpl.java new file mode 100644 index 0000000..16f715a --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmThresholdSupportServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.alarm.model.BusAlarmThreshold; +import com.casic.missiles.modular.alarm.service.IBusAlarmThresholdSupportService; +import org.springframework.stereotype.Component; + +/** + * @ClassName BusAlarmThresholdSupportServiceImpl + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 14:10 + * @Version 1.0 + */ +@Component +public class BusAlarmThresholdSupportServiceImpl implements IBusAlarmThresholdSupportService { + @Override + public BusAlarmThreshold selectByCarId(Long aLong) { + return null; + } +} diff --git a/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/statistics/StatisticsController.java b/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/statistics/StatisticsController.java index 0005292..d07a135 100644 --- a/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/statistics/StatisticsController.java +++ b/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/statistics/StatisticsController.java @@ -33,7 +33,7 @@ @RequestMapping("/statistic") public class StatisticsController extends BaseController { - @Value("${mybatis-plus.configuration-properties.bizDataBaseName}") + @Value("${mybatis-plus.configuration-properties.sanitationBaseName}") private String bizDataBaseName; @Value("${mybatis-plus.configuration-properties.carDataBaseName}") private String carDataBaseName; diff --git a/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/system/dao/mapping/JobRecordMapper.xml b/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/system/dao/mapping/JobRecordMapper.xml index b110887..a854ac4 100644 --- a/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/system/dao/mapping/JobRecordMapper.xml +++ b/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/system/dao/mapping/JobRecordMapper.xml @@ -35,7 +35,7 @@ b.CHARGE_PHONE AS chargePersonPhone, c.ROUTE_NAME as ROUTENAME FROM - ${bizDataBaseName}.dcms_car_job_record a + ${sanitationBaseName}.dcms_car_job_record a INNER JOIN ${carDataBaseName}.bus_car_info b ON a.CAR_ID = b.ID INNER JOIN ${carDataBaseName}.bus_route_info c ON a.ROUTE_ID = c.ID diff --git a/casic-service-car/pom.xml b/casic-service-car/pom.xml index d4c871e..8eb42ae 100644 --- a/casic-service-car/pom.xml +++ b/casic-service-car/pom.xml @@ -28,9 +28,33 @@ casic-admin-support ${admin.version} - + + com.casic + casic-car-support + 1.0.0 + + + com.casic + casic-car-base + 1.0.0 + + + com.casic + casic-car-position + 1.0.0 + + + com.casic + casic-data-es + ${admin.version} + + + com.casic + casic-data-support + ${admin.version} + diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java index f4638d8..71c4c9e 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/dto/RouteInfoDTO.java @@ -1,5 +1,10 @@ package com.casic.missiles.modular.system.alarm.dto; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + /** * @ClassName RouteInfoDTO * @Description 车辆信息数据 @@ -7,5 +12,7 @@ * @Date 2021/3/5 16:38 * @Version 1.0 */ +@Data public class RouteInfoDTO { + private Map lineNums = new HashMap<>(); } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java index c5fa1f5..c8ea1ed 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/AlarmStrategyContext.java @@ -10,13 +10,14 @@ /** * @ClassName AlarmStrategyContext - * @Description 上下文 + * @Description 告警上下文 执行策略验证 * @Author lwh * @Date 2021/3/5 15:46 * @Version 1.0 */ public class AlarmStrategyContext { + private List strategies = new ArrayList<>(); /** @@ -38,6 +39,7 @@ * @param strategy */ public void addStrategy(BaseAlarmStrategy strategy) { + strategy.setContext(this); strategies.add(strategy); } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java index 6903de7..2682c26 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/TrajectoryTimeAlarmStrategy.java @@ -1,25 +1,32 @@ package com.casic.missiles.modular.system.alarm.strategy; import com.casic.missiles.core.base.response.ResponseData; -import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; import com.casic.missiles.modular.system.alarm.dto.PostionDTO; import com.casic.missiles.modular.system.alarm.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.alarm.strategy.base.BaseAlarmStrategy; + +import java.util.HashMap; +import java.util.Map; /** * @ClassName TrajectoryTimeAlarmStrategy - * @Description 车辆轨迹巡查 作业次数巡查 + * @Description 车辆轨迹巡查 作业次数巡查(时间间隔出现在线段中某个点附近的次数,同时根据点位) * @Author lwh * @Date 2021/3/5 16:37 * @Version 1.0 */ public class TrajectoryTimeAlarmStrategy extends BaseAlarmStrategy { + + + /** * @param data 校验数据 * @return */ @Override public ResponseData processHandler(AlarmProcessDTO data) { + // return null; } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java index 7d56b9f..3fd22c8 100644 --- a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/base/BaseAlarmStrategy.java @@ -2,13 +2,16 @@ import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.modular.system.alarm.dto.AlarmProcessDTO; +import com.casic.missiles.modular.system.alarm.strategy.AlarmStrategyContext; /** * 基础思路:提供基础校验接口 分状态实现校验 * 路线报警基础报警handler + * * @author lwh */ public abstract class BaseAlarmStrategy { + private AlarmStrategyContext context; /** * 根据告警规则处理告警数据 @@ -17,4 +20,12 @@ * @return 处理结果 */ public abstract ResponseData processHandler(AlarmProcessDTO data); + + public AlarmStrategyContext getContext() { + return context; + } + + public void setContext(AlarmStrategyContext context) { + this.context = context; + } } diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java new file mode 100644 index 0000000..528593c --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/strategy/config/AlarmStrategyConfig.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.alarm.strategy.config; + +/** + * @ClassName AlarmStrategyConfig + * @Description 环卫策略配置项 + * @Author lenovo + * @Date 2021/4/23 10:46 + * @Version 1.0 + */ +public class AlarmStrategyConfig { + /** + *  采集点权重 例如:2 则为每两次判定一次 必须为正整数 + */ + private String alarmWeight; + + /** + * 作业占比阀值 行驶路段数占比最小值(及满足多少占比可作为一次) + */ + private String proportion; +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java new file mode 100644 index 0000000..8359d1b --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/GPSCalculatorUtil.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.system.alarm.util; + +import java.util.List; + +/** + * 点位信息判定工具类 + */ +public class GPSCalculatorUtil { + + private static double EARTH_RADIUS = 6378137; + + /** + * 计算线段p1p2的距离 + * + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToPoint(Point p1, Point p2) { + if (p1.equals(p2)) { + return 0.0; + } + if ((Math.abs(p1.getLng() - p2.getLng()) < 0.0000000001) && (Math.abs(p1.getLat() - p2.getLat()) < 0.0000000001)) { + return 0.0; + } + double c = Math.sin(p1.getLat()) * Math.sin(p2.getLat()) + Math.cos(p1.getLat()) * Math.cos(p2.getLat()) * Math.cos(p1.getLng() - p2.getLng()); + if (Math.abs(c - 1) < 0.0000000001) { + return 0.0; + } + double distance = EARTH_RADIUS * Math.acos(c) * Math.PI / 180; + + return distance; + } + + /** + * 计算点p到线段p1p2之间的距离 + * + * @param p + * @param p1 + * @param p2 + * @return + */ + public static double calDistancePointToLine(Point p, Point p1, Point p2) { + double dist = 0; + double p1p2; + double pp1; + double pp2; + // 线段的长度 + p1p2 = calDistancePointToPoint(p1, p2); + // (x1,y1)到点的距离 + pp1 = calDistancePointToPoint(p, p1); + // (x2,y2)到点的距离 + pp2 = calDistancePointToPoint(p, p2); + + if (pp2 * pp2 >= p1p2 * p1p2 + pp1 * pp1) { + dist = pp1; + return dist; + } + + if (pp1 * pp1 >= p1p2 * p1p2 + pp2 * pp2) { + dist = pp2; + return dist; + } + // 半周长 + double hc = (p1p2 + pp1 + pp2) / 2; + // 海伦公式求面积 + double s = Math.sqrt(hc * (hc - p1p2) * (hc - pp1) * (hc - pp2)); + // 返回点到线的距离(利用三角形面积公式求高) + dist = 2 * s / p1p2; + return dist; + } + + /** + * 计算点是否在矩形内 + * + * @param p + * @param max + * @param min + * @return + */ + public static boolean isPointInRect(Point p, Point max, Point min) { + if (p.getLng() < min.getLng() || p.getLng() > max.getLng() || p.getLat() < min.getLat() || p.getLat() > max.getLat()) { + return false; + } else { + return true; + } + } + + + /** + * 计算点是否在多边形内 + * + * @param p + * @param points + * @return + */ + public static boolean isPointInPolygon(Point p, List points) { + int nvert = points.size(); + int i = 0; + int j = 0; + boolean c = false; + + for (i = 0, j = nvert - 1; i < nvert; j = i++) { + if (((points.get(i).getLat() > p.getLat()) != (points.get(j).getLat() > p.getLat())) && + (p.getLng() < (points.get(j).getLng() - points.get(i).getLng()) * (p.getLat() - points.get(i).getLat()) / (points.get(j).getLat() - points.get(i).getLat()) + points.get(i).getLng())) { + c = !c; + } + } + return c; + } + + public static void main(String[] args) { + Point p1 = new Point("116.626215", "28.249713"); + Point p2 = new Point("116.635054", "28.256459"); + Point p = new Point("116.6306345", "28.253086"); + System.out.println(calDistancePointToLine(p, p1, p2)); + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java new file mode 100644 index 0000000..2e8e47e --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/alarm/util/Point.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.alarm.util; + +/** + * 点位信息 + */ +public class Point { + private Double lng; + private Double lat; + + public Point(String lng, String lat) { + this.lng = Double.parseDouble(lng); + this.lat = Double.parseDouble(lat); + } + + public Double getLng() { + return lng; + } + + public void setLng(Double lng) { + this.lng = lng; + } + + public Double getLat() { + return lat; + } + + public void setLat(Double lat) { + this.lat = lat; + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java new file mode 100644 index 0000000..d051c70 --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/controller/CarPositionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.modular.car.model.BusCarInfo; +import com.casic.missiles.modular.car.service.IBusCarInfoSupportService; +import com.casic.missiles.modular.position.dto.CarPositionDto; +import com.casic.missiles.modular.position.es.BusCarPosition; +import com.casic.missiles.modular.position.service.IBusCarPositionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName CarPositionController + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 13:45 + * @Version 1.0 + */ +@RestController +@RequestMapping("/carPosition") +public class CarPositionController { + @Autowired + private ICommonPermissionService permissionService; + @Autowired + private IBusCarInfoSupportService carInfoSupportService; + @Autowired + private IBusCarPositionService busCarPositionService; + /** + * 跟踪(查询车辆最新位置) + */ + @RequestMapping("/track") + public Object track(Long carId){ + BusCarInfo carInfo = carInfoSupportService.selectByCarId(carId); + BusCarPosition positionInfo = busCarPositionService.selectLastestCarPosition(carId); + CarPositionDto carPositionDto = new CarPositionDto(); + CarPositionDto.convCarInfo(carInfo,carPositionDto); + CarPositionDto.convPositionInfo(positionInfo,carPositionDto); + carPositionDto.setStatus(busCarPositionService.getCarStatus(positionInfo)); + return ResponseData.success(carPositionDto); + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java new file mode 100644 index 0000000..d1fdc33 --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmRecordSupportServiceImpl.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.alarm.model.BusAlarmRecord; +import com.casic.missiles.modular.alarm.service.IBusAlarmRecordSupportService; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName BusAlarmRecordSupportServiceImpl + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 14:24 + * @Version 1.0 + */ +@Component +public class BusAlarmRecordSupportServiceImpl implements IBusAlarmRecordSupportService { + @Override + public List selectAlarm(Long aLong, String s, String s1) { + return null; + } +} diff --git a/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmThresholdSupportServiceImpl.java b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmThresholdSupportServiceImpl.java new file mode 100644 index 0000000..16f715a --- /dev/null +++ b/casic-service-car/src/main/java/com/casic/missiles/modular/system/service/impl/BusAlarmThresholdSupportServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.alarm.model.BusAlarmThreshold; +import com.casic.missiles.modular.alarm.service.IBusAlarmThresholdSupportService; +import org.springframework.stereotype.Component; + +/** + * @ClassName BusAlarmThresholdSupportServiceImpl + * @Description TODO + * @Author lenovo + * @Date 2021/4/23 14:10 + * @Version 1.0 + */ +@Component +public class BusAlarmThresholdSupportServiceImpl implements IBusAlarmThresholdSupportService { + @Override + public BusAlarmThreshold selectByCarId(Long aLong) { + return null; + } +} diff --git a/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/statistics/StatisticsController.java b/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/statistics/StatisticsController.java index 0005292..d07a135 100644 --- a/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/statistics/StatisticsController.java +++ b/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/statistics/StatisticsController.java @@ -33,7 +33,7 @@ @RequestMapping("/statistic") public class StatisticsController extends BaseController { - @Value("${mybatis-plus.configuration-properties.bizDataBaseName}") + @Value("${mybatis-plus.configuration-properties.sanitationBaseName}") private String bizDataBaseName; @Value("${mybatis-plus.configuration-properties.carDataBaseName}") private String carDataBaseName; diff --git a/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/system/dao/mapping/JobRecordMapper.xml b/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/system/dao/mapping/JobRecordMapper.xml index b110887..a854ac4 100644 --- a/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/system/dao/mapping/JobRecordMapper.xml +++ b/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/system/dao/mapping/JobRecordMapper.xml @@ -35,7 +35,7 @@ b.CHARGE_PHONE AS chargePersonPhone, c.ROUTE_NAME as ROUTENAME FROM - ${bizDataBaseName}.dcms_car_job_record a + ${sanitationBaseName}.dcms_car_job_record a INNER JOIN ${carDataBaseName}.bus_car_info b ON a.CAR_ID = b.ID INNER JOIN ${carDataBaseName}.bus_route_info c ON a.ROUTE_ID = c.ID diff --git a/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/system/dao/mapping/JobStatisticsDayMapper.xml b/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/system/dao/mapping/JobStatisticsDayMapper.xml index cfe6c60..9c4605e 100644 --- a/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/system/dao/mapping/JobStatisticsDayMapper.xml +++ b/casic-service-job-monitor/src/main/java/com/casic/missiles/modular/system/dao/mapping/JobStatisticsDayMapper.xml @@ -21,7 +21,7 @@ count(1) AS count, date_format( CREATE_TIME, '%Y-%m-%d' ) AS name FROM - ${bizDataBaseName}.dcms_toilet_clean_log + ${sanitationBaseName}.dcms_toilet_clean_log ${ew.sqlSegment} @@ -34,7 +34,7 @@ count(1) AS count, date_format( CREATE_TIME, '%Y-%m' ) AS name FROM - ${bizDataBaseName}.dcms_toilet_clean_log + ${sanitationBaseName}.dcms_toilet_clean_log ${ew.sqlSegment} @@ -47,7 +47,7 @@ count(1) AS count, date_format(a.CURR_DAY, '%Y-%m' ) AS name FROM - ${bizDataBaseName}.dcms_car_job_statistics_day a + ${sanitationBaseName}.dcms_car_job_statistics_day a INNER JOIN ${carDataBaseName}.bus_car_info b on a.CAR_ID = b.ID @@ -61,7 +61,7 @@ count(1) AS count, date_format( a.CURR_DAY, '%Y-%m-%d' ) AS name FROM - ${bizDataBaseName}.dcms_car_job_statistics_day a + ${sanitationBaseName}.dcms_car_job_statistics_day a INNER JOIN ${carDataBaseName}.bus_car_info b on a.CAR_ID = b.ID @@ -72,7 +72,7 @@