fix():车辆报文上报
parent
518900891d
commit
1bf4fc14a5
2
pom.xml
2
pom.xml
|
@ -6,7 +6,7 @@
|
|||
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>VehicleSimulation</artifactId>
|
||||
<version>1.0.5</version>
|
||||
<version>1.0.6</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package com.muyu.vehicle;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.muyu.vehicle.model.VehicleData;
|
||||
import com.muyu.vehicle.model.properties.MqttProperties;
|
||||
import com.muyu.vehicle.thread.VehicleThread;
|
||||
import com.muyu.web.common.SystemConstant;
|
||||
import com.muyu.web.common.pool.ScheduledThreadPool;
|
||||
import com.muyu.web.domain.VehicleInfo;
|
||||
|
@ -8,9 +11,6 @@ import com.muyu.web.domain.model.PositionModel;
|
|||
import com.muyu.web.utils.CalculateCheckDigit;
|
||||
import com.muyu.web.utils.ConversionUtil;
|
||||
import com.muyu.web.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;
|
||||
|
@ -54,6 +54,7 @@ public class VehicleInstance {
|
|||
*/
|
||||
@Builder.Default
|
||||
private LinkedBlockingQueue<PositionModel> positionQueue = new LinkedBlockingQueue<>();
|
||||
|
||||
/**
|
||||
* 车辆
|
||||
*/
|
||||
|
@ -148,6 +149,12 @@ public class VehicleInstance {
|
|||
client.connect(options);
|
||||
log.debug("车辆:[{}] 客户端初始化成功连接配置:{}", getVin(),
|
||||
JSONObject.toJSONString(this.mqttProperties));
|
||||
VehicleThread vehicleThread = new VehicleThread();
|
||||
vehicleThread.setVehicleInstance(this);
|
||||
this.setVehicleThread(vehicleThread);
|
||||
ScheduledFuture<?> scheduledFuture = ScheduledThreadPool.submit(vehicleThread);
|
||||
this.setScheduledFuture(scheduledFuture);
|
||||
log.info("初始化车辆上报模拟线程开始:[{}]", this.getVin());
|
||||
} catch (MqttException e) {
|
||||
log.error("车辆:[{}] 客户端初始化异常", getVin(), e);
|
||||
throw new RuntimeException(e);
|
||||
|
@ -203,7 +210,7 @@ public class VehicleInstance {
|
|||
/**
|
||||
* 初始化线程
|
||||
*/
|
||||
public void initVehicleThread() {
|
||||
/*public void initVehicleThread() {
|
||||
if (this.positionCode == null){
|
||||
throw new RuntimeException("车辆["+getVin()+"]未选中路径");
|
||||
}
|
||||
|
@ -216,29 +223,7 @@ public class VehicleInstance {
|
|||
ScheduledFuture<?> scheduledFuture = ScheduledThreadPool.submit(vehicleThread);
|
||||
this.setScheduledFuture(scheduledFuture);
|
||||
log.info("初始化车辆上报模拟线程开始:[{}]", this.getVin());
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始上报线程
|
||||
*/
|
||||
public void startSend() {
|
||||
this.msgCode = "上报";
|
||||
if (this.vehicleThread != null){
|
||||
this.vehicleThread.resume();
|
||||
}
|
||||
log.info("车辆[{}],开始上报", this.getVin());
|
||||
}
|
||||
|
||||
/**
|
||||
* 暂停上报线程
|
||||
*/
|
||||
public void pauseSend() {
|
||||
this.msgCode = "暂停";
|
||||
if (this.vehicleThread != null) {
|
||||
this.vehicleThread.pause();
|
||||
}
|
||||
log.info("车辆[{}],暂停上报", this.getVin());
|
||||
}
|
||||
}*/
|
||||
|
||||
/**
|
||||
* 结束发送
|
||||
|
@ -263,31 +248,45 @@ public class VehicleInstance {
|
|||
/**
|
||||
* 模拟车辆数据
|
||||
*/
|
||||
public String imitateData() {
|
||||
String gear = this.vehicleData.getGear();
|
||||
if (!"D".equals(gear)){
|
||||
log.info("车辆不是动车档位,不进行模拟数据");
|
||||
return null;
|
||||
}
|
||||
public void imitateData() {
|
||||
// 获取上一次定位点
|
||||
PositionModel lastPositionModel = this.lastPosition == null ? positionQueue.poll() : this.lastPosition;
|
||||
// 获取当前定位点
|
||||
PositionModel currentPositionModel = positionQueue.poll();
|
||||
if (currentPositionModel == null) {
|
||||
return "表示当前定位点已经跑完,请选择其他路径";
|
||||
currentPositionModel = PositionModel.builder()
|
||||
.latitude(this.vehicleInfo.getLastLatitude())
|
||||
.longitude(this.vehicleInfo.getLastLongitude())
|
||||
.build();
|
||||
}
|
||||
if (lastPositionModel == null){
|
||||
lastPositionModel = currentPositionModel;
|
||||
}
|
||||
// 两点之间的距离
|
||||
BigDecimal distance = VehicleUtils.distance(Objects.requireNonNull(lastPositionModel), currentPositionModel);
|
||||
BigDecimal distance = null;
|
||||
if (currentPositionModel != null) {
|
||||
distance = VehicleUtils.distance(Objects.requireNonNull(lastPositionModel), currentPositionModel);
|
||||
}
|
||||
if (lastPositionModel == currentPositionModel){
|
||||
distance = new BigDecimal("0.01");
|
||||
}
|
||||
// 车辆总里程 相加
|
||||
vehicleData.setMileage(vehicleData.getMileage().add(distance));
|
||||
// 定位点填写
|
||||
vehicleData.setLongitude(currentPositionModel.getLongitude());
|
||||
vehicleData.setLatitude(currentPositionModel.getLatitude());
|
||||
vehicleData.setLongitude(
|
||||
currentPositionModel == null || currentPositionModel.getLongitude() == null ? this.vehicleInfo.getLastLongitude() : currentPositionModel.getLongitude()
|
||||
);
|
||||
vehicleData.setLatitude(
|
||||
currentPositionModel == null || currentPositionModel.getLatitude() == null ? this.vehicleInfo.getLastLatitude() : currentPositionModel.getLatitude()
|
||||
);
|
||||
// 当前电量减少
|
||||
// 电池浮动
|
||||
BigDecimal batteryFloat = VehicleUtils.batteryFloat();
|
||||
// 百公里占比
|
||||
BigDecimal hundredKMScale = distance.divide(SystemConstant.hundredKilometers).setScale(3, RoundingMode.HALF_UP);
|
||||
BigDecimal hundredKMScale = null;
|
||||
if (distance != null) {
|
||||
hundredKMScale = distance.divide(SystemConstant.hundredKilometers).setScale(3, RoundingMode.HALF_UP);
|
||||
}
|
||||
// 使用电量
|
||||
BigDecimal powerUsage = powerConsumption.multiply(hundredKMScale)
|
||||
.multiply(batteryFloat)
|
||||
|
@ -299,15 +298,16 @@ public class VehicleInstance {
|
|||
powerConsumption.multiply(batteryFloat).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_UP).toString()
|
||||
);
|
||||
// 计算总速度
|
||||
if (distance != null) {
|
||||
vehicleData.setSpeed(
|
||||
distance.divide(new BigDecimal(2))
|
||||
.multiply(new BigDecimal("3600"))
|
||||
.setScale(2, RoundingMode.HALF_UP).toString()
|
||||
);
|
||||
}
|
||||
vehicleData.imitateBase();
|
||||
vehicleData.imitateMotor();
|
||||
vehicleData.imitateBatteryPack();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -4,8 +4,6 @@ import lombok.AllArgsConstructor;
|
|||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @author DongZeLiang
|
||||
|
@ -43,5 +41,9 @@ public class MqttProperties {
|
|||
* 节点ID
|
||||
*/
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
* 上报级别
|
||||
*/
|
||||
private int qos = 0;
|
||||
}
|
||||
|
|
|
@ -13,11 +13,6 @@ public class VehicleThread implements Runnable {
|
|||
*/
|
||||
private volatile boolean isStop = false;
|
||||
|
||||
/**
|
||||
* 设置是否暂停
|
||||
*/
|
||||
private volatile boolean isPaused;
|
||||
|
||||
/**
|
||||
* 车辆实例对象
|
||||
*/
|
||||
|
@ -27,19 +22,11 @@ public class VehicleThread implements Runnable {
|
|||
public void run() {
|
||||
try {
|
||||
if (!isStop){
|
||||
if (!isPaused){
|
||||
log.info("{} - 上报数据", this.vehicleInstance.getVin());
|
||||
String imitateResult = this.vehicleInstance.imitateData();
|
||||
if (imitateResult == null){
|
||||
this.vehicleInstance.imitateData();
|
||||
this.vehicleInstance.sendMsg(
|
||||
this.vehicleInstance.getVehicleData().getMsg()
|
||||
);
|
||||
}else {
|
||||
log.warn("车辆[{}]数据模拟:{}", this.vehicleInstance.getVin(), imitateResult);
|
||||
}
|
||||
}else {
|
||||
log.info("暂停模拟和上报:[{}]", this.vehicleInstance.getVin());
|
||||
}
|
||||
}else {
|
||||
log.info("终止模拟和上报:[{}]", this.vehicleInstance.getVin());
|
||||
vehicleInstance.cancelExecution();
|
||||
|
@ -49,21 +36,6 @@ public class VehicleThread implements Runnable {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 暂停线程
|
||||
*/
|
||||
public void pause() {
|
||||
isPaused = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始线程
|
||||
*/
|
||||
public void resume() {
|
||||
isPaused = false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 停止方法
|
||||
*/
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
package com.muyu.web.controller;
|
||||
|
||||
import com.muyu.vehicle.core.LocalContainer;
|
||||
import com.muyu.vehicle.model.VehicleData;
|
||||
import com.muyu.web.common.PageList;
|
||||
import com.muyu.web.common.Result;
|
||||
import com.muyu.web.domain.req.CheckPositionReq;
|
||||
import com.muyu.web.domain.req.GearReq;
|
||||
import com.muyu.web.domain.req.MsgReq;
|
||||
import com.muyu.web.domain.req.VehicleInstanceListReq;
|
||||
import com.muyu.web.domain.resp.VehicleInstanceResp;
|
||||
import com.muyu.web.service.VehicleInstanceService;
|
||||
import com.muyu.vehicle.core.LocalContainer;
|
||||
import com.muyu.vehicle.model.VehicleData;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
@ -53,9 +52,9 @@ public class VehicleInstanceController {
|
|||
* @param vin vin
|
||||
* @return 初始化
|
||||
*/
|
||||
@PostMapping("/client/init/{vin}")
|
||||
@PostMapping("/client/start/{vin}")
|
||||
public Result<String> vehicleClientInit(@PathVariable("vin") String vin){
|
||||
this.vehicleInstanceService.vehicleClientInit(vin);
|
||||
this.vehicleInstanceService.vehicleClientStart(vin);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
@ -81,16 +80,6 @@ public class VehicleInstanceController {
|
|||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 车辆报文操作
|
||||
* @return 操作提示
|
||||
*/
|
||||
@PostMapping("/msg")
|
||||
public Result<String> msg(@RequestBody MsgReq msgReq){
|
||||
this.vehicleInstanceService.msg(msgReq);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 车辆档位操作
|
||||
* @return 操作提示
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.muyu.web.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.muyu.system.handle.SystemHandler;
|
||||
import com.muyu.web.domain.model.ServerConfigModel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
|
@ -65,6 +66,7 @@ public class ServerConfig {
|
|||
public static ServerConfig modeBuild (ServerConfigModel serverConfigModel, Supplier<Long> idKey) {
|
||||
return builder()
|
||||
.id(idKey.get())
|
||||
.tenantId(SystemHandler.getTenantId())
|
||||
.host(serverConfigModel.getHost())
|
||||
.port(serverConfigModel.getPort())
|
||||
.uri(serverConfigModel.getUri())
|
||||
|
|
|
@ -63,6 +63,18 @@ public class VehicleInfo {
|
|||
@TableField("battery_level")
|
||||
private BigDecimal batteryLevel;
|
||||
|
||||
/**
|
||||
* 上一次经度
|
||||
*/
|
||||
@TableField("last_longitude")
|
||||
private String lastLongitude;
|
||||
|
||||
/**
|
||||
* 上一次维度
|
||||
*/
|
||||
@TableField("last_latitude")
|
||||
private String lastLatitude;
|
||||
|
||||
/**
|
||||
* 总里程
|
||||
*/
|
||||
|
|
|
@ -4,7 +4,6 @@ import com.muyu.web.common.PageList;
|
|||
import com.muyu.web.domain.VehicleInfo;
|
||||
import com.muyu.web.domain.req.CheckPositionReq;
|
||||
import com.muyu.web.domain.req.GearReq;
|
||||
import com.muyu.web.domain.req.MsgReq;
|
||||
import com.muyu.web.domain.req.VehicleInstanceListReq;
|
||||
import com.muyu.web.domain.resp.VehicleInstanceResp;
|
||||
|
||||
|
@ -36,7 +35,7 @@ public interface VehicleInstanceService {
|
|||
* 车辆客户端初始化
|
||||
* @param vin vin
|
||||
*/
|
||||
void vehicleClientInit (String vin);
|
||||
void vehicleClientStart (String vin);
|
||||
|
||||
/**
|
||||
* 车辆客户端关闭
|
||||
|
@ -50,12 +49,6 @@ public interface VehicleInstanceService {
|
|||
*/
|
||||
void checkPosition (CheckPositionReq checkPositionReq);
|
||||
|
||||
/**
|
||||
* 车辆消息操作
|
||||
* @param msgReq
|
||||
*/
|
||||
void msg (MsgReq msgReq);
|
||||
|
||||
/**
|
||||
* 设置档位
|
||||
* @param gearReq
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.muyu.web.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.muyu.system.handle.SystemHandler;
|
||||
|
@ -34,8 +35,9 @@ public class ServerConfigServiceImpl extends ServiceImpl<BaseMapper<ServerConfig
|
|||
*/
|
||||
@Override
|
||||
public void edit (ServerConfigModel serverConfigModel) {
|
||||
|
||||
ServerConfig serverConfig = ServerConfig.modeBuild(serverConfigModel, SystemHandler::getUserId);
|
||||
updateById(serverConfig);
|
||||
update(serverConfig, new UpdateWrapper<>());
|
||||
SystemHandler.setServerConfig(
|
||||
ServerConfigProperties.modelToProperties(serverConfigModel)
|
||||
);
|
||||
|
|
|
@ -13,7 +13,6 @@ import com.muyu.web.domain.model.MqttServerModel;
|
|||
import com.muyu.web.domain.model.PositionModel;
|
||||
import com.muyu.web.domain.req.CheckPositionReq;
|
||||
import com.muyu.web.domain.req.GearReq;
|
||||
import com.muyu.web.domain.req.MsgReq;
|
||||
import com.muyu.web.domain.req.VehicleInstanceListReq;
|
||||
import com.muyu.web.domain.resp.VehicleInstanceResp;
|
||||
import com.muyu.web.service.PositionRouteService;
|
||||
|
@ -99,7 +98,7 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService {
|
|||
* @param vin vin
|
||||
*/
|
||||
@Override
|
||||
public void vehicleClientInit (String vin) {
|
||||
public void vehicleClientStart (String vin) {
|
||||
log.info("vin[{}],开始上线", vin);
|
||||
VehicleInstance vehicleInstance = LocalContainer.getVehicleInstance(vin);
|
||||
if (vehicleInstance == null){
|
||||
|
@ -159,27 +158,6 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService {
|
|||
vehicleInstance.setPositionCode(checkPositionReq.getPositionCode());
|
||||
}
|
||||
|
||||
/**
|
||||
* 车辆消息操作
|
||||
*
|
||||
* @param msgReq
|
||||
*/
|
||||
@Override
|
||||
public void msg (MsgReq msgReq) {
|
||||
VehicleInstance vehicleInstance = LocalContainer.getVehicleInstance(msgReq.getVin());
|
||||
switch (msgReq.getMsgCode()){
|
||||
case "上报" -> {
|
||||
if(vehicleInstance.getVehicleThread() == null){
|
||||
vehicleInstance.initVehicleThread();
|
||||
}
|
||||
vehicleInstance.startSend();
|
||||
}
|
||||
case "暂停" -> vehicleInstance.pauseSend();
|
||||
case "停止" -> vehicleInstance.stopSend();
|
||||
default -> throw new RuntimeException("车辆消息事件错误");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置档位
|
||||
*
|
||||
|
|
|
@ -6,7 +6,6 @@ import com.muyu.vehicle.core.LocalContainer;
|
|||
import com.muyu.web.domain.PositionRouteInfo;
|
||||
import com.muyu.web.domain.model.PositionModel;
|
||||
import com.muyu.web.domain.model.TaskModel;
|
||||
import com.muyu.web.domain.req.MsgReq;
|
||||
import com.muyu.web.domain.resp.UnifiedTaskResp;
|
||||
import com.muyu.web.service.PositionRouteService;
|
||||
import com.muyu.web.service.VehicleInstanceService;
|
||||
|
@ -51,7 +50,7 @@ public class VehicleUnifiedServiceImpl implements VehicleUnifiedService {
|
|||
.map(VehicleInstance::getVin)
|
||||
.toList();
|
||||
taskModel.submit("一键上线", vinList, (vin) -> {
|
||||
vehicleInstanceService.vehicleClientInit(vin);
|
||||
vehicleInstanceService.vehicleClientStart(vin);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -96,12 +95,6 @@ public class VehicleUnifiedServiceImpl implements VehicleUnifiedService {
|
|||
vehicleInstance.setPositionCode(positionCode);
|
||||
// 设置车辆档位
|
||||
vehicleInstance.setGear("D");
|
||||
vehicleInstanceService.msg(
|
||||
MsgReq.builder()
|
||||
.vin(vin)
|
||||
.msgCode("上报")
|
||||
.build()
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -143,12 +136,6 @@ public class VehicleUnifiedServiceImpl implements VehicleUnifiedService {
|
|||
// 获取在线车辆VIN
|
||||
List<String> vinList = LocalContainer.getOnlineVehicleVin();
|
||||
taskModel.submit("一键取消上报", vinList, (vin) -> {
|
||||
vehicleInstanceService.msg(
|
||||
MsgReq.builder()
|
||||
.vin(vin)
|
||||
.msgCode("停止")
|
||||
.build()
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
.app-container[data-v-2ab19043]{padding:10px 5px 0 10px;background-color:#f4f4f5}.el-row[data-v-2ab19043]{&:last-child{margin-bottom:0}}.bg-purple[data-v-2ab19043]{background:#f4f4f5}.grid-content[data-v-2ab19043]{border-radius:4px;overflow-x:hidden;overflow-y:auto}.grid-content[data-v-2ab19043]::-webkit-scrollbar{width:4px}.grid-content[data-v-2ab19043]::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(0,0,0,.2)}.grid-content[data-v-2ab19043]::-webkit-scrollbar-track{border-radius:0;background:rgba(0,0,0,.1)}.vehicleDiv[data-v-2ab19043]{height:50px;margin:0 0 10px 0}.contentMain[data-v-2ab19043]{margin-top:10px}.vehicleDataTab[data-v-2ab19043]{width:100%;overflow-y:auto;overflow-x:hidden}.vehicleDataTab[data-v-2ab19043]::-webkit-scrollbar{width:4px}.vehicleDataTab[data-v-2ab19043]::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(0,0,0,.2)}.vehicleDataTab[data-v-2ab19043]::-webkit-scrollbar-track{border-radius:0;background:rgba(0,0,0,.1)}.el-form-item__label[data-v-2ab19043]{padding:0}.el-form-item[data-v-2ab19043]{margin-bottom:5px}
|
|
@ -1 +0,0 @@
|
|||
.app-container[data-v-601f2e6f]{padding:10px 5px 0 10px;background-color:#f4f4f5}.el-row[data-v-601f2e6f]{&:last-child{margin-bottom:0}}.bg-purple[data-v-601f2e6f]{background:#f4f4f5}.grid-content[data-v-601f2e6f]{border-radius:4px;overflow-x:hidden;overflow-y:auto}.grid-content[data-v-601f2e6f]::-webkit-scrollbar{width:4px}.grid-content[data-v-601f2e6f]::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(0,0,0,.2)}.grid-content[data-v-601f2e6f]::-webkit-scrollbar-track{border-radius:0;background:rgba(0,0,0,.1)}.vehicleDiv[data-v-601f2e6f]{height:50px;margin:0 0 10px 0}.contentMain[data-v-601f2e6f]{margin-top:10px}.vehicleDataTab[data-v-601f2e6f]{width:100%;overflow-y:auto;overflow-x:hidden}.vehicleDataTab[data-v-601f2e6f]::-webkit-scrollbar{width:4px}.vehicleDataTab[data-v-601f2e6f]::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(0,0,0,.2)}.vehicleDataTab[data-v-601f2e6f]::-webkit-scrollbar-track{border-radius:0;background:rgba(0,0,0,.1)}.el-form-item__label[data-v-601f2e6f]{padding:0}.el-form-item[data-v-601f2e6f]{margin-bottom:5px}
|
|
@ -1 +1 @@
|
|||
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=/favicon.ico><title>车辆</title><link href=/static/css/app.e2ca9161.css rel=preload as=style><link href=/static/css/chunk-elementUI.c1c3b808.css rel=preload as=style><link href=/static/css/chunk-libs.3dfb7769.css rel=preload as=style><link href=/static/js/app.c57091f6.js rel=preload as=script><link href=/static/js/chunk-elementUI.2491fb2f.js rel=preload as=script><link href=/static/js/chunk-libs.5e39c7d0.js rel=preload as=script><link href=/static/css/chunk-elementUI.c1c3b808.css rel=stylesheet><link href=/static/css/chunk-libs.3dfb7769.css rel=stylesheet><link href=/static/css/app.e2ca9161.css rel=stylesheet></head><body><noscript><strong>We're sorry but 车辆 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script>(function(e){function t(t){for(var r,c,a=t[0],f=t[1],i=t[2],l=0,s=[];l<a.length;l++)c=a[l],Object.prototype.hasOwnProperty.call(o,c)&&o[c]&&s.push(o[c][0]),o[c]=0;for(r in f)Object.prototype.hasOwnProperty.call(f,r)&&(e[r]=f[r]);d&&d(t);while(s.length)s.shift()();return u.push.apply(u,i||[]),n()}function n(){for(var e,t=0;t<u.length;t++){for(var n=u[t],r=!0,c=1;c<n.length;c++){var a=n[c];0!==o[a]&&(r=!1)}r&&(u.splice(t--,1),e=f(f.s=n[0]))}return e}var r={},c={runtime:0},o={runtime:0},u=[];function a(e){return f.p+"static/js/"+({}[e]||e)+"."+{"chunk-22cea610":"7879ff8f","chunk-2cbbeb82":"e1753706","chunk-6f60c8f1":"f16bf298","chunk-0e8cf5f4":"b7552abc","chunk-7146ee17":"8de3769d","chunk-725364c9":"5d13ee53","chunk-7d1a163b":"4d8cc933","chunk-8f81ac56":"da9fce35"}[e]+".js"}function f(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,f),n.l=!0,n.exports}f.e=function(e){var t=[],n={"chunk-22cea610":1,"chunk-2cbbeb82":1,"chunk-0e8cf5f4":1,"chunk-7146ee17":1,"chunk-725364c9":1,"chunk-8f81ac56":1};c[e]?t.push(c[e]):0!==c[e]&&n[e]&&t.push(c[e]=new Promise((function(t,n){for(var r="static/css/"+({}[e]||e)+"."+{"chunk-22cea610":"3c7f5ad9","chunk-2cbbeb82":"59a1d200","chunk-6f60c8f1":"31d6cfe0","chunk-0e8cf5f4":"3328abfd","chunk-7146ee17":"6963607a","chunk-725364c9":"71c8f52e","chunk-7d1a163b":"31d6cfe0","chunk-8f81ac56":"1efc9dd1"}[e]+".css",o=f.p+r,u=document.getElementsByTagName("link"),a=0;a<u.length;a++){var i=u[a],l=i.getAttribute("data-href")||i.getAttribute("href");if("stylesheet"===i.rel&&(l===r||l===o))return t()}var s=document.getElementsByTagName("style");for(a=0;a<s.length;a++){i=s[a],l=i.getAttribute("data-href");if(l===r||l===o)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var r=t&&t.target&&t.target.src||o,u=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=r,delete c[e],d.parentNode.removeChild(d),n(u)},d.href=o;var h=document.getElementsByTagName("head")[0];h.appendChild(d)})).then((function(){c[e]=0})));var r=o[e];if(0!==r)if(r)t.push(r[2]);else{var u=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=u);var i,l=document.createElement("script");l.charset="utf-8",l.timeout=120,f.nc&&l.setAttribute("nonce",f.nc),l.src=a(e);var s=new Error;i=function(t){l.onerror=l.onload=null,clearTimeout(d);var n=o[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",s.name="ChunkLoadError",s.type=r,s.request=c,n[1](s)}o[e]=void 0}};var d=setTimeout((function(){i({type:"timeout",target:l})}),12e4);l.onerror=l.onload=i,document.head.appendChild(l)}return Promise.all(t)},f.m=e,f.c=r,f.d=function(e,t,n){f.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},f.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,t){if(1&t&&(e=f(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(f.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)f.d(n,r,function(t){return e[t]}.bind(null,r));return n},f.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return f.d(t,"a",t),t},f.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},f.p="/",f.oe=function(e){throw console.error(e),e};var i=window["webpackJsonp"]=window["webpackJsonp"]||[],l=i.push.bind(i);i.push=t,i=i.slice();for(var s=0;s<i.length;s++)t(i[s]);var d=l;n()})([]);</script><script src=/static/js/chunk-elementUI.2491fb2f.js></script><script src=/static/js/chunk-libs.5e39c7d0.js></script><script src=/static/js/app.c57091f6.js></script></body></html>
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=/favicon.ico><title>车辆</title><link href=/static/css/app.e2ca9161.css rel=preload as=style><link href=/static/css/chunk-elementUI.c1c3b808.css rel=preload as=style><link href=/static/css/chunk-libs.3dfb7769.css rel=preload as=style><link href=/static/js/app.a2f5934b.js rel=preload as=script><link href=/static/js/chunk-elementUI.2491fb2f.js rel=preload as=script><link href=/static/js/chunk-libs.5e39c7d0.js rel=preload as=script><link href=/static/css/chunk-elementUI.c1c3b808.css rel=stylesheet><link href=/static/css/chunk-libs.3dfb7769.css rel=stylesheet><link href=/static/css/app.e2ca9161.css rel=stylesheet></head><body><noscript><strong>We're sorry but 车辆 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script>(function(e){function t(t){for(var r,c,u=t[0],f=t[1],i=t[2],l=0,d=[];l<u.length;l++)c=u[l],Object.prototype.hasOwnProperty.call(o,c)&&o[c]&&d.push(o[c][0]),o[c]=0;for(r in f)Object.prototype.hasOwnProperty.call(f,r)&&(e[r]=f[r]);s&&s(t);while(d.length)d.shift()();return a.push.apply(a,i||[]),n()}function n(){for(var e,t=0;t<a.length;t++){for(var n=a[t],r=!0,c=1;c<n.length;c++){var u=n[c];0!==o[u]&&(r=!1)}r&&(a.splice(t--,1),e=f(f.s=n[0]))}return e}var r={},c={runtime:0},o={runtime:0},a=[];function u(e){return f.p+"static/js/"+({}[e]||e)+"."+{"chunk-00a52ac4":"5f82d470","chunk-159c7f2c":"0fa7a8a3","chunk-2cbbeb82":"e1753706","chunk-643fd843":"ad8a85d9","chunk-6f60c8f1":"f16bf298","chunk-0e8cf5f4":"b7552abc","chunk-7d1a163b":"4d8cc933","chunk-8f81ac56":"da9fce35"}[e]+".js"}function f(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,f),n.l=!0,n.exports}f.e=function(e){var t=[],n={"chunk-00a52ac4":1,"chunk-159c7f2c":1,"chunk-2cbbeb82":1,"chunk-643fd843":1,"chunk-0e8cf5f4":1,"chunk-8f81ac56":1};c[e]?t.push(c[e]):0!==c[e]&&n[e]&&t.push(c[e]=new Promise((function(t,n){for(var r="static/css/"+({}[e]||e)+"."+{"chunk-00a52ac4":"71c8f52e","chunk-159c7f2c":"3c7f5ad9","chunk-2cbbeb82":"59a1d200","chunk-643fd843":"5488218b","chunk-6f60c8f1":"31d6cfe0","chunk-0e8cf5f4":"3328abfd","chunk-7d1a163b":"31d6cfe0","chunk-8f81ac56":"1efc9dd1"}[e]+".css",o=f.p+r,a=document.getElementsByTagName("link"),u=0;u<a.length;u++){var i=a[u],l=i.getAttribute("data-href")||i.getAttribute("href");if("stylesheet"===i.rel&&(l===r||l===o))return t()}var d=document.getElementsByTagName("style");for(u=0;u<d.length;u++){i=d[u],l=i.getAttribute("data-href");if(l===r||l===o)return t()}var s=document.createElement("link");s.rel="stylesheet",s.type="text/css",s.onload=t,s.onerror=function(t){var r=t&&t.target&&t.target.src||o,a=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");a.code="CSS_CHUNK_LOAD_FAILED",a.request=r,delete c[e],s.parentNode.removeChild(s),n(a)},s.href=o;var h=document.getElementsByTagName("head")[0];h.appendChild(s)})).then((function(){c[e]=0})));var r=o[e];if(0!==r)if(r)t.push(r[2]);else{var a=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=a);var i,l=document.createElement("script");l.charset="utf-8",l.timeout=120,f.nc&&l.setAttribute("nonce",f.nc),l.src=u(e);var d=new Error;i=function(t){l.onerror=l.onload=null,clearTimeout(s);var n=o[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;d.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",d.name="ChunkLoadError",d.type=r,d.request=c,n[1](d)}o[e]=void 0}};var s=setTimeout((function(){i({type:"timeout",target:l})}),12e4);l.onerror=l.onload=i,document.head.appendChild(l)}return Promise.all(t)},f.m=e,f.c=r,f.d=function(e,t,n){f.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},f.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,t){if(1&t&&(e=f(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(f.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)f.d(n,r,function(t){return e[t]}.bind(null,r));return n},f.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return f.d(t,"a",t),t},f.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},f.p="/",f.oe=function(e){throw console.error(e),e};var i=window["webpackJsonp"]=window["webpackJsonp"]||[],l=i.push.bind(i);i.push=t,i=i.slice();for(var d=0;d<i.length;d++)t(i[d]);var s=l;n()})([]);</script><script src=/static/js/chunk-elementUI.2491fb2f.js></script><script src=/static/js/chunk-libs.5e39c7d0.js></script><script src=/static/js/app.a2f5934b.js></script></body></html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
|||
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-22cea610"],{"26fc":function(t,s,a){t.exports=a.p+"static/img/404_cloud.0f4bc32b.png"},"8cdb":function(t,s,a){"use strict";a.r(s);var e=function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"wscn-http404-container"},[a("div",{staticClass:"wscn-http404"},[t._m(0),a("div",{staticClass:"bullshit"},[a("div",{staticClass:"bullshit__oops"},[t._v("OOPS!")]),t._m(1),a("div",{staticClass:"bullshit__headline"},[t._v(t._s(t.message))]),a("div",{staticClass:"bullshit__info"},[t._v("Please check that the URL you entered is correct, or click the button below to return to the homepage.")]),a("a",{staticClass:"bullshit__return-home",attrs:{href:""}},[t._v("Back to home")])])])])},c=[function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("div",{staticClass:"pic-404"},[e("img",{staticClass:"pic-404__parent",attrs:{src:a("a36b"),alt:"404"}}),e("img",{staticClass:"pic-404__child left",attrs:{src:a("26fc"),alt:"404"}}),e("img",{staticClass:"pic-404__child mid",attrs:{src:a("26fc"),alt:"404"}}),e("img",{staticClass:"pic-404__child right",attrs:{src:a("26fc"),alt:"404"}})])},function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"bullshit__info"},[t._v("All rights reserved "),a("a",{staticStyle:{color:"#20a0ff"},attrs:{href:"https://wallstreetcn.com",target:"_blank"}},[t._v("wallstreetcn")])])}],i={name:"Page404",computed:{message:function(){return"The webmaster said that you can not enter this page..."}}},l=i,n=(a("dd53"),a("2877")),r=Object(n["a"])(l,e,c,!1,null,"c095f994",null);s["default"]=r.exports},a36b:function(t,s,a){t.exports=a.p+"static/img/404.a57b6f31.png"},b0a8:function(t,s,a){},dd53:function(t,s,a){"use strict";a("b0a8")}}]);
|
||||
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-159c7f2c"],{"26fc":function(t,s,a){t.exports=a.p+"static/img/404_cloud.0f4bc32b.png"},"8cdb":function(t,s,a){"use strict";a.r(s);var c=function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"wscn-http404-container"},[a("div",{staticClass:"wscn-http404"},[t._m(0),a("div",{staticClass:"bullshit"},[a("div",{staticClass:"bullshit__oops"},[t._v("OOPS!")]),t._m(1),a("div",{staticClass:"bullshit__headline"},[t._v(t._s(t.message))]),a("div",{staticClass:"bullshit__info"},[t._v("Please check that the URL you entered is correct, or click the button below to return to the homepage.")]),a("a",{staticClass:"bullshit__return-home",attrs:{href:""}},[t._v("Back to home")])])])])},e=[function(){var t=this,s=t.$createElement,c=t._self._c||s;return c("div",{staticClass:"pic-404"},[c("img",{staticClass:"pic-404__parent",attrs:{src:a("a36b"),alt:"404"}}),c("img",{staticClass:"pic-404__child left",attrs:{src:a("26fc"),alt:"404"}}),c("img",{staticClass:"pic-404__child mid",attrs:{src:a("26fc"),alt:"404"}}),c("img",{staticClass:"pic-404__child right",attrs:{src:a("26fc"),alt:"404"}})])},function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"bullshit__info"},[t._v("All rights reserved "),a("a",{staticStyle:{color:"#20a0ff"},attrs:{href:"https://wallstreetcn.com",target:"_blank"}},[t._v("wallstreetcn")])])}],i={name:"Page404",computed:{message:function(){return"The webmaster said that you can not enter this page..."}}},l=i,n=(a("dd53"),a("2877")),r=Object(n["a"])(l,c,e,!1,null,"c095f994",null);s["default"]=r.exports},a36b:function(t,s,a){t.exports=a.p+"static/img/404.a57b6f31.png"},b0a8:function(t,s,a){},dd53:function(t,s,a){"use strict";a("b0a8")}}]);
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue