优化车辆上线逻辑

增加一键上线、一键离线、一键上报、一键取消上报、一键重置路线功能
new-master
DongZeLiang 2023-12-03 00:02:41 +08:00
parent 3e6f723fe2
commit 5236765b9c
11 changed files with 241 additions and 10 deletions

View File

@ -103,6 +103,13 @@ public class VehicleInstanceController {
return Result.success(); return Result.success();
} }
/**
*
* @param statusKey
* @param vin
* @param statusValue
* @return
*/
@PutMapping("/status/{vin}/{statusKey}/{statusValue}") @PutMapping("/status/{vin}/{statusKey}/{statusValue}")
public Result<String> editStatus(@PathVariable("statusKey") String statusKey, public Result<String> editStatus(@PathVariable("statusKey") String statusKey,
@PathVariable("vin") String vin, @PathVariable("vin") String vin,
@ -110,4 +117,49 @@ public class VehicleInstanceController {
this.vehicleInstanceService.editStatus(vin, statusKey, statusValue); this.vehicleInstanceService.editStatus(vin, statusKey, statusValue);
return Result.success(); return Result.success();
} }
/**
* 线
*/
@PostMapping("/unified/online")
public Result<String> unifiedOnline(){
this.vehicleInstanceService.unifiedOnline();
return Result.success(null,"已成功发布一键上线任务");
}
/**
* 线
*/
@PostMapping("/unified/offline")
public Result<String> unifiedOffline(){
this.vehicleInstanceService.unifiedOffline();
return Result.success(null,"已成功发布一键离线任务");
}
/**
*
*/
@PostMapping("/unified/send")
public Result<String> unifiedSend(){
this.vehicleInstanceService.unifiedSend();
return Result.success(null,"已成功发布一键上报任务");
}
/**
*
*/
@PostMapping("/unified/position")
public Result<String> unifiedPosition(){
this.vehicleInstanceService.unifiedPosition();
return Result.success(null,"已成功发布一键上报任务");
}
/**
*
*/
@PostMapping("/unified/stop")
public Result<String> unifiedStop(){
this.vehicleInstanceService.unifiedStop();
return Result.success(null,"已成功发布取消上报任务");
}
} }

View File

@ -70,4 +70,30 @@ public interface VehicleInstanceService {
*/ */
void editStatus (String vin, String statusKey, Integer statusValue); void editStatus (String vin, String statusKey, Integer statusValue);
/**
* 线
*/
public void unifiedOnline();
/**
* 线
*/
public void unifiedOffline();
/**
*
*/
public void unifiedSend();
/**
*
*/
void unifiedPosition ();
/**
*
*/
public void unifiedStop();
} }

View File

