Commit 75aa8fc62821b2afd08ebac5f727638e33d64e28

Authored by ljq
1 parent 22320eab

时刻表加入看实际排班

src/main/resources/static/pages/base/timesmodel/gantt.html
@@ -49,18 +49,22 @@ @@ -49,18 +49,22 @@
49 </div> 49 </div>
50 <!-- actions 组件START --> 50 <!-- actions 组件START -->
51 <div class="actions"> 51 <div class="actions">
52 - <div class="btn-group btn-group-devided countbtn" data-toggle="buttons">  
53 - <a class="btn btn-circle blue jhpbonsjpb" href="javascript:;" data-pjax><i class="fa fa-database"></i> 计划排班与实际班次</a> 52 + <div class="btn-group btn-group-devided " data-toggle="buttons">
  53 + <a class="btn btn-circle blue parambtns" href="javascript:;" data-pjax><i class="fa fa-list-ol" aria-hidden="true"></i> 只看实际</a>
54 </div> 54 </div>
  55 + <!-- <div class="btn-group btn-group-devided countbtn" data-toggle="buttons">
  56 + <a class="btn btn-circle blue jhpbonsjpb" href="javascript:;" data-pjax><i class="fa fa-database"></i> 计划排班与实际班次</a>
  57 + </div>-->
55 <div class="btn-group btn-group-devided countbtn" data-toggle="buttons"> 58 <div class="btn-group btn-group-devided countbtn" data-toggle="buttons">
56 <a class="btn btn-circle blue countAdd" href="javascript:;" data-pjax><i class="fa fa-database"></i> 排班统计</a> 59 <a class="btn btn-circle blue countAdd" href="javascript:;" data-pjax><i class="fa fa-database"></i> 排班统计</a>
57 </div> 60 </div>
58 <div class="btn-group btn-group-devided parambtn" data-toggle="buttons"> 61 <div class="btn-group btn-group-devided parambtn" data-toggle="buttons">
59 <a class="btn btn-circle blue paramAdd" href="javascript:;" data-pjax><i class="fa fa-list-ol" aria-hidden="true"></i> 重新生成</a> 62 <a class="btn btn-circle blue paramAdd" href="javascript:;" data-pjax><i class="fa fa-list-ol" aria-hidden="true"></i> 重新生成</a>
60 </div> 63 </div>
61 - <!--<div class="btn-group btn-group-devided checkbtn" data-toggle="buttons">-->  
62 - <!--<a class="btn btn-circle blue checkAdd" href="javascript:;" data-pjax><i class="fa fa-check"></i> 保存数据</a>-->  
63 - <!--</div>--> 64 +
  65 + <!--<div class="btn-group btn-group-devided checkbtn" data-toggle="buttons">
  66 + <a class="btn btn-circle blue checkAdd" href="javascript:;" data-pjax><i class="fa fa-check"></i> 保存数据</a>
  67 + </div>-->
