Browse Source

新增航线时航点的id获取逻辑、航线实体属性更改

master
menghao 2 months ago
parent
commit
0bdc6a56f0
  1. 2
      ruoyi-admin/src/main/resources/application-druid.yml
  2. 21
      ruoyi-system/src/main/java/com/ruoyi/system/domain/RouteWaypoints.java
  3. 82
      ruoyi-system/src/main/java/com/ruoyi/system/domain/Routes.java
  4. 26
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RoutesServiceImpl.java
  5. 7
      ruoyi-system/src/main/resources/mapper/system/RoutesMapper.xml

2
ruoyi-admin/src/main/resources/application-druid.yml

@ -6,7 +6,7 @@ spring:
druid: druid:
# 主库数据源 # 主库数据源
master: master:
url: jdbc:mysql://localhost:3306/kj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root username: root
password: 123456 password: 123456
# 从库数据源 # 从库数据源

21
ruoyi-system/src/main/java/com/ruoyi/system/domain/RouteWaypoints.java

@ -170,4 +170,25 @@ public class RouteWaypoints extends BaseEntity
.append("turnAngle", getTurnAngle()) .append("turnAngle", getTurnAngle())
.toString(); .toString();
} }
/** * 获取转弯半径 (该字段不在数据库中仅用于逻辑计算)
* 公式: R = V^2 / (g * tan(θ))
*/
public Double getTurnRadius()
{
// 安全校验:如果角度为0、速度为null,半径视为0
if (this.turnAngle == null || this.turnAngle == 0 || this.speed == null) {
return 0.0;
}
// 单位换算:速度从 km/h 转为 m/s
double v_mps = this.speed / 3.6;
// 单位换算:角度从 度(Degree) 转为 弧度(Radians)
double radians = Math.toRadians(this.turnAngle.doubleValue());
// 重力加速度 g
double g = 9.8;
// 计算半径
double radius = (v_mps * v_mps) / (g * Math.tan(radians));
return radius;
}
} }

82
ruoyi-system/src/main/java/com/ruoyi/system/domain/Routes.java

@ -5,95 +5,105 @@ import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.BaseEntity;
import java.util.List;
/** /**
* 实体部署与航线对象 routes * 实体部署与航线对象 routes
* *
* @author ruoyi * @author ruoyi
* @date 2026-01-14 * @date 2026-01-14
*/ */
public class Routes extends BaseEntity public class Routes extends BaseEntity {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** 路由ID */ /**
* 路由ID
*/
private Long id; private Long id;
/** 归属方案ID */ /**
* 归属方案ID
*/
@Excel(name = "归属方案ID") @Excel(name = "归属方案ID")
private Long scenarioId; private Long scenarioId;
/** 使用的是库里哪个平台 (关联 platform_lib.id) */ /**
* 使用的是库里哪个平台 (关联 platform_lib.id)
*/
@Excel(name = "使用的是库里哪个平台 (关联 platform_lib.id)") @Excel(name = "使用的是库里哪个平台 (关联 platform_lib.id)")
private Long platformId; private Long platformId;
/** 名称 (如: 猎鹰01) */ /**
* 名称 (: 猎鹰01)
*/
@Excel(name = "名称 (如: 猎鹰01)") @Excel(name = "名称 (如: 猎鹰01)")
private String callSign; private String callSign;
/** 实例属性JSON: 覆盖库里的默认值 (如当前初始油量, 挂载配置) */ /**
* 实例属性JSON: 覆盖库里的默认值 (如当前初始油量, 挂载配置)
*/
@Excel(name = "实例属性JSON: 覆盖库里的默认值 (如当前初始油量, 挂载配置)") @Excel(name = "实例属性JSON: 覆盖库里的默认值 (如当前初始油量, 挂载配置)")
private String attributes; private String attributes;
/** 航点数据JSON数组: [{seq, k_offset, lat, lng, alt, speed, action...}] */ private List<RouteWaypoints> waypoints;
public void setId(Long id) public void setId(Long id) {
{
this.id = id; this.id = id;
} }
public Long getId() public Long getId() {
{
return id; return id;
} }
public void setScenarioId(Long scenarioId) public void setScenarioId(Long scenarioId) {
{
this.scenarioId = scenarioId; this.scenarioId = scenarioId;
} }
public Long getScenarioId() public Long getScenarioId() {
{
return scenarioId; return scenarioId;
} }
public void setPlatformId(Long platformId) public void setPlatformId(Long platformId) {
{
this.platformId = platformId; this.platformId = platformId;
} }
public Long getPlatformId() public Long getPlatformId() {
{
return platformId; return platformId;
} }
public void setCallSign(String callSign) public void setCallSign(String callSign) {
{
this.callSign = callSign; this.callSign = callSign;
} }
public String getCallSign() public String getCallSign() {
{
return callSign; return callSign;
} }
public void setAttributes(String attributes) public void setAttributes(String attributes) {
{
this.attributes = attributes; this.attributes = attributes;
} }
public String getAttributes() public String getAttributes() {
{
return attributes; return attributes;
} }
public List<RouteWaypoints> getWaypoints() {
return waypoints;
}
public void setWaypoints(List<RouteWaypoints> waypoints) {
this.waypoints = waypoints;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId()) .append("id", getId())
.append("scenarioId", getScenarioId()) .append("scenarioId", getScenarioId())
.append("platformId", getPlatformId()) .append("platformId", getPlatformId())
.append("callSign", getCallSign()) .append("callSign", getCallSign())
.append("attributes", getAttributes()) .append("attributes", getAttributes())
.toString(); .append("waypoints", getWaypoints())
.toString();
} }
} }

