- * 用户表 - *
- * - * @author Leo825 - * @since 2022-07-05 - */ -@TableName("t_user") -public class User implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 用户主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - /** - * 用户名称 - */ - private String username; - - /** - * 密码 - */ - private String pwd; - - /** - * 创建时间,MyMetaObjectHandler 配合使用,入库的时候自动填充 - */ - @TableField(value = "create_time", fill = FieldFill.INSERT) - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - /** - * 修改时间,MyMetaObjectHandler 配合使用,入库的时候自动填充 - */ - @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - public String getPwd() { - return pwd; - } - - public void setPwd(String pwd) { - this.pwd = pwd; - } - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - public Date getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } - - @Override - public String toString() { - return "User{" + - "id=" + id + - ", username=" + username + - ", pwd=" + pwd + - ", createTime=" + createTime + - ", updateTime=" + updateTime + - "}"; - } -} diff --git a/src/main/java/com/muyu/domain/model/PositionModel.java b/src/main/java/com/muyu/domain/model/PositionModel.java new file mode 100644 index 0000000..d724cca --- /dev/null +++ b/src/main/java/com/muyu/domain/model/PositionModel.java @@ -0,0 +1,35 @@ +package com.muyu.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author DongZl + * @description: 位置模型 + * @Date 2023-11-20 上午 09:36 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PositionModel { + /** + * 经度 + */ + private String longitude; + + /** + * 维度 + */ + private String latitude; + + public static PositionModel strBuild (String positionStr) { + String[] split = positionStr.split(","); + return PositionModel.builder() + .longitude(split[0]) + .latitude(split[1]) + .build(); + } +} diff --git a/src/main/java/com/muyu/mapper/RouteMapper.java b/src/main/java/com/muyu/mapper/RouteMapper.java new file mode 100644 index 0000000..5b38ed1 --- /dev/null +++ b/src/main/java/com/muyu/mapper/RouteMapper.java @@ -0,0 +1,12 @@ +package com.muyu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.domain.RouteInfo; + +/** + * @author DongZl + * @description: 轨迹路径 mapper + * @Date 2023-11-20 上午 09:32 + */ +public interface RouteMapper extends BaseMapper- * 用户表 Mapper 接口 - *
- * - * @author Leo825 - * @since 2022-07-05 - */ -public interface UserMapper extends BaseMapper- * 用户表 Mapper 接口 + * 车辆 Mapper 接口 *
* - * @author Leo825 + * @author DongZeLiang * @since 2022-07-05 */ public interface VehicleMapper extends BaseMapper- * 用户表 服务类 - *
- * - * @author Leo825 - * @since 2022-07-05 - */ -public interface UserService extends IService- * 用户表 服务类 + * 车辆 服务类 *
* - * @author Leo825 + * @author DongZeLiang * @since 2022-07-05 */ public interface VehicleService extends IService- * 用户表 服务实现类 - *
- * - * @author Leo825 - * @since 2022-07-05 - */ -@Service -public class UserServiceImpl extends ServiceImpl- * 用户表 服务实现类 + * 车辆 服务实现类 *
* - * @author Leo825 + * @author DongZeLiang * @since 2022-07-05 */ @Service diff --git a/src/main/java/com/muyu/utils/VehicleUtils.java b/src/main/java/com/muyu/utils/VehicleUtils.java index 731711b..44675d2 100644 --- a/src/main/java/com/muyu/utils/VehicleUtils.java +++ b/src/main/java/com/muyu/utils/VehicleUtils.java @@ -1,8 +1,10 @@ package com.muyu.utils; import com.muyu.common.SystemConstant; +import com.muyu.domain.model.PositionModel; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.Random; public class VehicleUtils { @@ -29,7 +31,52 @@ public class VehicleUtils { * @return 电池额度 */ public static BigDecimal genBattery(){ - return BigDecimal.valueOf(random.nextInt(54, 60) * 1000L); + return BigDecimal.valueOf(random.nextInt(60, 80) * 1000L); } + + /** + * 两点之间的距离 + * @param startPositionModel 开始定位点 + * @param endPositionModel 结束定位点 + * @return + */ + public static BigDecimal distance(PositionModel startPositionModel, PositionModel endPositionModel){ + double lon1 = Double.parseDouble(startPositionModel.getLongitude()); + double lat1 = Double.parseDouble(startPositionModel.getLatitude()); + double lon2 = Double.parseDouble(endPositionModel.getLongitude()); + double lat2 = Double.parseDouble(endPositionModel.getLatitude()); + double lon1Rad = Math.toRadians(lon1); + double lat1Rad = Math.toRadians(lat1); + double lon2Rad = Math.toRadians(lon2); + double lat2Rad = Math.toRadians(lat2); + double earthRadius = 6371; // 地球半径(以公里为单位) + + double latDiff = lat2Rad - lat1Rad; + double lonDiff = lon2Rad - lon1Rad; + + double a = Math.sin(latDiff / 2) * Math.sin(latDiff / 2) + + Math.cos(lat1Rad) * Math.cos(lat2Rad) * + Math.sin(lonDiff / 2) * Math.sin(lonDiff / 2); + + double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + + double distance = earthRadius * c; + return BigDecimal.valueOf(distance).setScale(2, RoundingMode.HALF_UP); + } + + /** + * 生成电池浮动 + * @return 电池浮动值 + */ + public static BigDecimal batteryFloat(){ + Random rand = new Random(); + // 生成0.00-0.31之间的随机数 + double num = rand.nextDouble() * 0.31; + // 加上0.90,得到0.90-1.21之间的随机数 + num += 0.90; + // 保留两位小数 + num = (double) Math.round(num * 100) / 100; + return BigDecimal.valueOf(num); + } } diff --git a/src/main/java/com/muyu/vehicle/VehicleInstance.java b/src/main/java/com/muyu/vehicle/VehicleInstance.java index 9a25b74..e46b336 100644 --- a/src/main/java/com/muyu/vehicle/VehicleInstance.java +++ b/src/main/java/com/muyu/vehicle/VehicleInstance.java @@ -1,14 +1,16 @@ package com.muyu.vehicle; +import com.muyu.common.SystemConstant; import com.muyu.common.ThreadPool; import com.muyu.domain.Vehicle; +import com.muyu.domain.model.PositionModel; +import com.muyu.utils.VehicleUtils; import com.muyu.vehicle.model.VehicleData; import com.muyu.vehicle.model.properties.MqttProperties; import com.muyu.vehicle.thread.VehicleThread; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.extern.log4j.Log4j2; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; @@ -16,11 +18,12 @@ import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.Objects; +import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledFuture; -import static java.lang.Thread.sleep; - /** * @author DongZeLiang * @version 1.0 @@ -44,6 +47,16 @@ public class VehicleInstance { */ private VehicleData vehicleData; + /** + * 上一个定位点 + */ + private PositionModel lastPosition; + + /** + * 路径队列 + */ + private final LinkedBlockingQueue