64 68
65 <div class="btn-group exportbtn"> 69 <div class="btn-group exportbtn">
66 <a href="javascript:" class="btn red btn-outline btn-circle exportAdd" data-toggle="dropdown"> 70 <a href="javascript:" class="btn red btn-outline btn-circle exportAdd" data-toggle="dropdown">
src/main/resources/static/pages/base/timesmodel/js/echartsDrawGanTT.js
@@ -41,8 +41,8 @@ var echartsDrawGTT = function () { @@ -41,8 +41,8 @@ var echartsDrawGTT = function () {
41 // 单个班次高度 41 // 单个班次高度
42 var height; 42 var height;
43 // 坐标轴位置 43 // 坐标轴位置
44 - var baseTop = 70;  
45 - var gridHeight = 60; 44 + var baseTop = 50;
  45 + var gridHeight = 70;
46 46
47 $("#bcContainer").bind("contextmenu", function(){ 47 $("#bcContainer").bind("contextmenu", function(){
48 return false; 48 return false;
@@ -111,9 +111,11 @@ var echartsDrawGTT = function () { @@ -111,9 +111,11 @@ var echartsDrawGTT = function () {
111 bcObj.qs, 111 bcObj.qs,
112 //bcObj.isSwitchXl, 112 //bcObj.isSwitchXl,
113 //bcObj.bz, 113 //bcObj.bz,
114 - bcObj.isjh ? 0:1,  
115 - bcObj.fcsj,  
116 - bcObj.ARRIVALTIME, 114 + bcObj.qs,
  115 + bcObj.ttinfo,
  116 + bcObj.qs,
  117 + bcObj.fcsj_1,//开始时间//21 和 1对应
  118 + bcObj.ARRIVALTIME_1,//结束时间
117 ], 119 ],
118 itemStyle: { 120 itemStyle: {
119 normal: { 121 normal: {
@@ -208,9 +210,8 @@ var echartsDrawGTT = function () { @@ -208,9 +210,8 @@ var echartsDrawGTT = function () {
208 +'<br>发车时间:' + getHoursAndMinutes(params.value[1]) 210 +'<br>发车时间:' + getHoursAndMinutes(params.value[1])
209 +'<br>到站时间:' + getHoursAndMinutes(params.value[2]) 211 +'<br>到站时间:' + getHoursAndMinutes(params.value[2])
210 +'<br>行驶时间:' + params.value[3]/60000 +'分钟' 212 +'<br>行驶时间:' + params.value[3]/60000 +'分钟'
211 - +'<br>停休时间:' + params.value[15] +'分钟' 213 + /* +'<br>停休时间:' + params.value[15] +'分钟'*/
212 +'<br>班次类型:' + bcTypeStr 214 +'<br>班次类型:' + bcTypeStr
213 - +'<br>班次情况:' +(params.value[18] == 0 ? '调度': '计划');  
214 return str; 215 return str;
215 }, 216 },
216 }, 217 },
@@ -306,36 +307,49 @@ var echartsDrawGTT = function () { @@ -306,36 +307,49 @@ var echartsDrawGTT = function () {
306 lastStr = '',// 班次历时 307 lastStr = '',// 班次历时
307 stayStr = '',// 停站时间 308 stayStr = '',// 停站时间
308 timeStr = '', 309 timeStr = '',
  310 + timeStr_1 = null,
309 bcTypeStr = ''; 311 bcTypeStr = '';
310 - if(type=='bd' || type=='lc' || type=='out' || type=='in')  
311 - timeStr = getHoursAndMinutes(params.data.value[1]);  
312 - else  
313 - timeStr = getHoursAndMinutes(params.data.value[1])+'~'+getHoursAndMinutes(params.data.value[2]);  
314 312
  313 + if (type == 'bd' || type == 'lc' || type == 'out' || type == 'in') {
  314 + debugger
  315 + timeStr = getHoursAndMinutes(params.data.value[1]);
  316 + timeStr_1 = params.data.value[21] !== undefined ? params.data.value[21] : null;
  317 + } else {
  318 + timeStr = getHoursAndMinutes(params.data.value[1]) + '~' + getHoursAndMinutes(params.data.value[2]);
  319 + var t1 = params.data.value[21] !== undefined ? params.data.value[21] : null;
  320 + var t2 = params.data.value[22] !== undefined ? params.data.value[22] : null;
  321 + if (t1 != null && t2 != null)
  322 + timeStr_1 = t1 + '~' + t2;
  323 + }
315 var last = params.data.value[3] / 60000; 324 var last = params.data.value[3] / 60000;
316 - if(last>0) {  
317 - if(type=='bd' || type=='lc') 325 + if (last > 0) {
  326 + if (type == 'bd' || type == 'lc')
318 lastStr = "保:" + last; 327 lastStr = "保:" + last;
319 - else if(type=='cf') 328 + else if (type == 'cf')
320 lastStr = "吃:" + last; 329 lastStr = "吃:" + last;
321 else 330 else
322 lastStr = "行:" + last; 331 lastStr = "行:" + last;
323 } 332 }
324 // 除了早晚例保,和进出场班次其余类型班次有停站时间 333 // 除了早晚例保,和进出场班次其余类型班次有停站时间
325 - if(type!='bd' && type!='lc' && type!='out' && type!='in') { 334 + if (type != 'bd' && type != 'lc' && type != 'out' && type != 'in') {
326 //if(params.data.value[15]>=0) 335 //if(params.data.value[15]>=0)
327 stayStr = "停:" + params.data.value[15]; 336 stayStr = "停:" + params.data.value[15];
328 } 337 }
329 // 分班显示‘分’ 338 // 分班显示‘分’
330 - if(params.data.value[16] == 1) 339 + if (params.data.value[16] == 1)
331 bcTypeStr = "分"; 340 bcTypeStr = "分";
332 else 341 else
333 bcTypeStr = bcType[type]; 342 bcTypeStr = bcType[type];
334 343
335 var arr = [ 344 var arr = [
336 - '{left|' + timeStr + '}{type|'+ ((dataZoomEnd - dataZoomStart) <= 70 ? bcType[type] : '') +'}',  
337 - '{left|' + lastStr + '}{left|' + stayStr + '}' 345 + '{left|' + timeStr + '}{type|' + ((dataZoomEnd - dataZoomStart) <= 70 ? bcType[type] : '') + '}',
338 ]; 346 ];
  347 + timeStr_1 != null ? arr.push('{left|' + timeStr_1 + '}{type|' + '实' + '}') : null;
  348 + var n ='';
  349 + if (params.data.value[2] !== undefined && params.data.value[22] !== undefined)
  350 + n = getHoursAndMinutes(params.data.value[2]) == params.data.value[22] ? '' : '偏差';
  351 +
  352 + arr.push('{left|' + lastStr + '}{left|' + n + '}');
339 return arr.join('\n'); 353 return arr.join('\n');
340 }, 354 },
341 rich: { 355 rich: {
@@ -588,12 +602,18 @@ var echartsDrawGTT = function () { @@ -588,12 +602,18 @@ var echartsDrawGTT = function () {
588 var type = params.data.value[6], 602 var type = params.data.value[6],
589 lastStr = '',// 班次历时 603 lastStr = '',// 班次历时
590 stayStr = '',// 停站时间 604 stayStr = '',// 停站时间
591 - timeStr = '';  
592 - if(type=='bd' || type=='lc' || type=='out' || type=='in') 605 + timeStr = '',
  606 + timeStr_1 ;
  607 + if (type == 'bd' || type == 'lc' || type == 'out' || type == 'in') {
593 timeStr = getHoursAndMinutes(params.data.value[1]); 608 timeStr = getHoursAndMinutes(params.data.value[1]);
594 - else  
595 - timeStr = getHoursAndMinutes(params.data.value[1])+'~'+getHoursAndMinutes(params.data.value[2]);  
596 - 609 + timeStr_1 = params.data.value[21] != undefined? params.data.value[21] : null;
  610 + } else {
  611 + timeStr = getHoursAndMinutes(params.data.value[1]) + '~' + getHoursAndMinutes(params.data.value[2]);
  612 + var t1 = params.data.value[21] !== undefined ? params.data.value[21]: null;
  613 + var t2 = params.data.value[22] !== undefined ? params.data.value[22]: null;
  614 + if (t1 != null && t2 != null)
  615 + timeStr_1 =t1+ '~' +t2;
  616 + }
597 var last = params.data.value[3] / 60000; 617 var last = params.data.value[3] / 60000;
598 if(last>0) { 618 if(last>0) {
599 if(type=='bd' || type=='lc') 619 if(type=='bd' || type=='lc')
@@ -614,9 +634,14 @@ var echartsDrawGTT = function () { @@ -614,9 +634,14 @@ var echartsDrawGTT = function () {
614 stayStr = "停:" + params.data.value[15]; 634 stayStr = "停:" + params.data.value[15];
615 } 635 }
616 var arr = [ 636 var arr = [
617 - '{left|' + timeStr + '}{type|'+ ((dataZoomEnd - dataZoomStart) <= 70 ? bcType[type] : '') +'}',  
618 - '{left|' + lastStr + '}{left|' + stayStr + '}' 637 + '{left|' + timeStr + '}{type|' + ((dataZoomEnd - dataZoomStart) <= 70 ? bcType[type] : '') + '}',
619 ]; 638 ];
  639 + timeStr_1 != null ? arr.push('{left|' + timeStr_1 + '}{type|' + '实' + '}') : '';
  640 + var n ='';
  641 + if (params.data.value[2] !== undefined && params.data.value[22] !== undefined)
  642 + n = getHoursAndMinutes(params.data.value[2]) == params.data.value[22] ? '' : '偏差';
  643 +
  644 + arr.push('{left|' + lastStr + '}{left|' + n + '}');
620 645
621 return arr.join('\n'); 646 return arr.join('\n');
622 }, 647 },
src/main/resources/static/pages/base/timesmodel/js/gantt.js
@@ -121,19 +121,18 @@ @@ -121,19 +121,18 @@
121 // 使用已有的时刻表明细数据渲染视图. 121 // 使用已有的时刻表明细数据渲染视图.
122 var rsjar = jsonA.rsD; 122 var rsjar = jsonA.rsD;
123 var rsLP = jsonA.rsLP; 123 var rsLP = jsonA.rsLP;
124 - debugger 124 +
125 //查询出当日所有班次,并加入data,json里面一块输送给 125 //查询出当日所有班次,并加入data,json里面一块输送给
126 $.get('/logZndd/sch_qbc', {xl : rsjar[0].xl},function (data) { 126 $.get('/logZndd/sch_qbc', {xl : rsjar[0].xl},function (data) {
127 for (let t in data){ 127 for (let t in data){
128 var sch = data[t]; 128 var sch = data[t];
129 if (sch.status == -1) 129 if (sch.status == -1)
130 continue; 130 continue;
131 - for (let lp in rsLP){  
132 - var lps = rsLP[lp]; 131 + for (let rs in rsjar){
  132 + var rsj = rsjar[rs];
133 //相同路牌加入到rsjar里,并特殊标注一个,提高一点y坐标 133 //相同路牌加入到rsjar里,并特殊标注一个,提高一点y坐标
134 - if(sch.lpName == lps.lpName){  
135 - rsjar.push(schonmap(sch,lps));  
136 - 134 + if(sch.lpName == rsj.lpName && sch.fcsj == rsj.fcsj && sch.bcType == rsj.bcType){
  135 + schonmap(sch,rsj);
137 } 136 }
138 } 137 }
139 } 138 }
@@ -212,32 +211,23 @@ @@ -212,32 +211,23 @@
212 },500); 211 },500);
213 212
214 213
215 - function schonmap(sch,lp){  
216 - var maps = {};  
217 - maps.ARRIVALTIME = sch.zdsj;  
218 - maps.STOPTIME= 0;  
219 - maps.bcType = sch.bcType;  
220 - maps.bcs = sch.bcs;  
221 - maps.bcsj= sch.bcsj;  
222 - maps.fcno= sch.fcno;  
223 - maps.fcsj= sch.fcsj;  
224 - maps.isSwitchXl= 0;  
225 - maps.isfb =0;  
226 - maps.jhlc = sch.jhlc;  
227 - maps.lp = lp.lp;  
228 - maps.lpName = sch.lpName;  
229 - maps.lpNo = lp.lpNo;  
230 - maps.lpType = lp.lpType;  
231 - maps.parent= 1;  
232 - maps.qdz= sch.qdzCode;  
233 - maps.tcc = 98;  
234 - //maps.ttinfo: 7061  
235 - maps.xl = sch.xlBm;  
236 - maps.xlDir= sch.xlDir == 0 ? "relationshipGraph-up" : "relationshipGraph-down";  
237 - maps.zdz= sch.zdzCode;  
238 - maps.isjh = true;  
239 - maps.lpName = sch.lpName + "_实际排班";  
240 - return maps; 214 + function schonmap(sch,rsj){
  215 + rsj.ARRIVALTIME_1 = sch.zdsjActual;
  216 + rsj.bcType_1 = sch.bcType;
  217 + rsj.bcs_1 = sch.bcs;
  218 + rsj.bcsj_1= sch.bcsj;
  219 + rsj.fcno_1= sch.fcno;
  220 + rsj.fcsj_1= sch.fcsjActual;
  221 + rsj.isSwitchXl_1= 0;
  222 + rsj.isfb_1 =0;
  223 + rsj.jhlc_1 = sch.jhlc;
  224 + rsj.lpName_1 = sch.lpName;
  225 + rsj.parent_1= 1;
  226 + rsj.qdz_1= sch.qdzCode;
  227 + rsj.xl_1 = sch.xlBm;
  228 + rsj.xlDir_1= sch.xlDir == 0 ? "relationshipGraph-up" : "relationshipGraph-down";
  229 + rsj.zdz_1= sch.zdzCode;
  230 + rsj.isjh_1 = true;
241 } 231 }
242 232
243 /** 233 /**
src/main/resources/static/pages/base/timesmodel/js/systemTools.js
@@ -457,7 +457,7 @@ $(&#39;.jhpbonsjpb&#39;).on(&#39;click&#39;,function() { @@ -457,7 +457,7 @@ $(&#39;.jhpbonsjpb&#39;).on(&#39;click&#39;,function() {
457 var lp = LpData[p]; 457 var lp = LpData[p];
458 var m = {}; // 单个路牌统计数据 458 var m = {}; // 单个路牌统计数据
459 var bcs = 0 ; //班次数 459 var bcs = 0 ; //班次数
460 - var yylc = 0.0; //营运里程 460 + var yylc = 0; //营运里程
461 var jclc = 0.0 ;//进场时间 461 var jclc = 0.0 ;//进场时间
462 var cllc = 0.0; //出场时间 462 var cllc = 0.0; //出场时间
463 var ksyyList = [];//开始营运时间 463 var ksyyList = [];//开始营运时间
@@ -466,18 +466,28 @@ $(&#39;.jhpbonsjpb&#39;).on(&#39;click&#39;,function() { @@ -466,18 +466,28 @@ $(&#39;.jhpbonsjpb&#39;).on(&#39;click&#39;,function() {
466 var bcObj = list[i].value; 466 var bcObj = list[i].value;
467 //相同路牌 467 //相同路牌
468 if (lp == bcObj[0]) { 468 if (lp == bcObj[0]) {
469 - bcs++;  
470 - yylc += bcObj[9]; 469 +
471 470
472 if (bcObj[6] == "in") { 471 if (bcObj[6] == "in") {
473 jclc += bcObj[3] /60000; 472 jclc += bcObj[3] /60000;
474 } else if (bcObj[6] == "out") { 473 } else if (bcObj[6] == "out") {
475 cllc += bcObj[3] /60000; 474 cllc += bcObj[3] /60000;
  475 + }else {
  476 + bcs++;
  477 +
  478 + yylc += bcObj[9];
476 } 479 }
477 ksyyList.push(bcObj[19]); 480 ksyyList.push(bcObj[19]);
478 jsyyList.push(bcObj[20]); 481 jsyyList.push(bcObj[20]);
479 } 482 }
480 } 483 }
  484 + ksyyList.sort(function(a,b){
  485 + return hhmmToTimestamp(a) - hhmmToTimestamp(b);
  486 + });
  487 + jsyyList.sort(function(a,b){
  488 + return hhmmToTimestamp(a) - hhmmToTimestamp(b);
  489 + });
  490 +
481 m.lp = lp; 491 m.lp = lp;
482 m.bcs = bcs; 492 m.bcs = bcs;
483 m.yylc = yylc; 493 m.yylc = yylc;
@@ -498,6 +508,19 @@ $(&#39;.jhpbonsjpb&#39;).on(&#39;click&#39;,function() { @@ -498,6 +508,19 @@ $(&#39;.jhpbonsjpb&#39;).on(&#39;click&#39;,function() {
498 LPGroupBy.push(lp); 508 LPGroupBy.push(lp);
499 509
500 } 510 }
  511 +
  512 + //转时间戳
  513 + function hhmmToTimestamp(hhmm, date = new Date()) {
  514 + // 分割小时和分钟
  515 + const [hours, minutes] = hhmm.split(':').map(Number);
  516 +
  517 + // 设置日期对象的小时和分钟
  518 + date.setHours(hours, minutes, 0, 0); // 设置秒和毫秒为0
  519 +
  520 + // 返回时间戳
  521 + return date.getTime();
  522 + }
  523 +
501 LPGroupBy.sort(function(a,b){ 524 LPGroupBy.sort(function(a,b){
502 return a - b; 525 return a - b;
503 }); 526 });
@@ -545,6 +568,110 @@ $(&#39;.jhpbonsjpb&#39;).on(&#39;click&#39;,function() { @@ -545,6 +568,110 @@ $(&#39;.jhpbonsjpb&#39;).on(&#39;click&#39;,function() {
545 }); 568 });
546 569
547 570
  571 +
  572 +$('.parambtns').on('click',function (){
  573 + var historyData = echartsDrawGTT.getHistoryData(),
  574 + list = historyData[0];
  575 + var rsLP = echartsDrawGTT.getLpData(),
  576 + rsjar = [];
  577 + debugger
  578 + rsLP.sort(function(m,n){return m-n})
  579 + //查询出当日所有班次,并加入data,json里面一块输送给
  580 + $.get('/logZndd/sch_qbc', {xl : list[0].value[12]},function (data) {
  581 + for (let t in data){
  582 + var sch = data[t];
  583 + if (sch.status == -1)
  584 + continue;
  585 + for (let lp in rsLP){
  586 + var lps = rsLP[lp];
  587 + //相同路牌加入到rsjar里,并特殊标注一个,提高一点y坐标
  588 + if(sch.lpName == lps){
  589 + rsjar.push(schonmap(sch));
  590 + }
  591 + }
  592 + }
  593 + // 2、重新刷新表单数据
  594 + echartsDrawGTT.init(rsjar,true,true);
  595 + })
  596 +})
  597 +
  598 +/**
  599 + * @description : (TODO) 监听保存数据事件.
  600 + *
  601 + * @status OK.
  602 + ************************************************************************************************************************************************/
  603 +$('.checkAdd').on('click',function() {
  604 + var historyData = echartsDrawGTT.getHistoryData(),
  605 + list = historyData[0];
  606 + var rsLP = echartsDrawGTT.getLpData(),
  607 +
  608 + bcData = echartsDrawGTT.getHistoryData(),
  609 + bcData
  610 + rsjar = [];
  611 + debugger
  612 + var xl = list[0].value[12];
  613 + // 判断选择框是否存在.、
  614 + // 关闭所有提示弹出层.
  615 + layer.closeAll();
  616 + layer.confirm('您正处于【批量班次操作】过程中...是否确定退出当前操作进行【保存数据】!', {
  617 + btn : [ '确认提示并提交', '取消' ]
  618 + },function () {
  619 + // 关闭所有提示弹出层.
  620 + layer.closeAll();
  621 +
  622 + layer.confirm('系统已存在-->线路【'+
  623 + xl +'】-->时刻表明细!是否覆盖!', {
  624 + btn : [ '确认并提交', '取消' ]
  625 + },function () {
  626 + // 关闭所有提示弹出层.
  627 + layer.closeAll();
  628 + // 2、弹出提示层.
  629 + var index = layer.load(1, {
  630 + shade: [0.1,'#fff'] // 0.1透明度的白色背景
  631 + });
  632 + var skb = list[0].value[19];
  633 + // 3、post请求保存数据.
  634 + $post('/tidc/skbDetailMxSave',{'d':JSON.stringify(list), 'xl':xl, 'skb':skb},function(result) {
  635 + // 3.1、关闭弹出层.
  636 + layer.close(index);
  637 + if(result){
  638 + if(result.status=='SUCCESS') {
  639 + layer.msg('保存成功...');// 弹出添加成功提示消息
  640 + } else if(result.status=='ERROR') {
  641 + layer.msg('保存失败...');// 弹出添加失败提示消息
  642 + }
  643 + }
  644 + loadPage('index.html');// 返回index.html页面
  645 + });
  646 + });
  647 + });
  648 +});
  649 +function schonmap(sch){
  650 + var maps = {};
  651 + maps.ARRIVALTIME = sch.zdsjActual;
  652 + maps.STOPTIME= 0;
  653 + maps.bcType = sch.bcType;
  654 + maps.bcs = sch.bcs;
  655 + maps.bcsj= sch.bcsj;
  656 + maps.fcno= sch.fcno;
  657 + maps.fcsj= sch.fcsjActual;
  658 + maps.isSwitchXl= 0;
  659 + maps.isfb =0;
  660 + maps.jhlc = sch.jhlc;
  661 + maps.lp = sch.lpName;
  662 + maps.lpNo = Math.max(sch.lpName);
  663 + maps.lpName = sch.lpName;
  664 + maps.lpType = '普通路牌';
  665 + maps.parent= 1;
  666 + maps.qdz= sch.qdzCode;
  667 + maps.tcc = 98;
  668 + //maps.ttinfo: 7061
  669 + maps.xl = sch.xlBm;
  670 + maps.xlDir= sch.xlDir == 0 ? "relationshipGraph-up" : "relationshipGraph-down";
  671 + maps.zdz= sch.zdzCode;
  672 + maps.isjh = true;
  673 + return maps;
  674 +}
548 /** 675 /**
549 * @description : (TODO) 重新生成事件. 676 * @description : (TODO) 重新生成事件.
550 * 677 *