26
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RoutesServiceImpl.java

@ -1,11 +1,15 @@
package com.ruoyi.system.service.impl; package com.ruoyi.system.service.impl;
import java.util.List; import java.util.List;
import com.ruoyi.system.domain.RouteWaypoints;
import com.ruoyi.system.service.IRouteWaypointsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.RoutesMapper; import com.ruoyi.system.mapper.RoutesMapper;
import com.ruoyi.system.domain.Routes; import com.ruoyi.system.domain.Routes;
import com.ruoyi.system.service.IRoutesService; import com.ruoyi.system.service.IRoutesService;
import org.springframework.transaction.annotation.Transactional;
/** /**
* 实体部署与航线Service业务层处理 * 实体部署与航线Service业务层处理
@ -19,6 +23,9 @@ public class RoutesServiceImpl implements IRoutesService
@Autowired @Autowired
private RoutesMapper routesMapper; private RoutesMapper routesMapper;
@Autowired
private IRouteWaypointsService routeWaypointsService;
/** /**
* 查询实体部署与航线 * 查询实体部署与航线
* *
@ -50,9 +57,26 @@ public class RoutesServiceImpl implements IRoutesService
* @return 结果 * @return 结果
*/ */
@Override @Override
@Transactional
public int insertRoutes(Routes routes) public int insertRoutes(Routes routes)
{ {
return routesMapper.insertRoutes(routes); // 保存航线主体,MyBatis 会回填自增 ID 到 routes.id
int route = routesMapper.insertRoutes(routes);
// 从 routes 对象中拿到刚才手动添加的 List
List<RouteWaypoints> waypointList = routes.getWaypoints();
if (waypointList != null && !waypointList.isEmpty())
{
for (RouteWaypoints waypoint : waypointList)
{
// 将刚生成的航线 ID 绑定到每个航点上
waypoint.setRouteId(routes.getId());
// 调用航点 Service,触发seq字段的自动递增逻辑
routeWaypointsService.insertRouteWaypoints(waypoint);
}
}
return route;
} }
/** /**

7
ruoyi-system/src/main/resources/mapper/system/RoutesMapper.xml

@ -10,11 +10,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="platformId" column="platform_id" /> <result property="platformId" column="platform_id" />
<result property="callSign" column="call_sign" /> <result property="callSign" column="call_sign" />
<result property="attributes" column="attributes" /> <result property="attributes" column="attributes" />
<result property="waypoints" column="waypoints" />
</resultMap> </resultMap>
<sql id="selectRoutesVo"> <sql id="selectRoutesVo">
select id, scenario_id, platform_id, call_sign, attributes, waypoints from routes select id, scenario_id, platform_id, call_sign, attributes from routes
</sql> </sql>
<select id="selectRoutesList" parameterType="Routes" resultMap="RoutesResult"> <select id="selectRoutesList" parameterType="Routes" resultMap="RoutesResult">
@ -24,7 +23,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="platformId != null "> and platform_id = #{platformId}</if> <if test="platformId != null "> and platform_id = #{platformId}</if>
<if test="callSign != null and callSign != ''"> and call_sign = #{callSign}</if> <if test="callSign != null and callSign != ''"> and call_sign = #{callSign}</if>
<if test="attributes != null and attributes != ''"> and attributes = #{attributes}</if> <if test="attributes != null and attributes != ''"> and attributes = #{attributes}</if>
<if test="waypoints != null and waypoints != ''"> and waypoints = #{waypoints}</if>
</where> </where>
</select> </select>
@ -40,14 +38,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="platformId != null">platform_id,</if> <if test="platformId != null">platform_id,</if>
<if test="callSign != null and callSign != ''">call_sign,</if> <if test="callSign != null and callSign != ''">call_sign,</if>
<if test="attributes != null and attributes != ''">attributes,</if> <if test="attributes != null and attributes != ''">attributes,</if>
<if test="waypoints != null and waypoints != ''">waypoints,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="scenarioId != null">#{scenarioId},</if> <if test="scenarioId != null">#{scenarioId},</if>
<if test="platformId != null">#{platformId},</if> <if test="platformId != null">#{platformId},</if>
<if test="callSign != null and callSign != ''">#{callSign},</if> <if test="callSign != null and callSign != ''">#{callSign},</if>
<if test="attributes != null and attributes != ''">#{attributes},</if> <if test="attributes != null and attributes != ''">#{attributes},</if>
<if test="waypoints != null and waypoints != ''">#{waypoints},</if>
</trim> </trim>
</insert> </insert>
@ -58,7 +54,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="platformId != null">platform_id = #{platformId},</if> <if test="platformId != null">platform_id = #{platformId},</if>
<if test="callSign != null and callSign != ''">call_sign = #{callSign},</if> <if test="callSign != null and callSign != ''">call_sign = #{callSign},</if>
<if test="attributes != null and attributes != ''">attributes = #{attributes},</if> <if test="attributes != null and attributes != ''">attributes = #{attributes},</if>
<if test="waypoints != null and waypoints != ''">waypoints = #{waypoints},</if>
</trim> </trim>
where id = #{id} where id = #{id}
</update> </update>

Loading…
Cancel
Save