fix():车辆报文上报

master
DongZeLiang 2024-09-21 12:12:17 +08:00
parent 518900891d
commit 1bf4fc14a5
22 changed files with 84 additions and 147 deletions

View File

@ -6,7 +6,7 @@
<groupId>com.muyu</groupId> <groupId>com.muyu</groupId>
<artifactId>VehicleSimulation</artifactId> <artifactId>VehicleSimulation</artifactId>
<version>1.0.5</version> <version>1.0.6</version>
<properties> <properties>
<maven.compiler.source>17</maven.compiler.source> <maven.compiler.source>17</maven.compiler.source>

View File

@ -1,6 +1,9 @@
package com.muyu.vehicle; package com.muyu.vehicle;
import com.alibaba.fastjson2.JSONObject; 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.SystemConstant;
import com.muyu.web.common.pool.ScheduledThreadPool; import com.muyu.web.common.pool.ScheduledThreadPool;
import com.muyu.web.domain.VehicleInfo; 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.CalculateCheckDigit;
import com.muyu.web.utils.ConversionUtil; import com.muyu.web.utils.ConversionUtil;
import com.muyu.web.utils.VehicleUtils; 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.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -54,6 +54,7 @@ public class VehicleInstance {
*/ */
@Builder.Default @Builder.Default
private LinkedBlockingQueue<PositionModel> positionQueue = new LinkedBlockingQueue<>(); private LinkedBlockingQueue<PositionModel> positionQueue = new LinkedBlockingQueue<>();
/** /**
* *
*/ */
@ -148,6 +149,12 @@ public class VehicleInstance {
client.connect(options); client.connect(options);
log.debug("车辆:[{}] 客户端初始化成功连接配置:{}", getVin(), log.debug("车辆:[{}] 客户端初始化成功连接配置:{}", getVin(),
JSONObject.toJSONString(this.mqttProperties)); 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) { } catch (MqttException e) {
log.error("车辆:[{}] 客户端初始化异常", getVin(), e); log.error("车辆:[{}] 客户端初始化异常", getVin(), e);
throw new RuntimeException(e); throw new RuntimeException(e);
@ -203,7 +210,7 @@ public class VehicleInstance {
/** /**
* 线 * 线
*/ */
public void initVehicleThread() { /*public void initVehicleThread() {
if (this.positionCode == null){ if (this.positionCode == null){
throw new RuntimeException("车辆["+getVin()+"]未选中路径"); throw new RuntimeException("车辆["+getVin()+"]未选中路径");
} }
@ -216,29 +223,7 @@ public class VehicleInstance {
ScheduledFuture<?> scheduledFuture = ScheduledThreadPool.submit(vehicleThread); ScheduledFuture<?> scheduledFuture = ScheduledThreadPool.submit(vehicleThread);
this.setScheduledFuture(scheduledFuture); this.setScheduledFuture(scheduledFuture);
log.info("初始化车辆上报模拟线程开始:[{}]", this.getVin()); 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() { public void imitateData() {
String gear = this.vehicleData.getGear();
if (!"D".equals(gear)){
log.info("车辆不是动车档位,不进行模拟数据");
return null;
}
// 获取上一次定位点 // 获取上一次定位点
PositionModel lastPositionModel = this.lastPosition == null ? positionQueue.poll() : this.lastPosition; PositionModel lastPositionModel = this.lastPosition == null ? positionQueue.poll() : this.lastPosition;
// 获取当前定位点 // 获取当前定位点
PositionModel currentPositionModel = positionQueue.poll(); PositionModel currentPositionModel = positionQueue.poll();
if (currentPositionModel == null) { 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.setMileage(vehicleData.getMileage().add(distance));
// 定位点填写 // 定位点填写
vehicleData.setLongitude(currentPositionModel.getLongitude()); vehicleData.setLongitude(
vehicleData.setLatitude(currentPositionModel.getLatitude()); 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 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) BigDecimal powerUsage = powerConsumption.multiply(hundredKMScale)
.multiply(batteryFloat) .multiply(batteryFloat)
@ -299,15 +298,16 @@ public class VehicleInstance {
powerConsumption.multiply(batteryFloat).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_UP).toString() powerConsumption.multiply(batteryFloat).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_UP).toString()
); );
// 计算总速度 // 计算总速度
vehicleData.setSpeed( if (distance != null) {
distance.divide(new BigDecimal(2)) vehicleData.setSpeed(
.multiply(new BigDecimal("3600")) distance.divide(new BigDecimal(2))
.setScale(2, RoundingMode.HALF_UP).toString() .multiply(new BigDecimal("3600"))
); .setScale(2, RoundingMode.HALF_UP).toString()
);
}
vehicleData.imitateBase(); vehicleData.imitateBase();
vehicleData.imitateMotor(); vehicleData.imitateMotor();
vehicleData.imitateBatteryPack(); vehicleData.imitateBatteryPack();
return null;
} }
/** /**

View File

@ -4,8 +4,6 @@ import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/** /**
* @author DongZeLiang * @author DongZeLiang
@ -43,5 +41,9 @@ public class MqttProperties {
* ID * ID
*/ */
private String clientId; private String clientId;
/**
*
*/
private int qos = 0; private int qos = 0;
} }

View File

@ -13,11 +13,6 @@ public class VehicleThread implements Runnable {
*/ */
private volatile boolean isStop = false; private volatile boolean isStop = false;
/**
*
*/
private volatile boolean isPaused;
/** /**
* *
*/ */
@ -27,19 +22,11 @@ public class VehicleThread implements Runnable {
public void run() { public void run() {
try { try {
if (!isStop){ if (!isStop){
if (!isPaused){ log.info("{} - 上报数据", this.vehicleInstance.getVin());
log.info("{} - 上报数据", this.vehicleInstance.getVin()); this.vehicleInstance.imitateData();
String imitateResult = this.vehicleInstance.imitateData(); this.vehicleInstance.sendMsg(
if (imitateResult == null){ this.vehicleInstance.getVehicleData().getMsg()
this.vehicleInstance.sendMsg( );
this.vehicleInstance.getVehicleData().getMsg()
);
}else {
log.warn("车辆[{}]数据模拟:{}", this.vehicleInstance.getVin(), imitateResult);
}
}else {
log.info("暂停模拟和上报:[{}]", this.vehicleInstance.getVin());
}
}else { }else {
log.info("终止模拟和上报:[{}]", this.vehicleInstance.getVin()); log.info("终止模拟和上报:[{}]", this.vehicleInstance.getVin());
vehicleInstance.cancelExecution(); vehicleInstance.cancelExecution();
@ -49,21 +36,6 @@ public class VehicleThread implements Runnable {
} }
} }
/**
* 线
*/
public void pause() {
isPaused = true;
}
/**
* 线
*/
public void resume() {
isPaused = false;
}
/** /**
* *
*/ */

View File

@ -1,15 +1,14 @@
package com.muyu.web.controller; 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.PageList;
import com.muyu.web.common.Result; import com.muyu.web.common.Result;
import com.muyu.web.domain.req.CheckPositionReq; import com.muyu.web.domain.req.CheckPositionReq;
import com.muyu.web.domain.req.GearReq; 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.req.VehicleInstanceListReq;
import com.muyu.web.domain.resp.VehicleInstanceResp; import com.muyu.web.domain.resp.VehicleInstanceResp;
import com.muyu.web.service.VehicleInstanceService; import com.muyu.web.service.VehicleInstanceService;
import com.muyu.vehicle.core.LocalContainer;
import com.muyu.vehicle.model.VehicleData;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -53,9 +52,9 @@ public class VehicleInstanceController {
* @param vin vin * @param vin vin
* @return * @return
*/ */
@PostMapping("/client/init/{vin}") @PostMapping("/client/start/{vin}")
public Result<String> vehicleClientInit(@PathVariable("vin") String vin){ public Result<String> vehicleClientInit(@PathVariable("vin") String vin){
this.vehicleInstanceService.vehicleClientInit(vin); this.vehicleInstanceService.vehicleClientStart(vin);
return Result.success(); return Result.success();
} }
@ -81,16 +80,6 @@ public class VehicleInstanceController {
return Result.success(); return Result.success();
} }
/**
*
* @return
*/
@PostMapping("/msg")
public Result<String> msg(@RequestBody MsgReq msgReq){
this.vehicleInstanceService.msg(msgReq);
return Result.success();
}
/** /**
* *
* @return * @return

View File

@ -1,6 +1,7 @@
package com.muyu.web.domain; package com.muyu.web.domain;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import com.muyu.system.handle.SystemHandler;
import com.muyu.web.domain.model.ServerConfigModel; import com.muyu.web.domain.model.ServerConfigModel;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
@ -65,6 +66,7 @@ public class ServerConfig {
public static ServerConfig modeBuild (ServerConfigModel serverConfigModel, Supplier<Long> idKey) { public static ServerConfig modeBuild (ServerConfigModel serverConfigModel, Supplier<Long> idKey) {
return builder() return builder()
.id(idKey.get()) .id(idKey.get())
.tenantId(SystemHandler.getTenantId())
.host(serverConfigModel.getHost()) .host(serverConfigModel.getHost())
.port(serverConfigModel.getPort()) .port(serverConfigModel.getPort())
.uri(serverConfigModel.getUri()) .uri(serverConfigModel.getUri())

View File

@ -63,6 +63,18 @@ public class VehicleInfo {
@TableField("battery_level") @TableField("battery_level")
private BigDecimal batteryLevel; private BigDecimal batteryLevel;
/**
*
*/
@TableField("last_longitude")
private String lastLongitude;
/**
*
*/
@TableField("last_latitude")
private String lastLatitude;
/** /**
* *
*/ */

View File

@ -4,7 +4,6 @@ import com.muyu.web.common.PageList;
import com.muyu.web.domain.VehicleInfo; import com.muyu.web.domain.VehicleInfo;
import com.muyu.web.domain.req.CheckPositionReq; import com.muyu.web.domain.req.CheckPositionReq;
import com.muyu.web.domain.req.GearReq; 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.req.VehicleInstanceListReq;
import com.muyu.web.domain.resp.VehicleInstanceResp; import com.muyu.web.domain.resp.VehicleInstanceResp;
@ -36,7 +35,7 @@ public interface VehicleInstanceService {
* *
* @param vin vin * @param vin vin
*/ */
void vehicleClientInit (String vin); void vehicleClientStart (String vin);
/** /**
* *
@ -50,12 +49,6 @@ public interface VehicleInstanceService {
*/ */
void checkPosition (CheckPositionReq checkPositionReq); void checkPosition (CheckPositionReq checkPositionReq);
/**
*
* @param msgReq
*/
void msg (MsgReq msgReq);
/** /**
* *
* @param gearReq * @param gearReq

View File

@ -1,5 +1,6 @@
package com.muyu.web.service.impl; 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.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.system.handle.SystemHandler; import com.muyu.system.handle.SystemHandler;
@ -34,8 +35,9 @@ public class ServerConfigServiceImpl extends ServiceImpl<BaseMapper<ServerConfig
*/ */
@Override @Override
public void edit (ServerConfigModel serverConfigModel) { public void edit (ServerConfigModel serverConfigModel) {
ServerConfig serverConfig = ServerConfig.modeBuild(serverConfigModel, SystemHandler::getUserId); ServerConfig serverConfig = ServerConfig.modeBuild(serverConfigModel, SystemHandler::getUserId);
updateById(serverConfig); update(serverConfig, new UpdateWrapper<>());
SystemHandler.setServerConfig( SystemHandler.setServerConfig(
ServerConfigProperties.modelToProperties(serverConfigModel) ServerConfigProperties.modelToProperties(serverConfigModel)
); );

View File

@ -13,7 +13,6 @@ import com.muyu.web.domain.model.MqttServerModel;
import com.muyu.web.domain.model.PositionModel; import com.muyu.web.domain.model.PositionModel;
import com.muyu.web.domain.req.CheckPositionReq; import com.muyu.web.domain.req.CheckPositionReq;
import com.muyu.web.domain.req.GearReq; 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.req.VehicleInstanceListReq;
import com.muyu.web.domain.resp.VehicleInstanceResp; import com.muyu.web.domain.resp.VehicleInstanceResp;
import com.muyu.web.service.PositionRouteService; import com.muyu.web.service.PositionRouteService;
@ -99,7 +98,7 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService {
* @param vin vin * @param vin vin
*/ */
@Override @Override
public void vehicleClientInit (String vin) { public void vehicleClientStart (String vin) {
log.info("vin[{}],开始上线", vin); log.info("vin[{}],开始上线", vin);
VehicleInstance vehicleInstance = LocalContainer.getVehicleInstance(vin); VehicleInstance vehicleInstance = LocalContainer.getVehicleInstance(vin);
if (vehicleInstance == null){ if (vehicleInstance == null){
@ -159,27 +158,6 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService {
vehicleInstance.setPositionCode(checkPositionReq.getPositionCode()); 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("车辆消息事件错误");
}
}
/** /**
* *
* *

View File

@ -6,7 +6,6 @@ import com.muyu.vehicle.core.LocalContainer;
import com.muyu.web.domain.PositionRouteInfo; import com.muyu.web.domain.PositionRouteInfo;
import com.muyu.web.domain.model.PositionModel; import com.muyu.web.domain.model.PositionModel;
import com.muyu.web.domain.model.TaskModel; 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.domain.resp.UnifiedTaskResp;
import com.muyu.web.service.PositionRouteService; import com.muyu.web.service.PositionRouteService;
import com.muyu.web.service.VehicleInstanceService; import com.muyu.web.service.VehicleInstanceService;
@ -51,7 +50,7 @@ public class VehicleUnifiedServiceImpl implements VehicleUnifiedService {
.map(VehicleInstance::getVin) .map(VehicleInstance::getVin)
.toList(); .toList();
taskModel.submit("一键上线", vinList, (vin) -> { taskModel.submit("一键上线", vinList, (vin) -> {
vehicleInstanceService.vehicleClientInit(vin); vehicleInstanceService.vehicleClientStart(vin);
}); });
} }
@ -96,12 +95,6 @@ public class VehicleUnifiedServiceImpl implements VehicleUnifiedService {
vehicleInstance.setPositionCode(positionCode); vehicleInstance.setPositionCode(positionCode);
// 设置车辆档位 // 设置车辆档位
vehicleInstance.setGear("D"); vehicleInstance.setGear("D");
vehicleInstanceService.msg(
MsgReq.builder()
.vin(vin)
.msgCode("上报")
.build()
);
}); });
} }
@ -143,12 +136,6 @@ public class VehicleUnifiedServiceImpl implements VehicleUnifiedService {
// 获取在线车辆VIN // 获取在线车辆VIN
List<String> vinList = LocalContainer.getOnlineVehicleVin(); List<String> vinList = LocalContainer.getOnlineVehicleVin();
taskModel.submit("一键取消上报", vinList, (vin) -> { taskModel.submit("一键取消上报", vinList, (vin) -> {
vehicleInstanceService.msg(
MsgReq.builder()
.vin(vin)
.msgCode("停止")
.build()
);
}); });
} }

View File

@ -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}

View File

@ -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}

View File

@ -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

View File

@ -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