@ -1,7 +1,9 @@
package com.muyu.service.impl; package com.muyu.service.impl;
import com.alibaba.fastjson2.JSONArray;
import com.muyu.common.PageList; import com.muyu.common.PageList;
import com.muyu.common.Result; import com.muyu.common.Result;
import com.muyu.domain.PositionRouteInfo;
import com.muyu.domain.Vehicle; import com.muyu.domain.Vehicle;
import com.muyu.domain.model.PositionModel; import com.muyu.domain.model.PositionModel;
import com.muyu.domain.req.CheckPositionReq; import com.muyu.domain.req.CheckPositionReq;
@ -27,7 +29,9 @@ import org.springframework.stereotype.Service;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Random;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Stream; import java.util.stream.Stream;
/** /**
@ -165,10 +169,8 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService {
case "上报" -> { case "上报" -> {
if(vehicleInstance.getVehicleThread() == null){ if(vehicleInstance.getVehicleThread() == null){
vehicleInstance.initVehicleThread(); vehicleInstance.initVehicleThread();
vehicleInstance.startSend();
}else {
vehicleInstance.pauseSend();
} }
vehicleInstance.startSend();
} }
case "暂停" -> vehicleInstance.pauseSend(); case "暂停" -> vehicleInstance.pauseSend();
case "停止" -> vehicleInstance.stopSend(); case "停止" -> vehicleInstance.stopSend();
@ -201,4 +203,141 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService {
ReflectUtils.invokeSetter(vehicleData, statusKey, statusValue); ReflectUtils.invokeSetter(vehicleData, statusKey, statusValue);
} }
private final AtomicBoolean unifiedStatus = new AtomicBoolean(Boolean.TRUE);
/**
* 线
*/
@Override
public void unifiedOnline () {
if (!unifiedStatus.get()){
throw new RuntimeException("一键执行的任务正在进行中,请勿再次发布一键执行任务");
}
new Thread(() -> {
unifiedStatus.set(Boolean.FALSE);
// 筛选出离线车辆并使用并行流进行上线操作
LocalContainer.getOfflineVehicleInstance()
.stream()
.parallel()
.map(VehicleInstance::getVin)
.forEach(this::vehicleClientInit);
unifiedStatus.set(Boolean.TRUE);
}).start();
}
/**
* 线
*/
@Override
public void unifiedOffline () {
if (!unifiedStatus.get()){
throw new RuntimeException("一键执行的任务正在进行中,请勿再次发布一键执行任务");
}
new Thread(() -> {
unifiedStatus.set(Boolean.FALSE);
// 筛选出在线车辆使用并行流操作先停止车辆上报动作再进行车辆离线操作
LocalContainer.getOnlineVehicleInstance()
.stream()
.parallel()
.forEach(vehicleInstance -> {
vehicleInstance.stopSend();
vehicleInstance.closeClient();
});
unifiedStatus.set(Boolean.TRUE);
}).start();
}
/**
*
*/
@Override
public void unifiedSend () {
if (!unifiedStatus.get()){
throw new RuntimeException("一键执行的任务正在进行中,请勿再次发布一键执行任务");
}
List<VehicleInstance> vehicleInstanceList = LocalContainer.getOnlineVehicleInstance();
if (vehicleInstanceList.isEmpty()){
throw new RuntimeException("还没有车辆上线,请先让车辆上线");
}
new Thread(() -> {
unifiedStatus.set(Boolean.FALSE);
// 先一键重置路径
this.unifiedPositionPri ();
vehicleInstanceList
.stream()
.parallel()
.forEach(vehicleInstance -> {
// 设置车辆档位
vehicleInstance.setGear("D");
// 开启线程进行上报
if(vehicleInstance.getVehicleThread() == null){
vehicleInstance.initVehicleThread();
}
vehicleInstance.startSend();
});
unifiedStatus.set(Boolean.TRUE);
}).start();
}
/**
*
*/
@Override
public void unifiedPosition () {
if (!unifiedStatus.get()){
throw new RuntimeException("一键执行的任务正在进行中,请勿再次发布一键执行任务");
}
new Thread(() -> {
unifiedStatus.set(Boolean.FALSE);
this.unifiedPositionPri();
unifiedStatus.set(Boolean.TRUE);
}).start();
}
private void unifiedPositionPri(){
// 获取到所有路径
List<PositionRouteInfo> positionRouteInfoList = positionRouteService.list();
// 路径长度
int positionSize = positionRouteInfoList.size();
// 随机数
Random random = new Random();
LocalContainer.getOnlineVehicleInstance()
.stream()
.parallel()
.forEach(vehicleInstance -> {
// 随机一个路径结果
int positionIndex = random.nextInt(0, positionSize);
PositionRouteInfo positionRouteInfo = positionRouteInfoList.get(positionIndex);
String positionCode = positionRouteInfo.getName();
List<PositionModel> positionModelList = JSONArray.parseArray(positionRouteInfo.getRouteData(), String.class)
.stream()
.map(PositionModel::strBuild)
.toList();
// 设置车辆路径
vehicleInstance.settingPosition(positionModelList);
vehicleInstance.setPositionCode(positionCode);
});
}
/**
*
*/
@Override
public void unifiedStop () {
if (!unifiedStatus.get()){
throw new RuntimeException("一键执行的任务正在进行中,请勿再次发布一键执行任务");
}
new Thread(() -> {
unifiedStatus.set(Boolean.FALSE);
LocalContainer.getOnlineVehicleInstance()
.stream()
.parallel()
.forEach(VehicleInstance::stopSend);
unifiedStatus.set(Boolean.TRUE);
}).start();
}
} }

