diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml new file mode 100644 index 0000000..91a2712 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml @@ -0,0 +1,19 @@ + + + + + + + ID AS id, + PLAN_TIME AS planTime, + REGION_RESULT AS regionResult + + + + \ No newline at end of file diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml new file mode 100644 index 0000000..91a2712 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml @@ -0,0 +1,19 @@ + + + + + + + ID AS id, + PLAN_TIME AS planTime, + REGION_RESULT AS regionResult + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml index e347d2f..561ea8a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml @@ -7,14 +7,14 @@ ID AS id, ROBOT_ID AS robotId, PLAN_TIME AS planTime, - PLAN_TYPE AS planType, ROUTE_RESULT AS routeResult - SELECT FROM bus_task_route AS btr + WHERE btr.ROBOT_ID = #{robotId} ORDER BY btr.PLAN_TIME DESC LIMIT 1 diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml new file mode 100644 index 0000000..91a2712 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml @@ -0,0 +1,19 @@ + + + + + + + ID AS id, + PLAN_TIME AS planTime, + REGION_RESULT AS regionResult + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml index e347d2f..561ea8a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml @@ -7,14 +7,14 @@ ID AS id, ROBOT_ID AS robotId, PLAN_TIME AS planTime, - PLAN_TYPE AS planType, ROUTE_RESULT AS routeResult - SELECT FROM bus_task_route AS btr + WHERE btr.ROBOT_ID = #{robotId} ORDER BY btr.PLAN_TIME DESC LIMIT 1 diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java new file mode 100644 index 0000000..9a9cc11 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RouteModel; +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RegionPlanDTO { + private Long regionId; + private String planTime; + private RegionModel regionResult; + private List routeResult; + + @Data + public static class RouteResult { + private String robotId; + private RouteModel routeModel; + } +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml new file mode 100644 index 0000000..91a2712 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml @@ -0,0 +1,19 @@ + + + + + + + ID AS id, + PLAN_TIME AS planTime, + REGION_RESULT AS regionResult + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml index e347d2f..561ea8a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml @@ -7,14 +7,14 @@ ID AS id, ROBOT_ID AS robotId, PLAN_TIME AS planTime, - PLAN_TYPE AS planType, ROUTE_RESULT AS routeResult - SELECT FROM bus_task_route AS btr + WHERE btr.ROBOT_ID = #{robotId} ORDER BY btr.PLAN_TIME DESC LIMIT 1 diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java new file mode 100644 index 0000000..9a9cc11 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RouteModel; +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RegionPlanDTO { + private Long regionId; + private String planTime; + private RegionModel regionResult; + private List routeResult; + + @Data + public static class RouteResult { + private String robotId; + private RouteModel routeModel; + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java deleted file mode 100644 index 93c432f..0000000 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.missiles.modular.system.dto; - -import com.casic.missiles.modular.system.model.RoutePlan; -import lombok.Data; - -/** - * @author a203 - */ -@Data -public class RoutePlanDTO { - /** - * 路线规划ID,数据库主键自动生成 - */ - private Long routeId; - /** - * 机器人ID - */ - private Integer robotId; - /** - * 路线规划生成的时间 - */ - private String planTime; - /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - private String planType; - /** - * 规划结果 - */ - private String routeResult; - - public RoutePlanDTO(RoutePlan routePlan) { - this.routeId = routePlan.getId(); - this.planTime = routePlan.getPlanTime(); - this.planType = routePlan.getPlanType(); - this.routeResult = routePlan.getRouteResult(); - } -} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml new file mode 100644 index 0000000..91a2712 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml @@ -0,0 +1,19 @@ + + + + + + + ID AS id, + PLAN_TIME AS planTime, + REGION_RESULT AS regionResult + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml index e347d2f..561ea8a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml @@ -7,14 +7,14 @@ ID AS id, ROBOT_ID AS robotId, PLAN_TIME AS planTime, - PLAN_TYPE AS planType, ROUTE_RESULT AS routeResult - SELECT FROM bus_task_route AS btr + WHERE btr.ROBOT_ID = #{robotId} ORDER BY btr.PLAN_TIME DESC LIMIT 1 diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java new file mode 100644 index 0000000..9a9cc11 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RouteModel; +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RegionPlanDTO { + private Long regionId; + private String planTime; + private RegionModel regionResult; + private List routeResult; + + @Data + public static class RouteResult { + private String robotId; + private RouteModel routeModel; + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java deleted file mode 100644 index 93c432f..0000000 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.missiles.modular.system.dto; - -import com.casic.missiles.modular.system.model.RoutePlan; -import lombok.Data; - -/** - * @author a203 - */ -@Data -public class RoutePlanDTO { - /** - * 路线规划ID,数据库主键自动生成 - */ - private Long routeId; - /** - * 机器人ID - */ - private Integer robotId; - /** - * 路线规划生成的时间 - */ - private String planTime; - /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - private String planType; - /** - * 规划结果 - */ - private String routeResult; - - public RoutePlanDTO(RoutePlan routePlan) { - this.routeId = routePlan.getId(); - this.planTime = routePlan.getPlanTime(); - this.planType = routePlan.getPlanType(); - this.routeResult = routePlan.getRouteResult(); - } -} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java new file mode 100644 index 0000000..0a0bc82 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java @@ -0,0 +1,137 @@ +package com.casic.missiles.modular.system.model; + +import java.util.List; + +/** + * 区域规划结果模型 + * + * @author a203 + */ +public class RegionModel { + + /** + * regionRadius : 32.26km + * pointCount : 2 + * regionPoints : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * robotTargets : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * count : 2 + * robotIds : 0,1 + * contour : 轮廓标志位:多边形,2个轮廓点 + */ + + private String regionRadius; + private int pointCount; + private int count; + private String robotIds; + private String contour; + private List regionPoints; + private List robotTargets; + + public String getRegionRadius() { + return regionRadius; + } + + public void setRegionRadius(String regionRadius) { + this.regionRadius = regionRadius; + } + + public int getPointCount() { + return pointCount; + } + + public void setPointCount(int pointCount) { + this.pointCount = pointCount; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getRobotIds() { + return robotIds; + } + + public void setRobotIds(String robotIds) { + this.robotIds = robotIds; + } + + public String getContour() { + return contour; + } + + public void setContour(String contour) { + this.contour = contour; + } + + public List getRegionPoints() { + return regionPoints; + } + + public void setRegionPoints(List regionPoints) { + this.regionPoints = regionPoints; + } + + public List getRobotTargets() { + return robotTargets; + } + + public void setRobotTargets(List robotTargets) { + this.robotTargets = robotTargets; + } + + public static class RegionPointsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } + + public static class RobotTargetsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml new file mode 100644 index 0000000..91a2712 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml @@ -0,0 +1,19 @@ + + + + + + + ID AS id, + PLAN_TIME AS planTime, + REGION_RESULT AS regionResult + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml index e347d2f..561ea8a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml @@ -7,14 +7,14 @@ ID AS id, ROBOT_ID AS robotId, PLAN_TIME AS planTime, - PLAN_TYPE AS planType, ROUTE_RESULT AS routeResult - SELECT FROM bus_task_route AS btr + WHERE btr.ROBOT_ID = #{robotId} ORDER BY btr.PLAN_TIME DESC LIMIT 1 diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java new file mode 100644 index 0000000..9a9cc11 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RouteModel; +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RegionPlanDTO { + private Long regionId; + private String planTime; + private RegionModel regionResult; + private List routeResult; + + @Data + public static class RouteResult { + private String robotId; + private RouteModel routeModel; + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java deleted file mode 100644 index 93c432f..0000000 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.missiles.modular.system.dto; - -import com.casic.missiles.modular.system.model.RoutePlan; -import lombok.Data; - -/** - * @author a203 - */ -@Data -public class RoutePlanDTO { - /** - * 路线规划ID,数据库主键自动生成 - */ - private Long routeId; - /** - * 机器人ID - */ - private Integer robotId; - /** - * 路线规划生成的时间 - */ - private String planTime; - /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - private String planType; - /** - * 规划结果 - */ - private String routeResult; - - public RoutePlanDTO(RoutePlan routePlan) { - this.routeId = routePlan.getId(); - this.planTime = routePlan.getPlanTime(); - this.planType = routePlan.getPlanType(); - this.routeResult = routePlan.getRouteResult(); - } -} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java new file mode 100644 index 0000000..0a0bc82 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java @@ -0,0 +1,137 @@ +package com.casic.missiles.modular.system.model; + +import java.util.List; + +/** + * 区域规划结果模型 + * + * @author a203 + */ +public class RegionModel { + + /** + * regionRadius : 32.26km + * pointCount : 2 + * regionPoints : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * robotTargets : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * count : 2 + * robotIds : 0,1 + * contour : 轮廓标志位:多边形,2个轮廓点 + */ + + private String regionRadius; + private int pointCount; + private int count; + private String robotIds; + private String contour; + private List regionPoints; + private List robotTargets; + + public String getRegionRadius() { + return regionRadius; + } + + public void setRegionRadius(String regionRadius) { + this.regionRadius = regionRadius; + } + + public int getPointCount() { + return pointCount; + } + + public void setPointCount(int pointCount) { + this.pointCount = pointCount; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getRobotIds() { + return robotIds; + } + + public void setRobotIds(String robotIds) { + this.robotIds = robotIds; + } + + public String getContour() { + return contour; + } + + public void setContour(String contour) { + this.contour = contour; + } + + public List getRegionPoints() { + return regionPoints; + } + + public void setRegionPoints(List regionPoints) { + this.regionPoints = regionPoints; + } + + public List getRobotTargets() { + return robotTargets; + } + + public void setRobotTargets(List robotTargets) { + this.robotTargets = robotTargets; + } + + public static class RegionPointsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } + + public static class RobotTargetsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java new file mode 100644 index 0000000..45aadd9 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java @@ -0,0 +1,122 @@ +package com.casic.missiles.modular.system.model; + +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RouteModel { + + /** + * robotRoutes : [{"depth":316.6,"headingAngle":31.66,"lat":17.39223199775081,"lng":109.32222199129043,"pitchAngle":109.01}] + * sumTime : 3226 + * routeCount : 1 + * sumDistance : 589 + * sumPower : 48512 + */ + + private int sumTime; + private int routeCount; + private int sumDistance; + private int sumPower; + private List robotRoutes; + + public int getSumTime() { + return sumTime; + } + + public void setSumTime(int sumTime) { + this.sumTime = sumTime; + } + + public int getRouteCount() { + return routeCount; + } + + public void setRouteCount(int routeCount) { + this.routeCount = routeCount; + } + + public int getSumDistance() { + return sumDistance; + } + + public void setSumDistance(int sumDistance) { + this.sumDistance = sumDistance; + } + + public int getSumPower() { + return sumPower; + } + + public void setSumPower(int sumPower) { + this.sumPower = sumPower; + } + + public List getRobotRoutes() { + return robotRoutes; + } + + public void setRobotRoutes(List robotRoutes) { + this.robotRoutes = robotRoutes; + } + + public static class RobotRoutesBean { + /** + * depth : 316.6 + * headingAngle : 31.66 + * lat : 17.39223199775081 + * lng : 109.32222199129043 + * pitchAngle : 109.01 + */ + + private double depth; + private double headingAngle; + private double lat; + private double lng; + private double pitchAngle; + + public double getDepth() { + return depth; + } + + public void setDepth(double depth) { + this.depth = depth; + } + + public double getHeadingAngle() { + return headingAngle; + } + + public void setHeadingAngle(double headingAngle) { + this.headingAngle = headingAngle; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + + public double getPitchAngle() { + return pitchAngle; + } + + public void setPitchAngle(double pitchAngle) { + this.pitchAngle = pitchAngle; + } + } +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml new file mode 100644 index 0000000..91a2712 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml @@ -0,0 +1,19 @@ + + + + + + + ID AS id, + PLAN_TIME AS planTime, + REGION_RESULT AS regionResult + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml index e347d2f..561ea8a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml @@ -7,14 +7,14 @@ ID AS id, ROBOT_ID AS robotId, PLAN_TIME AS planTime, - PLAN_TYPE AS planType, ROUTE_RESULT AS routeResult - SELECT FROM bus_task_route AS btr + WHERE btr.ROBOT_ID = #{robotId} ORDER BY btr.PLAN_TIME DESC LIMIT 1 diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java new file mode 100644 index 0000000..9a9cc11 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RouteModel; +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RegionPlanDTO { + private Long regionId; + private String planTime; + private RegionModel regionResult; + private List routeResult; + + @Data + public static class RouteResult { + private String robotId; + private RouteModel routeModel; + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java deleted file mode 100644 index 93c432f..0000000 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.missiles.modular.system.dto; - -import com.casic.missiles.modular.system.model.RoutePlan; -import lombok.Data; - -/** - * @author a203 - */ -@Data -public class RoutePlanDTO { - /** - * 路线规划ID,数据库主键自动生成 - */ - private Long routeId; - /** - * 机器人ID - */ - private Integer robotId; - /** - * 路线规划生成的时间 - */ - private String planTime; - /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - private String planType; - /** - * 规划结果 - */ - private String routeResult; - - public RoutePlanDTO(RoutePlan routePlan) { - this.routeId = routePlan.getId(); - this.planTime = routePlan.getPlanTime(); - this.planType = routePlan.getPlanType(); - this.routeResult = routePlan.getRouteResult(); - } -} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java new file mode 100644 index 0000000..0a0bc82 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java @@ -0,0 +1,137 @@ +package com.casic.missiles.modular.system.model; + +import java.util.List; + +/** + * 区域规划结果模型 + * + * @author a203 + */ +public class RegionModel { + + /** + * regionRadius : 32.26km + * pointCount : 2 + * regionPoints : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * robotTargets : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * count : 2 + * robotIds : 0,1 + * contour : 轮廓标志位:多边形,2个轮廓点 + */ + + private String regionRadius; + private int pointCount; + private int count; + private String robotIds; + private String contour; + private List regionPoints; + private List robotTargets; + + public String getRegionRadius() { + return regionRadius; + } + + public void setRegionRadius(String regionRadius) { + this.regionRadius = regionRadius; + } + + public int getPointCount() { + return pointCount; + } + + public void setPointCount(int pointCount) { + this.pointCount = pointCount; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getRobotIds() { + return robotIds; + } + + public void setRobotIds(String robotIds) { + this.robotIds = robotIds; + } + + public String getContour() { + return contour; + } + + public void setContour(String contour) { + this.contour = contour; + } + + public List getRegionPoints() { + return regionPoints; + } + + public void setRegionPoints(List regionPoints) { + this.regionPoints = regionPoints; + } + + public List getRobotTargets() { + return robotTargets; + } + + public void setRobotTargets(List robotTargets) { + this.robotTargets = robotTargets; + } + + public static class RegionPointsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } + + public static class RobotTargetsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java new file mode 100644 index 0000000..45aadd9 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java @@ -0,0 +1,122 @@ +package com.casic.missiles.modular.system.model; + +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RouteModel { + + /** + * robotRoutes : [{"depth":316.6,"headingAngle":31.66,"lat":17.39223199775081,"lng":109.32222199129043,"pitchAngle":109.01}] + * sumTime : 3226 + * routeCount : 1 + * sumDistance : 589 + * sumPower : 48512 + */ + + private int sumTime; + private int routeCount; + private int sumDistance; + private int sumPower; + private List robotRoutes; + + public int getSumTime() { + return sumTime; + } + + public void setSumTime(int sumTime) { + this.sumTime = sumTime; + } + + public int getRouteCount() { + return routeCount; + } + + public void setRouteCount(int routeCount) { + this.routeCount = routeCount; + } + + public int getSumDistance() { + return sumDistance; + } + + public void setSumDistance(int sumDistance) { + this.sumDistance = sumDistance; + } + + public int getSumPower() { + return sumPower; + } + + public void setSumPower(int sumPower) { + this.sumPower = sumPower; + } + + public List getRobotRoutes() { + return robotRoutes; + } + + public void setRobotRoutes(List robotRoutes) { + this.robotRoutes = robotRoutes; + } + + public static class RobotRoutesBean { + /** + * depth : 316.6 + * headingAngle : 31.66 + * lat : 17.39223199775081 + * lng : 109.32222199129043 + * pitchAngle : 109.01 + */ + + private double depth; + private double headingAngle; + private double lat; + private double lng; + private double pitchAngle; + + public double getDepth() { + return depth; + } + + public void setDepth(double depth) { + this.depth = depth; + } + + public double getHeadingAngle() { + return headingAngle; + } + + public void setHeadingAngle(double headingAngle) { + this.headingAngle = headingAngle; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + + public double getPitchAngle() { + return pitchAngle; + } + + public void setPitchAngle(double pitchAngle) { + this.pitchAngle = pitchAngle; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java new file mode 100644 index 0000000..42751f5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * 算法规划结果 服务类 + * + * @author a203 + */ +public interface IRegionPlanService extends IService { + /** + * 获取最新的区域规划结果 + * + * @return {@link RegionPlanDTO} + */ + RegionPlanDTO selectCurrentPlan(); +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml new file mode 100644 index 0000000..91a2712 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml @@ -0,0 +1,19 @@ + + + + + + + ID AS id, + PLAN_TIME AS planTime, + REGION_RESULT AS regionResult + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml index e347d2f..561ea8a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml @@ -7,14 +7,14 @@ ID AS id, ROBOT_ID AS robotId, PLAN_TIME AS planTime, - PLAN_TYPE AS planType, ROUTE_RESULT AS routeResult - SELECT FROM bus_task_route AS btr + WHERE btr.ROBOT_ID = #{robotId} ORDER BY btr.PLAN_TIME DESC LIMIT 1 diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java new file mode 100644 index 0000000..9a9cc11 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RouteModel; +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RegionPlanDTO { + private Long regionId; + private String planTime; + private RegionModel regionResult; + private List routeResult; + + @Data + public static class RouteResult { + private String robotId; + private RouteModel routeModel; + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java deleted file mode 100644 index 93c432f..0000000 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.missiles.modular.system.dto; - -import com.casic.missiles.modular.system.model.RoutePlan; -import lombok.Data; - -/** - * @author a203 - */ -@Data -public class RoutePlanDTO { - /** - * 路线规划ID,数据库主键自动生成 - */ - private Long routeId; - /** - * 机器人ID - */ - private Integer robotId; - /** - * 路线规划生成的时间 - */ - private String planTime; - /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - private String planType; - /** - * 规划结果 - */ - private String routeResult; - - public RoutePlanDTO(RoutePlan routePlan) { - this.routeId = routePlan.getId(); - this.planTime = routePlan.getPlanTime(); - this.planType = routePlan.getPlanType(); - this.routeResult = routePlan.getRouteResult(); - } -} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java new file mode 100644 index 0000000..0a0bc82 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java @@ -0,0 +1,137 @@ +package com.casic.missiles.modular.system.model; + +import java.util.List; + +/** + * 区域规划结果模型 + * + * @author a203 + */ +public class RegionModel { + + /** + * regionRadius : 32.26km + * pointCount : 2 + * regionPoints : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * robotTargets : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * count : 2 + * robotIds : 0,1 + * contour : 轮廓标志位:多边形,2个轮廓点 + */ + + private String regionRadius; + private int pointCount; + private int count; + private String robotIds; + private String contour; + private List regionPoints; + private List robotTargets; + + public String getRegionRadius() { + return regionRadius; + } + + public void setRegionRadius(String regionRadius) { + this.regionRadius = regionRadius; + } + + public int getPointCount() { + return pointCount; + } + + public void setPointCount(int pointCount) { + this.pointCount = pointCount; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getRobotIds() { + return robotIds; + } + + public void setRobotIds(String robotIds) { + this.robotIds = robotIds; + } + + public String getContour() { + return contour; + } + + public void setContour(String contour) { + this.contour = contour; + } + + public List getRegionPoints() { + return regionPoints; + } + + public void setRegionPoints(List regionPoints) { + this.regionPoints = regionPoints; + } + + public List getRobotTargets() { + return robotTargets; + } + + public void setRobotTargets(List robotTargets) { + this.robotTargets = robotTargets; + } + + public static class RegionPointsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } + + public static class RobotTargetsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java new file mode 100644 index 0000000..45aadd9 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java @@ -0,0 +1,122 @@ +package com.casic.missiles.modular.system.model; + +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RouteModel { + + /** + * robotRoutes : [{"depth":316.6,"headingAngle":31.66,"lat":17.39223199775081,"lng":109.32222199129043,"pitchAngle":109.01}] + * sumTime : 3226 + * routeCount : 1 + * sumDistance : 589 + * sumPower : 48512 + */ + + private int sumTime; + private int routeCount; + private int sumDistance; + private int sumPower; + private List robotRoutes; + + public int getSumTime() { + return sumTime; + } + + public void setSumTime(int sumTime) { + this.sumTime = sumTime; + } + + public int getRouteCount() { + return routeCount; + } + + public void setRouteCount(int routeCount) { + this.routeCount = routeCount; + } + + public int getSumDistance() { + return sumDistance; + } + + public void setSumDistance(int sumDistance) { + this.sumDistance = sumDistance; + } + + public int getSumPower() { + return sumPower; + } + + public void setSumPower(int sumPower) { + this.sumPower = sumPower; + } + + public List getRobotRoutes() { + return robotRoutes; + } + + public void setRobotRoutes(List robotRoutes) { + this.robotRoutes = robotRoutes; + } + + public static class RobotRoutesBean { + /** + * depth : 316.6 + * headingAngle : 31.66 + * lat : 17.39223199775081 + * lng : 109.32222199129043 + * pitchAngle : 109.01 + */ + + private double depth; + private double headingAngle; + private double lat; + private double lng; + private double pitchAngle; + + public double getDepth() { + return depth; + } + + public void setDepth(double depth) { + this.depth = depth; + } + + public double getHeadingAngle() { + return headingAngle; + } + + public void setHeadingAngle(double headingAngle) { + this.headingAngle = headingAngle; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + + public double getPitchAngle() { + return pitchAngle; + } + + public void setPitchAngle(double pitchAngle) { + this.pitchAngle = pitchAngle; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java new file mode 100644 index 0000000..42751f5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * 算法规划结果 服务类 + * + * @author a203 + */ +public interface IRegionPlanService extends IService { + /** + * 获取最新的区域规划结果 + * + * @return {@link RegionPlanDTO} + */ + RegionPlanDTO selectCurrentPlan(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java new file mode 100644 index 0000000..0e82b0f --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.RouteModel; +import com.casic.missiles.modular.system.model.RoutePlan; + +/** + * 算法规划结果 服务类 + * + * @author a203 + */ +public interface IRoutePlanService extends IService { + /** + * 获取最新的规划结果,包括区域和路线 + * + * @param robotId 机器人ID + * @return {@link RouteModel} + */ + RouteModel selectCurrentPlan(String robotId); +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml new file mode 100644 index 0000000..91a2712 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml @@ -0,0 +1,19 @@ + + + + + + + ID AS id, + PLAN_TIME AS planTime, + REGION_RESULT AS regionResult + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml index e347d2f..561ea8a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml @@ -7,14 +7,14 @@ ID AS id, ROBOT_ID AS robotId, PLAN_TIME AS planTime, - PLAN_TYPE AS planType, ROUTE_RESULT AS routeResult - SELECT FROM bus_task_route AS btr + WHERE btr.ROBOT_ID = #{robotId} ORDER BY btr.PLAN_TIME DESC LIMIT 1 diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java new file mode 100644 index 0000000..9a9cc11 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RouteModel; +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RegionPlanDTO { + private Long regionId; + private String planTime; + private RegionModel regionResult; + private List routeResult; + + @Data + public static class RouteResult { + private String robotId; + private RouteModel routeModel; + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java deleted file mode 100644 index 93c432f..0000000 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.missiles.modular.system.dto; - -import com.casic.missiles.modular.system.model.RoutePlan; -import lombok.Data; - -/** - * @author a203 - */ -@Data -public class RoutePlanDTO { - /** - * 路线规划ID,数据库主键自动生成 - */ - private Long routeId; - /** - * 机器人ID - */ - private Integer robotId; - /** - * 路线规划生成的时间 - */ - private String planTime; - /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - private String planType; - /** - * 规划结果 - */ - private String routeResult; - - public RoutePlanDTO(RoutePlan routePlan) { - this.routeId = routePlan.getId(); - this.planTime = routePlan.getPlanTime(); - this.planType = routePlan.getPlanType(); - this.routeResult = routePlan.getRouteResult(); - } -} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java new file mode 100644 index 0000000..0a0bc82 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java @@ -0,0 +1,137 @@ +package com.casic.missiles.modular.system.model; + +import java.util.List; + +/** + * 区域规划结果模型 + * + * @author a203 + */ +public class RegionModel { + + /** + * regionRadius : 32.26km + * pointCount : 2 + * regionPoints : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * robotTargets : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * count : 2 + * robotIds : 0,1 + * contour : 轮廓标志位:多边形,2个轮廓点 + */ + + private String regionRadius; + private int pointCount; + private int count; + private String robotIds; + private String contour; + private List regionPoints; + private List robotTargets; + + public String getRegionRadius() { + return regionRadius; + } + + public void setRegionRadius(String regionRadius) { + this.regionRadius = regionRadius; + } + + public int getPointCount() { + return pointCount; + } + + public void setPointCount(int pointCount) { + this.pointCount = pointCount; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getRobotIds() { + return robotIds; + } + + public void setRobotIds(String robotIds) { + this.robotIds = robotIds; + } + + public String getContour() { + return contour; + } + + public void setContour(String contour) { + this.contour = contour; + } + + public List getRegionPoints() { + return regionPoints; + } + + public void setRegionPoints(List regionPoints) { + this.regionPoints = regionPoints; + } + + public List getRobotTargets() { + return robotTargets; + } + + public void setRobotTargets(List robotTargets) { + this.robotTargets = robotTargets; + } + + public static class RegionPointsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } + + public static class RobotTargetsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java new file mode 100644 index 0000000..45aadd9 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java @@ -0,0 +1,122 @@ +package com.casic.missiles.modular.system.model; + +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RouteModel { + + /** + * robotRoutes : [{"depth":316.6,"headingAngle":31.66,"lat":17.39223199775081,"lng":109.32222199129043,"pitchAngle":109.01}] + * sumTime : 3226 + * routeCount : 1 + * sumDistance : 589 + * sumPower : 48512 + */ + + private int sumTime; + private int routeCount; + private int sumDistance; + private int sumPower; + private List robotRoutes; + + public int getSumTime() { + return sumTime; + } + + public void setSumTime(int sumTime) { + this.sumTime = sumTime; + } + + public int getRouteCount() { + return routeCount; + } + + public void setRouteCount(int routeCount) { + this.routeCount = routeCount; + } + + public int getSumDistance() { + return sumDistance; + } + + public void setSumDistance(int sumDistance) { + this.sumDistance = sumDistance; + } + + public int getSumPower() { + return sumPower; + } + + public void setSumPower(int sumPower) { + this.sumPower = sumPower; + } + + public List getRobotRoutes() { + return robotRoutes; + } + + public void setRobotRoutes(List robotRoutes) { + this.robotRoutes = robotRoutes; + } + + public static class RobotRoutesBean { + /** + * depth : 316.6 + * headingAngle : 31.66 + * lat : 17.39223199775081 + * lng : 109.32222199129043 + * pitchAngle : 109.01 + */ + + private double depth; + private double headingAngle; + private double lat; + private double lng; + private double pitchAngle; + + public double getDepth() { + return depth; + } + + public void setDepth(double depth) { + this.depth = depth; + } + + public double getHeadingAngle() { + return headingAngle; + } + + public void setHeadingAngle(double headingAngle) { + this.headingAngle = headingAngle; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + + public double getPitchAngle() { + return pitchAngle; + } + + public void setPitchAngle(double pitchAngle) { + this.pitchAngle = pitchAngle; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java new file mode 100644 index 0000000..42751f5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * 算法规划结果 服务类 + * + * @author a203 + */ +public interface IRegionPlanService extends IService { + /** + * 获取最新的区域规划结果 + * + * @return {@link RegionPlanDTO} + */ + RegionPlanDTO selectCurrentPlan(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java new file mode 100644 index 0000000..0e82b0f --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.RouteModel; +import com.casic.missiles.modular.system.model.RoutePlan; + +/** + * 算法规划结果 服务类 + * + * @author a203 + */ +public interface IRoutePlanService extends IService { + /** + * 获取最新的规划结果,包括区域和路线 + * + * @param robotId 机器人ID + * @return {@link RouteModel} + */ + RouteModel selectCurrentPlan(String robotId); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RegionPlanServiceImpl.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RegionPlanServiceImpl.java new file mode 100644 index 0000000..c3533e5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RegionPlanServiceImpl.java @@ -0,0 +1,67 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RegionPlanMapper; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RegionPlan; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import com.casic.missiles.modular.system.service.IRoutePlanService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author a203 + */ +@Service +public class RegionPlanServiceImpl extends ServiceImpl implements IRegionPlanService { + + private final IRoutePlanService routePlanService; + + public RegionPlanServiceImpl(IRoutePlanService routePlanService) { + this.routePlanService = routePlanService; + } + + @Override + public RegionPlanDTO selectCurrentPlan() { + RegionPlanDTO regionPlanDTO = new RegionPlanDTO(); + + RegionPlan region = this.baseMapper.selectLastRegion(); + regionPlanDTO.setRegionId(region.getId()); + regionPlanDTO.setPlanTime(region.getPlanTime()); + + String regionResult = region.getRegionResult(); + RegionModel regionModel = JSON.parseObject(regionResult, new TypeReference() { + }); + regionPlanDTO.setRegionResult(regionModel); + + //解析得到robotId然后再去查route表 + String robotIds = regionModel.getRobotIds(); + List routeResults = new ArrayList<>(); + if ("".equals(robotIds)) { + regionPlanDTO.setRouteResult(null); + } else if (!robotIds.contains(",")) { + RegionPlanDTO.RouteResult routeResult = new RegionPlanDTO.RouteResult(); + routeResult.setRobotId(robotIds); + routeResult.setRouteModel(routePlanService.selectCurrentPlan(robotIds)); + + routeResults.add(routeResult); + regionPlanDTO.setRouteResult(routeResults); + } else { + String[] split = robotIds.split(","); + for (String id : split) { + RegionPlanDTO.RouteResult routeResult = new RegionPlanDTO.RouteResult(); + routeResult.setRobotId(id); + routeResult.setRouteModel(routePlanService.selectCurrentPlan(id)); + + routeResults.add(routeResult); + regionPlanDTO.setRouteResult(routeResults); + } + } + return regionPlanDTO; + } +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml new file mode 100644 index 0000000..91a2712 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml @@ -0,0 +1,19 @@ + + + + + + + ID AS id, + PLAN_TIME AS planTime, + REGION_RESULT AS regionResult + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml index e347d2f..561ea8a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml @@ -7,14 +7,14 @@ ID AS id, ROBOT_ID AS robotId, PLAN_TIME AS planTime, - PLAN_TYPE AS planType, ROUTE_RESULT AS routeResult - SELECT FROM bus_task_route AS btr + WHERE btr.ROBOT_ID = #{robotId} ORDER BY btr.PLAN_TIME DESC LIMIT 1 diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java new file mode 100644 index 0000000..9a9cc11 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RouteModel; +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RegionPlanDTO { + private Long regionId; + private String planTime; + private RegionModel regionResult; + private List routeResult; + + @Data + public static class RouteResult { + private String robotId; + private RouteModel routeModel; + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java deleted file mode 100644 index 93c432f..0000000 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.missiles.modular.system.dto; - -import com.casic.missiles.modular.system.model.RoutePlan; -import lombok.Data; - -/** - * @author a203 - */ -@Data -public class RoutePlanDTO { - /** - * 路线规划ID,数据库主键自动生成 - */ - private Long routeId; - /** - * 机器人ID - */ - private Integer robotId; - /** - * 路线规划生成的时间 - */ - private String planTime; - /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - private String planType; - /** - * 规划结果 - */ - private String routeResult; - - public RoutePlanDTO(RoutePlan routePlan) { - this.routeId = routePlan.getId(); - this.planTime = routePlan.getPlanTime(); - this.planType = routePlan.getPlanType(); - this.routeResult = routePlan.getRouteResult(); - } -} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java new file mode 100644 index 0000000..0a0bc82 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java @@ -0,0 +1,137 @@ +package com.casic.missiles.modular.system.model; + +import java.util.List; + +/** + * 区域规划结果模型 + * + * @author a203 + */ +public class RegionModel { + + /** + * regionRadius : 32.26km + * pointCount : 2 + * regionPoints : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * robotTargets : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * count : 2 + * robotIds : 0,1 + * contour : 轮廓标志位:多边形,2个轮廓点 + */ + + private String regionRadius; + private int pointCount; + private int count; + private String robotIds; + private String contour; + private List regionPoints; + private List robotTargets; + + public String getRegionRadius() { + return regionRadius; + } + + public void setRegionRadius(String regionRadius) { + this.regionRadius = regionRadius; + } + + public int getPointCount() { + return pointCount; + } + + public void setPointCount(int pointCount) { + this.pointCount = pointCount; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getRobotIds() { + return robotIds; + } + + public void setRobotIds(String robotIds) { + this.robotIds = robotIds; + } + + public String getContour() { + return contour; + } + + public void setContour(String contour) { + this.contour = contour; + } + + public List getRegionPoints() { + return regionPoints; + } + + public void setRegionPoints(List regionPoints) { + this.regionPoints = regionPoints; + } + + public List getRobotTargets() { + return robotTargets; + } + + public void setRobotTargets(List robotTargets) { + this.robotTargets = robotTargets; + } + + public static class RegionPointsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } + + public static class RobotTargetsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java new file mode 100644 index 0000000..45aadd9 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java @@ -0,0 +1,122 @@ +package com.casic.missiles.modular.system.model; + +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RouteModel { + + /** + * robotRoutes : [{"depth":316.6,"headingAngle":31.66,"lat":17.39223199775081,"lng":109.32222199129043,"pitchAngle":109.01}] + * sumTime : 3226 + * routeCount : 1 + * sumDistance : 589 + * sumPower : 48512 + */ + + private int sumTime; + private int routeCount; + private int sumDistance; + private int sumPower; + private List robotRoutes; + + public int getSumTime() { + return sumTime; + } + + public void setSumTime(int sumTime) { + this.sumTime = sumTime; + } + + public int getRouteCount() { + return routeCount; + } + + public void setRouteCount(int routeCount) { + this.routeCount = routeCount; + } + + public int getSumDistance() { + return sumDistance; + } + + public void setSumDistance(int sumDistance) { + this.sumDistance = sumDistance; + } + + public int getSumPower() { + return sumPower; + } + + public void setSumPower(int sumPower) { + this.sumPower = sumPower; + } + + public List getRobotRoutes() { + return robotRoutes; + } + + public void setRobotRoutes(List robotRoutes) { + this.robotRoutes = robotRoutes; + } + + public static class RobotRoutesBean { + /** + * depth : 316.6 + * headingAngle : 31.66 + * lat : 17.39223199775081 + * lng : 109.32222199129043 + * pitchAngle : 109.01 + */ + + private double depth; + private double headingAngle; + private double lat; + private double lng; + private double pitchAngle; + + public double getDepth() { + return depth; + } + + public void setDepth(double depth) { + this.depth = depth; + } + + public double getHeadingAngle() { + return headingAngle; + } + + public void setHeadingAngle(double headingAngle) { + this.headingAngle = headingAngle; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + + public double getPitchAngle() { + return pitchAngle; + } + + public void setPitchAngle(double pitchAngle) { + this.pitchAngle = pitchAngle; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java new file mode 100644 index 0000000..42751f5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * 算法规划结果 服务类 + * + * @author a203 + */ +public interface IRegionPlanService extends IService { + /** + * 获取最新的区域规划结果 + * + * @return {@link RegionPlanDTO} + */ + RegionPlanDTO selectCurrentPlan(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java new file mode 100644 index 0000000..0e82b0f --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.RouteModel; +import com.casic.missiles.modular.system.model.RoutePlan; + +/** + * 算法规划结果 服务类 + * + * @author a203 + */ +public interface IRoutePlanService extends IService { + /** + * 获取最新的规划结果,包括区域和路线 + * + * @param robotId 机器人ID + * @return {@link RouteModel} + */ + RouteModel selectCurrentPlan(String robotId); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RegionPlanServiceImpl.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RegionPlanServiceImpl.java new file mode 100644 index 0000000..c3533e5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RegionPlanServiceImpl.java @@ -0,0 +1,67 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RegionPlanMapper; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RegionPlan; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import com.casic.missiles.modular.system.service.IRoutePlanService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author a203 + */ +@Service +public class RegionPlanServiceImpl extends ServiceImpl implements IRegionPlanService { + + private final IRoutePlanService routePlanService; + + public RegionPlanServiceImpl(IRoutePlanService routePlanService) { + this.routePlanService = routePlanService; + } + + @Override + public RegionPlanDTO selectCurrentPlan() { + RegionPlanDTO regionPlanDTO = new RegionPlanDTO(); + + RegionPlan region = this.baseMapper.selectLastRegion(); + regionPlanDTO.setRegionId(region.getId()); + regionPlanDTO.setPlanTime(region.getPlanTime()); + + String regionResult = region.getRegionResult(); + RegionModel regionModel = JSON.parseObject(regionResult, new TypeReference() { + }); + regionPlanDTO.setRegionResult(regionModel); + + //解析得到robotId然后再去查route表 + String robotIds = regionModel.getRobotIds(); + List routeResults = new ArrayList<>(); + if ("".equals(robotIds)) { + regionPlanDTO.setRouteResult(null); + } else if (!robotIds.contains(",")) { + RegionPlanDTO.RouteResult routeResult = new RegionPlanDTO.RouteResult(); + routeResult.setRobotId(robotIds); + routeResult.setRouteModel(routePlanService.selectCurrentPlan(robotIds)); + + routeResults.add(routeResult); + regionPlanDTO.setRouteResult(routeResults); + } else { + String[] split = robotIds.split(","); + for (String id : split) { + RegionPlanDTO.RouteResult routeResult = new RegionPlanDTO.RouteResult(); + routeResult.setRobotId(id); + routeResult.setRouteModel(routePlanService.selectCurrentPlan(id)); + + routeResults.add(routeResult); + regionPlanDTO.setRouteResult(routeResults); + } + } + return regionPlanDTO; + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePlanServiceImpl.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePlanServiceImpl.java index 82231cc..79e2c33 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePlanServiceImpl.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePlanServiceImpl.java @@ -1,14 +1,14 @@ package com.casic.missiles.modular.system.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.system.dao.RoutePlanMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; +import com.casic.missiles.modular.system.model.RouteModel; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.service.IRoutePlanService; import org.springframework.stereotype.Service; -import java.util.List; - /** * @author a203 */ @@ -16,13 +16,9 @@ public class RoutePlanServiceImpl extends ServiceImpl implements IRoutePlanService { @Override - public RoutePlanDTO selectCurrentPlan() { - RoutePlan plan = this.baseMapper.selectLastOne(); - return new RoutePlanDTO(plan); - } - - @Override - public List selectRoutes(String startDate, String endDate) { - return null; + public RouteModel selectCurrentPlan(String robotId) { + RoutePlan routePlan = this.baseMapper.selectLastRoute(robotId); + return JSON.parseObject(routePlan.getRouteResult(), new TypeReference() { + }); } } diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml new file mode 100644 index 0000000..91a2712 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml @@ -0,0 +1,19 @@ + + + + + + + ID AS id, + PLAN_TIME AS planTime, + REGION_RESULT AS regionResult + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml index e347d2f..561ea8a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml @@ -7,14 +7,14 @@ ID AS id, ROBOT_ID AS robotId, PLAN_TIME AS planTime, - PLAN_TYPE AS planType, ROUTE_RESULT AS routeResult - SELECT FROM bus_task_route AS btr + WHERE btr.ROBOT_ID = #{robotId} ORDER BY btr.PLAN_TIME DESC LIMIT 1 diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java new file mode 100644 index 0000000..9a9cc11 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RouteModel; +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RegionPlanDTO { + private Long regionId; + private String planTime; + private RegionModel regionResult; + private List routeResult; + + @Data + public static class RouteResult { + private String robotId; + private RouteModel routeModel; + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java deleted file mode 100644 index 93c432f..0000000 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.missiles.modular.system.dto; - -import com.casic.missiles.modular.system.model.RoutePlan; -import lombok.Data; - -/** - * @author a203 - */ -@Data -public class RoutePlanDTO { - /** - * 路线规划ID,数据库主键自动生成 - */ - private Long routeId; - /** - * 机器人ID - */ - private Integer robotId; - /** - * 路线规划生成的时间 - */ - private String planTime; - /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - private String planType; - /** - * 规划结果 - */ - private String routeResult; - - public RoutePlanDTO(RoutePlan routePlan) { - this.routeId = routePlan.getId(); - this.planTime = routePlan.getPlanTime(); - this.planType = routePlan.getPlanType(); - this.routeResult = routePlan.getRouteResult(); - } -} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java new file mode 100644 index 0000000..0a0bc82 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java @@ -0,0 +1,137 @@ +package com.casic.missiles.modular.system.model; + +import java.util.List; + +/** + * 区域规划结果模型 + * + * @author a203 + */ +public class RegionModel { + + /** + * regionRadius : 32.26km + * pointCount : 2 + * regionPoints : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * robotTargets : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * count : 2 + * robotIds : 0,1 + * contour : 轮廓标志位:多边形,2个轮廓点 + */ + + private String regionRadius; + private int pointCount; + private int count; + private String robotIds; + private String contour; + private List regionPoints; + private List robotTargets; + + public String getRegionRadius() { + return regionRadius; + } + + public void setRegionRadius(String regionRadius) { + this.regionRadius = regionRadius; + } + + public int getPointCount() { + return pointCount; + } + + public void setPointCount(int pointCount) { + this.pointCount = pointCount; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getRobotIds() { + return robotIds; + } + + public void setRobotIds(String robotIds) { + this.robotIds = robotIds; + } + + public String getContour() { + return contour; + } + + public void setContour(String contour) { + this.contour = contour; + } + + public List getRegionPoints() { + return regionPoints; + } + + public void setRegionPoints(List regionPoints) { + this.regionPoints = regionPoints; + } + + public List getRobotTargets() { + return robotTargets; + } + + public void setRobotTargets(List robotTargets) { + this.robotTargets = robotTargets; + } + + public static class RegionPointsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } + + public static class RobotTargetsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java new file mode 100644 index 0000000..45aadd9 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java @@ -0,0 +1,122 @@ +package com.casic.missiles.modular.system.model; + +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RouteModel { + + /** + * robotRoutes : [{"depth":316.6,"headingAngle":31.66,"lat":17.39223199775081,"lng":109.32222199129043,"pitchAngle":109.01}] + * sumTime : 3226 + * routeCount : 1 + * sumDistance : 589 + * sumPower : 48512 + */ + + private int sumTime; + private int routeCount; + private int sumDistance; + private int sumPower; + private List robotRoutes; + + public int getSumTime() { + return sumTime; + } + + public void setSumTime(int sumTime) { + this.sumTime = sumTime; + } + + public int getRouteCount() { + return routeCount; + } + + public void setRouteCount(int routeCount) { + this.routeCount = routeCount; + } + + public int getSumDistance() { + return sumDistance; + } + + public void setSumDistance(int sumDistance) { + this.sumDistance = sumDistance; + } + + public int getSumPower() { + return sumPower; + } + + public void setSumPower(int sumPower) { + this.sumPower = sumPower; + } + + public List getRobotRoutes() { + return robotRoutes; + } + + public void setRobotRoutes(List robotRoutes) { + this.robotRoutes = robotRoutes; + } + + public static class RobotRoutesBean { + /** + * depth : 316.6 + * headingAngle : 31.66 + * lat : 17.39223199775081 + * lng : 109.32222199129043 + * pitchAngle : 109.01 + */ + + private double depth; + private double headingAngle; + private double lat; + private double lng; + private double pitchAngle; + + public double getDepth() { + return depth; + } + + public void setDepth(double depth) { + this.depth = depth; + } + + public double getHeadingAngle() { + return headingAngle; + } + + public void setHeadingAngle(double headingAngle) { + this.headingAngle = headingAngle; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + + public double getPitchAngle() { + return pitchAngle; + } + + public void setPitchAngle(double pitchAngle) { + this.pitchAngle = pitchAngle; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java new file mode 100644 index 0000000..42751f5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * 算法规划结果 服务类 + * + * @author a203 + */ +public interface IRegionPlanService extends IService { + /** + * 获取最新的区域规划结果 + * + * @return {@link RegionPlanDTO} + */ + RegionPlanDTO selectCurrentPlan(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java new file mode 100644 index 0000000..0e82b0f --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.RouteModel; +import com.casic.missiles.modular.system.model.RoutePlan; + +/** + * 算法规划结果 服务类 + * + * @author a203 + */ +public interface IRoutePlanService extends IService { + /** + * 获取最新的规划结果,包括区域和路线 + * + * @param robotId 机器人ID + * @return {@link RouteModel} + */ + RouteModel selectCurrentPlan(String robotId); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RegionPlanServiceImpl.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RegionPlanServiceImpl.java new file mode 100644 index 0000000..c3533e5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RegionPlanServiceImpl.java @@ -0,0 +1,67 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RegionPlanMapper; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RegionPlan; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import com.casic.missiles.modular.system.service.IRoutePlanService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author a203 + */ +@Service +public class RegionPlanServiceImpl extends ServiceImpl implements IRegionPlanService { + + private final IRoutePlanService routePlanService; + + public RegionPlanServiceImpl(IRoutePlanService routePlanService) { + this.routePlanService = routePlanService; + } + + @Override + public RegionPlanDTO selectCurrentPlan() { + RegionPlanDTO regionPlanDTO = new RegionPlanDTO(); + + RegionPlan region = this.baseMapper.selectLastRegion(); + regionPlanDTO.setRegionId(region.getId()); + regionPlanDTO.setPlanTime(region.getPlanTime()); + + String regionResult = region.getRegionResult(); + RegionModel regionModel = JSON.parseObject(regionResult, new TypeReference() { + }); + regionPlanDTO.setRegionResult(regionModel); + + //解析得到robotId然后再去查route表 + String robotIds = regionModel.getRobotIds(); + List routeResults = new ArrayList<>(); + if ("".equals(robotIds)) { + regionPlanDTO.setRouteResult(null); + } else if (!robotIds.contains(",")) { + RegionPlanDTO.RouteResult routeResult = new RegionPlanDTO.RouteResult(); + routeResult.setRobotId(robotIds); + routeResult.setRouteModel(routePlanService.selectCurrentPlan(robotIds)); + + routeResults.add(routeResult); + regionPlanDTO.setRouteResult(routeResults); + } else { + String[] split = robotIds.split(","); + for (String id : split) { + RegionPlanDTO.RouteResult routeResult = new RegionPlanDTO.RouteResult(); + routeResult.setRobotId(id); + routeResult.setRouteModel(routePlanService.selectCurrentPlan(id)); + + routeResults.add(routeResult); + regionPlanDTO.setRouteResult(routeResults); + } + } + return regionPlanDTO; + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePlanServiceImpl.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePlanServiceImpl.java index 82231cc..79e2c33 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePlanServiceImpl.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePlanServiceImpl.java @@ -1,14 +1,14 @@ package com.casic.missiles.modular.system.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.system.dao.RoutePlanMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; +import com.casic.missiles.modular.system.model.RouteModel; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.service.IRoutePlanService; import org.springframework.stereotype.Service; -import java.util.List; - /** * @author a203 */ @@ -16,13 +16,9 @@ public class RoutePlanServiceImpl extends ServiceImpl implements IRoutePlanService { @Override - public RoutePlanDTO selectCurrentPlan() { - RoutePlan plan = this.baseMapper.selectLastOne(); - return new RoutePlanDTO(plan); - } - - @Override - public List selectRoutes(String startDate, String endDate) { - return null; + public RouteModel selectCurrentPlan(String robotId) { + RoutePlan routePlan = this.baseMapper.selectLastRoute(robotId); + return JSON.parseObject(routePlan.getRouteResult(), new TypeReference() { + }); } } diff --git a/casic-web/pom.xml b/casic-web/pom.xml index e278488..07e2467 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -122,6 +122,11 @@ com.casic + casic-task + ${pro.version} + + + com.casic casic-job-quartz 2.0.0.alpha diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java new file mode 100644 index 0000000..5eff542 --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RegionPlan.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @author a203 + */ +@Data +@TableName("bus_task_region") +public class RegionPlan extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 路线规划生成的时间 + */ + @TableField("PLAN_TIME") + private String planTime; + /** + * 规划结果 + */ + @TableField("REGION_RESULT") + private String regionResult; +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java index 079e1d5..4dcf4ac 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/RoutePlan.java @@ -31,11 +31,6 @@ @TableField("PLAN_TIME") private String planTime; /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - @TableField("PLAN_TYPE") - private String planType; - /** * 规划结果 */ @TableField("ROUTE_RESULT") diff --git a/casic-shelter/pom.xml b/casic-shelter/pom.xml index d7d5443..9fdf570 100644 --- a/casic-shelter/pom.xml +++ b/casic-shelter/pom.xml @@ -50,6 +50,11 @@ casic-ship ${pro.version} + + com.casic + casic-task + ${pro.version} + com.alibaba diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index ba1a62e..3a5b132 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -122,12 +122,12 @@ } //经度(4)、纬度(4) - int pointSize = count * (4 + 4); - byte[] pointBytes = new byte[pointSize]; + int regionSize = count * (4 + 4); + byte[] regionBytes = new byte[regionSize]; System.arraycopy(bytes, 5 + 1 + idsBytes.length + targetBytes.length + 1 + radiusBytes.length + 1, - pointBytes, 0, pointSize); - regionMap.put("robotPoints", formatLngLat(pointBytes)); + regionBytes, 0, regionSize); + regionMap.put("regionPoints", formatLngLat(regionBytes)); return JSON.toJSONString(regionMap); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 2298f2a..f93bfba 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.system.dto.ShipDTO; import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.model.RegionPlan; import com.casic.missiles.modular.system.model.RobotInfo; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.model.ShelterPosition; -import com.casic.missiles.modular.system.service.IRoutePlanService; -import com.casic.missiles.modular.system.service.IShelterPositionService; -import com.casic.missiles.modular.system.service.IShipService; -import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.service.*; import com.casic.missiles.modular.system.utils.Constant; import com.casic.missiles.modular.system.utils.DecodeData; import com.casic.missiles.modular.system.utils.EncodeData; @@ -33,15 +31,18 @@ private final ITyphoonService typhoonService; private final IShipService shipService; private final IShelterPositionService shelterPositionService; + private final IRegionPlanService regionPlanService; private final IRoutePlanService routePlanService; public SocketServiceImpl(ITyphoonService typhoonService, IShipService shipService, IShelterPositionService shelterPositionService, + IRegionPlanService regionPlanService, IRoutePlanService routePlanService) { this.typhoonService = typhoonService; this.shipService = shipService; this.shelterPositionService = shelterPositionService; + this.regionPlanService = regionPlanService; this.routePlanService = routePlanService; } @@ -91,24 +92,24 @@ break; case 0x02: //算法结果 - RoutePlan routePlan = new RoutePlan(); - routePlan.setPlanTime(dateFormat.format(new Date())); - routePlan.setRobotId(robotId); int taskType = data[3]; switch (taskType) { case 0x01: String robotRegion = DecodeData.decodeRobotRegion(data); log.info("区域覆盖 ===> " + robotRegion); //区域覆盖 - routePlan.setPlanType("0"); - routePlan.setRouteResult(robotRegion); - routePlanService.save(routePlan); + RegionPlan regionPlan = new RegionPlan(); + regionPlan.setPlanTime(dateFormat.format(new Date())); + regionPlan.setRegionResult(robotRegion); + regionPlanService.save(regionPlan); break; case 0x02: //路径规划 String robotRoute = DecodeData.decodeRobotRoute(data); log.info("路径规划 ===> " + robotRoute); - routePlan.setPlanType("1"); + RoutePlan routePlan = new RoutePlan(); + routePlan.setRobotId(robotId); + routePlan.setPlanTime(dateFormat.format(new Date())); routePlan.setRouteResult(robotRoute); routePlanService.save(routePlan); break; diff --git a/casic-task/pom.xml b/casic-task/pom.xml new file mode 100644 index 0000000..a166761 --- /dev/null +++ b/casic-task/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.casic + casic-template + ../pom.xml + 2.0.0 + + + casic-task + 2.0.0 + jar + casic-task + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-server-support + 1.0.0 + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.squareup.okhttp3 + okhttp + 4.9.1 + + + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java new file mode 100644 index 0000000..e0e7d4c --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/controller/TaskController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author a203 + */ +@Controller +@RequestMapping("/task") +public class TaskController { + + private final IRegionPlanService regionPlanService; + + public TaskController(IRegionPlanService regionPlanService) { + this.regionPlanService = regionPlanService; + } + + /** + * 路线规划-当前路线 + */ + @GetMapping(value = "/currentPlan") + @ResponseBody + public Object regionDetail() { + RegionPlanDTO regionPlanDTO = regionPlanService.selectCurrentPlan(); + return ResponseData.success(regionPlanDTO); + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java new file mode 100644 index 0000000..236aea5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RegionPlanMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * @author a203 + */ +public interface RegionPlanMapper extends BaseMapper { + /** + * 获取最新的规划结果 + * + * @return {@link RegionPlan} + */ + RegionPlan selectLastRegion(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java index 1288112..af8111a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/RoutePlanMapper.java @@ -1,17 +1,19 @@ package com.casic.missiles.modular.system.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; import com.casic.missiles.modular.system.model.RoutePlan; +import org.apache.ibatis.annotations.Param; /** * @author a203 */ public interface RoutePlanMapper extends BaseMapper { + /** * 获取最新的规划结果 * - * @return {@link RoutePlanDTO} + * @param robotId 机器人ID + * @return {@link RoutePlan} */ - RoutePlan selectLastOne(); + RoutePlan selectLastRoute(@Param("robotId") String robotId); } diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml new file mode 100644 index 0000000..91a2712 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RegionPlanMapper.xml @@ -0,0 +1,19 @@ + + + + + + + ID AS id, + PLAN_TIME AS planTime, + REGION_RESULT AS regionResult + + + + \ No newline at end of file diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml index e347d2f..561ea8a 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dao/mapping/RoutePlanMapper.xml @@ -7,14 +7,14 @@ ID AS id, ROBOT_ID AS robotId, PLAN_TIME AS planTime, - PLAN_TYPE AS planType, ROUTE_RESULT AS routeResult - SELECT FROM bus_task_route AS btr + WHERE btr.ROBOT_ID = #{robotId} ORDER BY btr.PLAN_TIME DESC LIMIT 1 diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java new file mode 100644 index 0000000..9a9cc11 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RegionPlanDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RouteModel; +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RegionPlanDTO { + private Long regionId; + private String planTime; + private RegionModel regionResult; + private List routeResult; + + @Data + public static class RouteResult { + private String robotId; + private RouteModel routeModel; + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java b/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java deleted file mode 100644 index 93c432f..0000000 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/dto/RoutePlanDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.missiles.modular.system.dto; - -import com.casic.missiles.modular.system.model.RoutePlan; -import lombok.Data; - -/** - * @author a203 - */ -@Data -public class RoutePlanDTO { - /** - * 路线规划ID,数据库主键自动生成 - */ - private Long routeId; - /** - * 机器人ID - */ - private Integer robotId; - /** - * 路线规划生成的时间 - */ - private String planTime; - /** - * 路线规划的类型-区域覆盖0/路径规划1 - */ - private String planType; - /** - * 规划结果 - */ - private String routeResult; - - public RoutePlanDTO(RoutePlan routePlan) { - this.routeId = routePlan.getId(); - this.planTime = routePlan.getPlanTime(); - this.planType = routePlan.getPlanType(); - this.routeResult = routePlan.getRouteResult(); - } -} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java new file mode 100644 index 0000000..0a0bc82 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RegionModel.java @@ -0,0 +1,137 @@ +package com.casic.missiles.modular.system.model; + +import java.util.List; + +/** + * 区域规划结果模型 + * + * @author a203 + */ +public class RegionModel { + + /** + * regionRadius : 32.26km + * pointCount : 2 + * regionPoints : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * robotTargets : [{"lat":17.39223199775081,"lng":109.32222199129043},{"lat":17.39223199775081,"lng":109.32222199129043}] + * count : 2 + * robotIds : 0,1 + * contour : 轮廓标志位:多边形,2个轮廓点 + */ + + private String regionRadius; + private int pointCount; + private int count; + private String robotIds; + private String contour; + private List regionPoints; + private List robotTargets; + + public String getRegionRadius() { + return regionRadius; + } + + public void setRegionRadius(String regionRadius) { + this.regionRadius = regionRadius; + } + + public int getPointCount() { + return pointCount; + } + + public void setPointCount(int pointCount) { + this.pointCount = pointCount; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getRobotIds() { + return robotIds; + } + + public void setRobotIds(String robotIds) { + this.robotIds = robotIds; + } + + public String getContour() { + return contour; + } + + public void setContour(String contour) { + this.contour = contour; + } + + public List getRegionPoints() { + return regionPoints; + } + + public void setRegionPoints(List regionPoints) { + this.regionPoints = regionPoints; + } + + public List getRobotTargets() { + return robotTargets; + } + + public void setRobotTargets(List robotTargets) { + this.robotTargets = robotTargets; + } + + public static class RegionPointsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } + + public static class RobotTargetsBean { + /** + * lat : 17.39223199775081 + * lng : 109.32222199129043 + */ + + private double lat; + private double lng; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java new file mode 100644 index 0000000..45aadd9 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/model/RouteModel.java @@ -0,0 +1,122 @@ +package com.casic.missiles.modular.system.model; + +import lombok.Data; + +import java.util.List; + +/** + * @author a203 + */ +@Data +public class RouteModel { + + /** + * robotRoutes : [{"depth":316.6,"headingAngle":31.66,"lat":17.39223199775081,"lng":109.32222199129043,"pitchAngle":109.01}] + * sumTime : 3226 + * routeCount : 1 + * sumDistance : 589 + * sumPower : 48512 + */ + + private int sumTime; + private int routeCount; + private int sumDistance; + private int sumPower; + private List robotRoutes; + + public int getSumTime() { + return sumTime; + } + + public void setSumTime(int sumTime) { + this.sumTime = sumTime; + } + + public int getRouteCount() { + return routeCount; + } + + public void setRouteCount(int routeCount) { + this.routeCount = routeCount; + } + + public int getSumDistance() { + return sumDistance; + } + + public void setSumDistance(int sumDistance) { + this.sumDistance = sumDistance; + } + + public int getSumPower() { + return sumPower; + } + + public void setSumPower(int sumPower) { + this.sumPower = sumPower; + } + + public List getRobotRoutes() { + return robotRoutes; + } + + public void setRobotRoutes(List robotRoutes) { + this.robotRoutes = robotRoutes; + } + + public static class RobotRoutesBean { + /** + * depth : 316.6 + * headingAngle : 31.66 + * lat : 17.39223199775081 + * lng : 109.32222199129043 + * pitchAngle : 109.01 + */ + + private double depth; + private double headingAngle; + private double lat; + private double lng; + private double pitchAngle; + + public double getDepth() { + return depth; + } + + public void setDepth(double depth) { + this.depth = depth; + } + + public double getHeadingAngle() { + return headingAngle; + } + + public void setHeadingAngle(double headingAngle) { + this.headingAngle = headingAngle; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + + public double getPitchAngle() { + return pitchAngle; + } + + public void setPitchAngle(double pitchAngle) { + this.pitchAngle = pitchAngle; + } + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java new file mode 100644 index 0000000..42751f5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRegionPlanService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.model.RegionPlan; + +/** + * 算法规划结果 服务类 + * + * @author a203 + */ +public interface IRegionPlanService extends IService { + /** + * 获取最新的区域规划结果 + * + * @return {@link RegionPlanDTO} + */ + RegionPlanDTO selectCurrentPlan(); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java new file mode 100644 index 0000000..0e82b0f --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/IRoutePlanService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.RouteModel; +import com.casic.missiles.modular.system.model.RoutePlan; + +/** + * 算法规划结果 服务类 + * + * @author a203 + */ +public interface IRoutePlanService extends IService { + /** + * 获取最新的规划结果,包括区域和路线 + * + * @param robotId 机器人ID + * @return {@link RouteModel} + */ + RouteModel selectCurrentPlan(String robotId); +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RegionPlanServiceImpl.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RegionPlanServiceImpl.java new file mode 100644 index 0000000..c3533e5 --- /dev/null +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RegionPlanServiceImpl.java @@ -0,0 +1,67 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RegionPlanMapper; +import com.casic.missiles.modular.system.dto.RegionPlanDTO; +import com.casic.missiles.modular.system.model.RegionModel; +import com.casic.missiles.modular.system.model.RegionPlan; +import com.casic.missiles.modular.system.service.IRegionPlanService; +import com.casic.missiles.modular.system.service.IRoutePlanService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author a203 + */ +@Service +public class RegionPlanServiceImpl extends ServiceImpl implements IRegionPlanService { + + private final IRoutePlanService routePlanService; + + public RegionPlanServiceImpl(IRoutePlanService routePlanService) { + this.routePlanService = routePlanService; + } + + @Override + public RegionPlanDTO selectCurrentPlan() { + RegionPlanDTO regionPlanDTO = new RegionPlanDTO(); + + RegionPlan region = this.baseMapper.selectLastRegion(); + regionPlanDTO.setRegionId(region.getId()); + regionPlanDTO.setPlanTime(region.getPlanTime()); + + String regionResult = region.getRegionResult(); + RegionModel regionModel = JSON.parseObject(regionResult, new TypeReference() { + }); + regionPlanDTO.setRegionResult(regionModel); + + //解析得到robotId然后再去查route表 + String robotIds = regionModel.getRobotIds(); + List routeResults = new ArrayList<>(); + if ("".equals(robotIds)) { + regionPlanDTO.setRouteResult(null); + } else if (!robotIds.contains(",")) { + RegionPlanDTO.RouteResult routeResult = new RegionPlanDTO.RouteResult(); + routeResult.setRobotId(robotIds); + routeResult.setRouteModel(routePlanService.selectCurrentPlan(robotIds)); + + routeResults.add(routeResult); + regionPlanDTO.setRouteResult(routeResults); + } else { + String[] split = robotIds.split(","); + for (String id : split) { + RegionPlanDTO.RouteResult routeResult = new RegionPlanDTO.RouteResult(); + routeResult.setRobotId(id); + routeResult.setRouteModel(routePlanService.selectCurrentPlan(id)); + + routeResults.add(routeResult); + regionPlanDTO.setRouteResult(routeResults); + } + } + return regionPlanDTO; + } +} diff --git a/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePlanServiceImpl.java b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePlanServiceImpl.java index 82231cc..79e2c33 100644 --- a/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePlanServiceImpl.java +++ b/casic-task/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePlanServiceImpl.java @@ -1,14 +1,14 @@ package com.casic.missiles.modular.system.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.modular.system.dao.RoutePlanMapper; -import com.casic.missiles.modular.system.dto.RoutePlanDTO; +import com.casic.missiles.modular.system.model.RouteModel; import com.casic.missiles.modular.system.model.RoutePlan; import com.casic.missiles.modular.system.service.IRoutePlanService; import org.springframework.stereotype.Service; -import java.util.List; - /** * @author a203 */ @@ -16,13 +16,9 @@ public class RoutePlanServiceImpl extends ServiceImpl implements IRoutePlanService { @Override - public RoutePlanDTO selectCurrentPlan() { - RoutePlan plan = this.baseMapper.selectLastOne(); - return new RoutePlanDTO(plan); - } - - @Override - public List selectRoutes(String startDate, String endDate) { - return null; + public RouteModel selectCurrentPlan(String robotId) { + RoutePlan routePlan = this.baseMapper.selectLastRoute(robotId); + return JSON.parseObject(routePlan.getRouteResult(), new TypeReference() { + }); } } diff --git a/casic-web/pom.xml b/casic-web/pom.xml index e278488..07e2467 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -122,6 +122,11 @@ com.casic + casic-task + ${pro.version} + + + com.casic casic-job-quartz 2.0.0.alpha diff --git a/pom.xml b/pom.xml index 26cb93a..cea9d3a 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ casic-environment casic-ship casic-shelter + casic-task com.casic