View File

@ -205,7 +205,9 @@ public class VehicleInstance {
*/ */
public void startSend() { public void startSend() {
this.msgCode = "上报"; this.msgCode = "上报";
this.vehicleThread.resume(); if (this.vehicleThread != null){
this.vehicleThread.resume();
}
log.info("车辆[{}],开始上报", this.getVin()); log.info("车辆[{}],开始上报", this.getVin());
} }
@ -214,7 +216,9 @@ public class VehicleInstance {
*/ */
public void pauseSend() { public void pauseSend() {
this.msgCode = "暂停"; this.msgCode = "暂停";
this.vehicleThread.pause(); if (this.vehicleThread != null) {
this.vehicleThread.pause();
}
log.info("车辆[{}],暂停上报", this.getVin()); log.info("车辆[{}],暂停上报", this.getVin());
} }
@ -223,7 +227,9 @@ public class VehicleInstance {
*/ */
public void stopSend() { public void stopSend() {
this.msgCode = "停止"; this.msgCode = "停止";
this.vehicleThread.stop(); if (this.vehicleThread != null){
this.vehicleThread.stop();
}
log.info("车辆[{}],停止上报", this.getVin()); log.info("车辆[{}],停止上报", this.getVin());
} }

View File

@ -62,4 +62,12 @@ public class LocalContainer {
public static List<VehicleInstance> getOnlineVehicleInstance(){ public static List<VehicleInstance> getOnlineVehicleInstance(){
return vehicleDataMap.values().stream().filter(VehicleInstance::isOnline).toList(); return vehicleDataMap.values().stream().filter(VehicleInstance::isOnline).toList();
} }
/**
* 线
* @return 线
*/
public static List<VehicleInstance> getOfflineVehicleInstance(){
return vehicleDataMap.values().stream().filter(vehicleInstance -> !vehicleInstance.isOnline()).toList();
}
} }

View File

@ -1 +0,0 @@
.app-container[data-v-1ee9ff37]{padding:10px 5px 0 10px;background-color:#f4f4f5}.el-row[data-v-1ee9ff37]{&:last-child{margin-bottom:0}}.bg-purple[data-v-1ee9ff37]{background:#f4f4f5}.grid-content[data-v-1ee9ff37]{border-radius:4px;overflow-x:hidden;overflow-y:auto}.grid-content[data-v-1ee9ff37]::-webkit-scrollbar{width:4px}.grid-content[data-v-1ee9ff37]::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(0,0,0,.2)}.grid-content[data-v-1ee9ff37]::-webkit-scrollbar-track{border-radius:0;background:rgba(0,0,0,.1)}.vehicleDiv[data-v-1ee9ff37]{height:50px;margin:0 0 10px 0}.contentMain[data-v-1ee9ff37]{margin-top:10px}.vehicleDataTab[data-v-1ee9ff37]{width:100%;overflow-y:auto;overflow-x:hidden}.vehicleDataTab[data-v-1ee9ff37]::-webkit-scrollbar{width:4px}.vehicleDataTab[data-v-1ee9ff37]::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(0,0,0,.2)}.vehicleDataTab[data-v-1ee9ff37]::-webkit-scrollbar-track{border-radius:0;background:rgba(0,0,0,.1)}.el-form-item__label[data-v-1ee9ff37]{padding:0}.el-form-item[data-v-1ee9ff37]{margin-bottom:5px}

View File

@ -0,0 +1 @@
.app-container[data-v-6bed5aa6]{padding:10px 5px 0 10px;background-color:#f4f4f5}.el-row[data-v-6bed5aa6]{&:last-child{margin-bottom:0}}.bg-purple[data-v-6bed5aa6]{background:#f4f4f5}.grid-content[data-v-6bed5aa6]{border-radius:4px;overflow-x:hidden;overflow-y:auto}.grid-content[data-v-6bed5aa6]::-webkit-scrollbar{width:4px}.grid-content[data-v-6bed5aa6]::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(0,0,0,.2)}.grid-content[data-v-6bed5aa6]::-webkit-scrollbar-track{border-radius:0;background:rgba(0,0,0,.1)}.vehicleDiv[data-v-6bed5aa6]{height:50px;margin:0 0 10px 0}.contentMain[data-v-6bed5aa6]{margin-top:10px}.vehicleDataTab[data-v-6bed5aa6]{width:100%;overflow-y:auto;overflow-x:hidden}.vehicleDataTab[data-v-6bed5aa6]::-webkit-scrollbar{width:4px}.vehicleDataTab[data-v-6bed5aa6]::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(0,0,0,.2)}.vehicleDataTab[data-v-6bed5aa6]::-webkit-scrollbar-track{border-radius:0;background:rgba(0,0,0,.1)}.el-form-item__label[data-v-6bed5aa6]{padding:0}.el-form-item[data-v-6bed5aa6]{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.949a0224.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.9c27f141.js rel=preload as=script><link href=/static/js/chunk-elementUI.2491fb2f.js rel=preload as=script><link href=/static/js/chunk-libs.2ec7c235.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.949a0224.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 n,o,c=t[0],i=t[1],l=t[2],f=0,s=[];f<c.length;f++)o=c[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&s.push(a[o][0]),a[o]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);d&&d(t);while(s.length)s.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={runtime:0},a={runtime:0},u=[];function c(e){return i.p+"static/js/"+({}[e]||e)+"."+{"chunk-019c66da":"ded8571e","chunk-5b078ae0":"c5f8595b","chunk-22cea610":"a50359dd","chunk-510f32e7":"18a692c7","chunk-630a64ed":"8295bd3f"}[e]+".js"}function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],r={"chunk-5b078ae0":1,"chunk-22cea610":1,"chunk-510f32e7":1,"chunk-630a64ed":1};o[e]?t.push(o[e]):0!==o[e]&&r[e]&&t.push(o[e]=new Promise((function(t,r){for(var n="static/css/"+({}[e]||e)+"."+{"chunk-019c66da":"31d6cfe0","chunk-5b078ae0":"ab6918ec","chunk-22cea610":"3c7f5ad9","chunk-510f32e7":"1510e3c5","chunk-630a64ed":"9a9361c6"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=u[c],f=l.getAttribute("data-href")||l.getAttribute("href");if("stylesheet"===l.rel&&(f===n||f===a))return t()}var s=document.getElementsByTagName("style");for(c=0;c<s.length;c++){l=s[c],f=l.getAttribute("data-href");if(f===n||f===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a;var h=document.getElementsByTagName("head")[0];h.appendChild(d)})).then((function(){o[e]=0})));var n=a[e];if(0!==n)if(n)t.push(n[2]);else{var u=new Promise((function(t,r){n=a[e]=[t,r]}));t.push(n[2]=u);var l,f=document.createElement("script");f.charset="utf-8",f.timeout=120,i.nc&&f.setAttribute("nonce",i.nc),f.src=c(e);var s=new Error;l=function(t){f.onerror=f.onload=null,clearTimeout(d);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;s.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",s.name="ChunkLoadError",s.type=n,s.request=o,r[1](s)}a[e]=void 0}};var d=setTimeout((function(){l({type:"timeout",target:f})}),12e4);f.onerror=f.onload=l,document.head.appendChild(f)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/",i.oe=function(e){throw console.error(e),e};var l=window["webpackJsonp"]=window["webpackJsonp"]||[],f=l.push.bind(l);l.push=t,l=l.slice();for(var s=0;s<l.length;s++)t(l[s]);var d=f;r()})([]);</script><script src=/static/js/chunk-elementUI.2491fb2f.js></script><script src=/static/js/chunk-libs.2ec7c235.js></script><script src=/static/js/app.9c27f141.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.949a0224.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.1fbfed58.js rel=preload as=script><link href=/static/js/chunk-elementUI.2491fb2f.js rel=preload as=script><link href=/static/js/chunk-libs.2ec7c235.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.949a0224.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 n,o,u=t[0],i=t[1],l=t[2],d=0,f=[];d<u.length;d++)o=u[d],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&f.push(a[o][0]),a[o]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);s&&s(t);while(f.length)f.shift()();return c.push.apply(c,l||[]),r()}function r(){for(var e,t=0;t<c.length;t++){for(var r=c[t],n=!0,o=1;o<r.length;o++){var u=r[o];0!==a[u]&&(n=!1)}n&&(c.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={runtime:0},a={runtime:0},c=[];function u(e){return i.p+"static/js/"+({}[e]||e)+"."+{"chunk-019c66da":"ded8571e","chunk-5d512acc":"9e25adb5","chunk-22cea610":"a50359dd","chunk-510f32e7":"18a692c7","chunk-630a64ed":"8295bd3f"}[e]+".js"}function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],r={"chunk-5d512acc":1,"chunk-22cea610":1,"chunk-510f32e7":1,"chunk-630a64ed":1};o[e]?t.push(o[e]):0!==o[e]&&r[e]&&t.push(o[e]=new Promise((function(t,r){for(var n="static/css/"+({}[e]||e)+"."+{"chunk-019c66da":"31d6cfe0","chunk-5d512acc":"1401b6ed","chunk-22cea610":"3c7f5ad9","chunk-510f32e7":"1510e3c5","chunk-630a64ed":"9a9361c6"}[e]+".css",a=i.p+n,c=document.getElementsByTagName("link"),u=0;u<c.length;u++){var l=c[u],d=l.getAttribute("data-href")||l.getAttribute("href");if("stylesheet"===l.rel&&(d===n||d===a))return t()}var f=document.getElementsByTagName("style");for(u=0;u<f.length;u++){l=f[u],d=l.getAttribute("data-href");if(d===n||d===a)return t()}var s=document.createElement("link");s.rel="stylesheet",s.type="text/css",s.onload=t,s.onerror=function(t){var n=t&&t.target&&t.target.src||a,c=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");c.code="CSS_CHUNK_LOAD_FAILED",c.request=n,delete o[e],s.parentNode.removeChild(s),r(c)},s.href=a;var h=document.getElementsByTagName("head")[0];h.appendChild(s)})).then((function(){o[e]=0})));var n=a[e];if(0!==n)if(n)t.push(n[2]);else{var c=new Promise((function(t,r){n=a[e]=[t,r]}));t.push(n[2]=c);var l,d=document.createElement("script");d.charset="utf-8",d.timeout=120,i.nc&&d.setAttribute("nonce",i.nc),d.src=u(e);var f=new Error;l=function(t){d.onerror=d.onload=null,clearTimeout(s);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;f.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",f.name="ChunkLoadError",f.type=n,f.request=o,r[1](f)}a[e]=void 0}};var s=setTimeout((function(){l({type:"timeout",target:d})}),12e4);d.onerror=d.onload=l,document.head.appendChild(d)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/",i.oe=function(e){throw console.error(e),e};var l=window["webpackJsonp"]=window["webpackJsonp"]||[],d=l.push.bind(l);l.push=t,l=l.slice();for(var f=0;f<l.length;f++)t(l[f]);var s=d;r()})([]);</script><script src=/static/js/chunk-elementUI.2491fb2f.js></script><script src=/static/js/chunk-libs.2ec7c235.js></script><script src=/static/js/app.1fbfed58.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