Commit f3e9b9316f054c3620a0f831387dd34df9abd355
1 parent
d21467d2
大间隔模型-线调显示车辆快慢
Showing
2 changed files
with
310 additions
and
5 deletions
src/main/resources/static/real_control_v2/fragments/home/tooltip.html
| @@ -47,7 +47,29 @@ | @@ -47,7 +47,29 @@ | ||
| 47 | <span class="field">速度:</span>{{speed>99?'..':speed}}</div> | 47 | <span class="field">速度:</span>{{speed>99?'..':speed}}</div> |
| 48 | <div> | 48 | <div> |
| 49 | <span class="field">时间:</span>{{dateStr}}</div> | 49 | <span class="field">时间:</span>{{dateStr}}</div> |
| 50 | - {{if expectStopTime!=null}} | 50 | + <div> |
| 51 | + {{if type == 0}} | ||
| 52 | + <span class="field">状态:</span>正常 | ||
| 53 | + {{else if type ==1}} | ||
| 54 | + <span class="field">状态:</span>过慢 | ||
| 55 | + <button class="uk-button search-btn" onclick="gb_svg_tooltip.xfll('{{nbbm}}','{{type}}','{{t}}')">下发消息</button> | ||
| 56 | + {{else if type ==2}} | ||
| 57 | + <span class="field">状态:</span>过快 | ||
| 58 | + <button class="uk-button search-btn" onclick="gb_svg_tooltip.xfll('{{nbbm}}','{{type}}','{{t}}')">下发消息</button> | ||
| 59 | + {{/if}} | ||
| 60 | + | ||
| 61 | + </div> | ||
| 62 | + <div> | ||
| 63 | + {{if type == 0}} | ||
| 64 | + <span class="field">快慢:</span>{{t}}秒 | ||
| 65 | + {{else if type ==1}} | ||
| 66 | + <span class="field">快慢:</span>快{{t}}秒 | ||
| 67 | + {{else if type ==2}} | ||
| 68 | + <span class="field">快慢:</span>慢{{t}}秒 | ||
| 69 | + {{/if}} | ||
| 70 | + </div> | ||
| 71 | + | ||
| 72 | + {{if expectStopTime!=null}} | ||
| 51 | <div> | 73 | <div> |
| 52 | 预计 {{expectStopTime}} 分钟到达终点</div> | 74 | 预计 {{expectStopTime}} 分钟到达终点</div> |
| 53 | {{/if}} | 75 | {{/if}} |
src/main/resources/static/real_control_v2/js/utils/svg_chart_tooltip.js
| @@ -148,6 +148,7 @@ var gb_svg_tooltip = (function () { | @@ -148,6 +148,7 @@ var gb_svg_tooltip = (function () { | ||
| 148 | }); | 148 | }); |
| 149 | //draw line routes | 149 | //draw line routes |
| 150 | gb_svg_map_util.drawLine(map, list[0]); | 150 | gb_svg_map_util.drawLine(map, list[0]); |
| 151 | + refresh(); | ||
| 151 | }; | 152 | }; |
| 152 | 153 | ||
| 153 | function searchByStop(list, stop) { | 154 | function searchByStop(list, stop) { |
| @@ -191,13 +192,26 @@ var gb_svg_tooltip = (function () { | @@ -191,13 +192,26 @@ var gb_svg_tooltip = (function () { | ||
| 191 | * @param deviceId | 192 | * @param deviceId |
| 192 | */ | 193 | */ |
| 193 | var refreshTooltip = function (deviceId, wrap) { | 194 | var refreshTooltip = function (deviceId, wrap) { |
| 195 | + | ||
| 194 | var gps = gb_data_gps.findOne(deviceId); | 196 | var gps = gb_data_gps.findOne(deviceId); |
| 195 | addPlateNo(gps); | 197 | addPlateNo(gps); |
| 196 | 198 | ||
| 197 | - var cont = temps['tooltip_gps_temp'](gps); | ||
| 198 | - var htmlStr = $(cont).find('.cont-text-panel').html(); | 199 | + // 调用接口获取前后车距离 |
| 200 | + if (gps && gps.deviceId) { | ||
| 201 | + fetchPreAndNext(gps.deviceId, function(error, response) { | ||
| 202 | + if (!error && response) { | ||
| 203 | + gps.type = response.data.type; | ||
| 204 | + gps.t = response.data.t; | ||
| 205 | + console.log('获取前后车距离成功:', response); | ||
| 206 | + } | ||
| 207 | + var cont = temps['tooltip_gps_temp'](gps); | ||
| 208 | + var htmlStr = $(cont).find('.cont-text-panel').html(); | ||
| 209 | + | ||
| 210 | + $(wrap).html(htmlStr); | ||
| 211 | + }); | ||
| 212 | + } | ||
| 213 | + | ||
| 199 | 214 | ||
| 200 | - $(wrap).html(htmlStr); | ||
| 201 | 215 | ||
| 202 | //更新地图点位 | 216 | //更新地图点位 |
| 203 | 217 | ||
| @@ -219,9 +233,278 @@ var gb_svg_tooltip = (function () { | @@ -219,9 +233,278 @@ var gb_svg_tooltip = (function () { | ||
| 219 | }catch (e){} | 233 | }catch (e){} |
| 220 | } | 234 | } |
| 221 | 235 | ||
| 236 | + function xfll(deviceId){ | ||
| 237 | + debugger | ||
| 238 | + var text = "您的速度异常"; | ||
| 239 | + | ||
| 240 | + // 弹出选择框;确认则提交;取消则返回 | ||
| 241 | + layer.confirm('是否下发消息['+text+']', {}, | ||
| 242 | + function() { | ||
| 243 | + layer.closeAll(); | ||
| 244 | + //下发指令 | ||
| 245 | + $.post('/directive/phrase', {nbbm: deviceId, text: text}, function (rs) { | ||
| 246 | + if (rs == 0) | ||
| 247 | + notify_succ('指令下发成功'); | ||
| 248 | + else | ||
| 249 | + notify_err('指令下发失败'); | ||
| 250 | + }); | ||
| 251 | + }); | ||
| 252 | + | ||
| 253 | + } | ||
| 254 | + // MD5 加密函数 | ||
| 255 | + function md5(string) { | ||
| 256 | + function md5_RotateLeft(lValue, iShiftBits) { | ||
| 257 | + return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); | ||
| 258 | + } | ||
| 259 | + | ||
| 260 | + function md5_AddUnsigned(lX, lY) { | ||
| 261 | + var lX4, lY4, lX8, lY8, lResult; | ||
| 262 | + lX8 = (lX & 0x80000000); | ||
| 263 | + lY8 = (lY & 0x80000000); | ||
| 264 | + lX4 = (lX & 0x40000000); | ||
| 265 | + lY4 = (lY & 0x40000000); | ||
| 266 | + lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); | ||
| 267 | + if (lX4 & lY4) { | ||
| 268 | + return (lResult ^ 0x80000000 ^ lX8 ^ lY8); | ||
| 269 | + } | ||
| 270 | + if (lX4 | lY4) { | ||
| 271 | + if (lResult & 0x40000000) { | ||
| 272 | + return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); | ||
| 273 | + } else { | ||
| 274 | + return (lResult ^ 0x40000000 ^ lX8 ^ lY8); | ||
| 275 | + } | ||
| 276 | + } else { | ||
| 277 | + return (lResult ^ lX8 ^ lY8); | ||
| 278 | + } | ||
| 279 | + } | ||
| 280 | + | ||
| 281 | + function md5_F(x, y, z) { | ||
| 282 | + return (x & y) | ((~x) & z); | ||
| 283 | + } | ||
| 284 | + | ||
| 285 | + function md5_G(x, y, z) { | ||
| 286 | + return (x & z) | (y & (~z)); | ||
| 287 | + } | ||
| 288 | + | ||
| 289 | + function md5_H(x, y, z) { | ||
| 290 | + return (x ^ y ^ z); | ||
| 291 | + } | ||
| 292 | + | ||
| 293 | + function md5_I(x, y, z) { | ||
| 294 | + return (y ^ (x | (~z))); | ||
| 295 | + } | ||
| 296 | + | ||
| 297 | + function md5_FF(a, b, c, d, x, s, ac) { | ||
| 298 | + a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_F(b, c, d), x), ac)); | ||
| 299 | + return md5_AddUnsigned(md5_RotateLeft(a, s), b); | ||
| 300 | + }; | ||
| 301 | + | ||
| 302 | + function md5_GG(a, b, c, d, x, s, ac) { | ||
| 303 | + a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_G(b, c, d), x), ac)); | ||
| 304 | + return md5_AddUnsigned(md5_RotateLeft(a, s), b); | ||
| 305 | + }; | ||
| 306 | + | ||
| 307 | + function md5_HH(a, b, c, d, x, s, ac) { | ||
| 308 | + a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_H(b, c, d), x), ac)); | ||
| 309 | + return md5_AddUnsigned(md5_RotateLeft(a, s), b); | ||
| 310 | + }; | ||
| 311 | + | ||
| 312 | + function md5_II(a, b, c, d, x, s, ac) { | ||
| 313 | + a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_I(b, c, d), x), ac)); | ||
| 314 | + return md5_AddUnsigned(md5_RotateLeft(a, s), b); | ||
| 315 | + }; | ||
| 316 | + | ||
| 317 | + function md5_ConvertToWordArray(string) { | ||
| 318 | + var lWordCount; | ||
| 319 | + var lMessageLength = string.length; | ||
| 320 | + var lNumberOfWords_temp1 = lMessageLength + 8; | ||
| 321 | + var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64; | ||
| 322 | + var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; | ||
| 323 | + var lWordArray = Array(lNumberOfWords - 1); | ||
| 324 | + var lBytePosition = 0; | ||
| 325 | + var lByteCount = 0; | ||
| 326 | + while (lByteCount < lMessageLength) { | ||
| 327 | + lWordCount = (lByteCount - (lByteCount % 4)) / 4; | ||
| 328 | + lBytePosition = (lByteCount % 4) * 8; | ||
| 329 | + lWordArray[lWordCount] = lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition); | ||
| 330 | + lByteCount++; | ||
| 331 | + } | ||
| 332 | + lWordCount = (lByteCount - (lByteCount % 4)) / 4; | ||
| 333 | + lBytePosition = (lByteCount % 4) * 8; | ||
| 334 | + lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition); | ||
| 335 | + lWordArray[lNumberOfWords - 2] = lMessageLength << 3; | ||
| 336 | + lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; | ||
| 337 | + return lWordArray; | ||
| 338 | + }; | ||
| 339 | + | ||
| 340 | + function md5_WordToHex(lValue) { | ||
| 341 | + var WordToHexValue = "", | ||
| 342 | + WordToHexValue_temp = "", | ||
| 343 | + lByte, lCount; | ||
| 344 | + for (lCount = 0; lCount <= 3; lCount++) { | ||
| 345 | + lByte = (lValue >>> (lCount * 8)) & 255; | ||
| 346 | + WordToHexValue_temp = "0" + lByte.toString(16); | ||
| 347 | + WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2); | ||
| 348 | + } | ||
| 349 | + return WordToHexValue; | ||
| 350 | + }; | ||
| 351 | + | ||
| 352 | + function md5_Utf8Encode(string) { | ||
| 353 | + string = string.replace(/\r\n/g, "\n"); | ||
| 354 | + var utftext = ""; | ||
| 355 | + for (var n = 0; n < string.length; n++) { | ||
| 356 | + var c = string.charCodeAt(n); | ||
| 357 | + if (c < 128) { | ||
| 358 | + utftext += String.fromCharCode(c); | ||
| 359 | + } else if ((c > 127) && (c < 2048)) { | ||
| 360 | + utftext += String.fromCharCode((c >> 6) | 192); | ||
| 361 | + utftext += String.fromCharCode((c & 63) | 128); | ||
| 362 | + } else { | ||
| 363 | + utftext += String.fromCharCode((c >> 12) | 224); | ||
| 364 | + utftext += String.fromCharCode(((c >> 6) & 63) | 128); | ||
| 365 | + utftext += String.fromCharCode((c & 63) | 128); | ||
| 366 | + } | ||
| 367 | + } | ||
| 368 | + return utftext; | ||
| 369 | + }; | ||
| 370 | + var x = Array(); | ||
| 371 | + var k, AA, BB, CC, DD, a, b, c, d; | ||
| 372 | + var S11 = 7, | ||
| 373 | + S12 = 12, | ||
| 374 | + S13 = 17, | ||
| 375 | + S14 = 22; | ||
| 376 | + var S21 = 5, | ||
| 377 | + S22 = 9, | ||
| 378 | + S23 = 14, | ||
| 379 | + S24 = 20; | ||
| 380 | + var S31 = 4, | ||
| 381 | + S32 = 11, | ||
| 382 | + S33 = 16, | ||
| 383 | + S34 = 23; | ||
| 384 | + var S41 = 6, | ||
| 385 | + S42 = 10, | ||
| 386 | + S43 = 15, | ||
| 387 | + S44 = 21; | ||
| 388 | + string = md5_Utf8Encode(string); | ||
| 389 | + x = md5_ConvertToWordArray(string); | ||
| 390 | + a = 0x67452301; | ||
| 391 | + b = 0xEFCDAB89; | ||
| 392 | + c = 0x98BADCFE; | ||
| 393 | + d = 0x10325476; | ||
| 394 | + for (k = 0; k < x.length; k += 16) { | ||
| 395 | + AA = a; | ||
| 396 | + BB = b; | ||
| 397 | + CC = c; | ||
| 398 | + DD = d; | ||
| 399 | + a = md5_FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); | ||
| 400 | + d = md5_FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); | ||
| 401 | + c = md5_FF(c, d, a, b, x[k + 2], S13, 0x242070DB); | ||
| 402 | + b = md5_FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); | ||
| 403 | + a = md5_FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); | ||
| 404 | + d = md5_FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); | ||
| 405 | + c = md5_FF(c, d, a, b, x[k + 6], S13, 0xA8304613); | ||
| 406 | + b = md5_FF(b, c, d, a, x[k + 7], S14, 0xFD469501); | ||
| 407 | + a = md5_FF(a, b, c, d, x[k + 8], S11, 0x698098D8); | ||
| 408 | + d = md5_FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); | ||
| 409 | + c = md5_FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); | ||
| 410 | + b = md5_FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); | ||
| 411 | + a = md5_FF(a, b, c, d, x[k + 12], S11, 0x6B901122); | ||
| 412 | + d = md5_FF(d, a, b, c, x[k + 13], S12, 0xFD987193); | ||
| 413 | + c = md5_FF(c, d, a, b, x[k + 14], S13, 0xA679438E); | ||
| 414 | + b = md5_FF(b, c, d, a, x[k + 15], S14, 0x49B40821); | ||
| 415 | + a = md5_GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); | ||
| 416 | + d = md5_GG(d, a, b, c, x[k + 6], S22, 0xC040B340); | ||
| 417 | + c = md5_GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); | ||
| 418 | + b = md5_GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); | ||
| 419 | + a = md5_GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); | ||
| 420 | + d = md5_GG(d, a, b, c, x[k + 10], S22, 0x2441453); | ||
| 421 | + c = md5_GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); | ||
| 422 | + b = md5_GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); | ||
| 423 | + a = md5_GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); | ||
| 424 | + d = md5_GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); | ||
| 425 | + c = md5_GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); | ||
| 426 | + b = md5_GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); | ||
| 427 | + a = md5_GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); | ||
| 428 | + d = md5_GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); | ||
| 429 | + c = md5_GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); | ||
| 430 | + b = md5_GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); | ||
| 431 | + a = md5_HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); | ||
| 432 | + d = md5_HH(d, a, b, c, x[k + 8], S32, 0x8771F681); | ||
| 433 | + c = md5_HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); | ||
| 434 | + b = md5_HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); | ||
| 435 | + a = md5_HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); | ||
| 436 | + d = md5_HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); | ||
| 437 | + c = md5_HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); | ||
| 438 | + b = md5_HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); | ||
| 439 | + a = md5_HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); | ||
| 440 | + d = md5_HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); | ||
| 441 | + c = md5_HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); | ||
| 442 | + b = md5_HH(b, c, d, a, x[k + 6], S34, 0x4881D05); | ||
| 443 | + a = md5_HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); | ||
| 444 | + d = md5_HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); | ||
| 445 | + c = md5_HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); | ||
| 446 | + b = md5_HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); | ||
| 447 | + a = md5_II(a, b, c, d, x[k + 0], S41, 0xF4292244); | ||
| 448 | + d = md5_II(d, a, b, c, x[k + 7], S42, 0x432AFF97); | ||
| 449 | + c = md5_II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); | ||
| 450 | + b = md5_II(b, c, d, a, x[k + 5], S44, 0xFC93A039); | ||
| 451 | + a = md5_II(a, b, c, d, x[k + 12], S41, 0x655B59C3); | ||
| 452 | + d = md5_II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); | ||
| 453 | + c = md5_II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); | ||
| 454 | + b = md5_II(b, c, d, a, x[k + 1], S44, 0x85845DD1); | ||
| 455 | + a = md5_II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); | ||
| 456 | + d = md5_II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); | ||
| 457 | + c = md5_II(c, d, a, b, x[k + 6], S43, 0xA3014314); | ||
| 458 | + b = md5_II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); | ||
| 459 | + a = md5_II(a, b, c, d, x[k + 4], S41, 0xF7537E82); | ||
| 460 | + d = md5_II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); | ||
| 461 | + c = md5_II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); | ||
| 462 | + b = md5_II(b, c, d, a, x[k + 9], S44, 0xEB86D391); | ||
| 463 | + a = md5_AddUnsigned(a, AA); | ||
| 464 | + b = md5_AddUnsigned(b, BB); | ||
| 465 | + c = md5_AddUnsigned(c, CC); | ||
| 466 | + d = md5_AddUnsigned(d, DD); | ||
| 467 | + } | ||
| 468 | + return (md5_WordToHex(a) + md5_WordToHex(b) + md5_WordToHex(c) + md5_WordToHex(d)).toLowerCase(); | ||
| 469 | + } | ||
| 470 | + | ||
| 471 | + // 接口调用函数 | ||
| 472 | + var fetchPreAndNext = function(deviceId, callback) { | ||
| 473 | + var timestamp = new Date().getTime(); | ||
| 474 | + var password = '5ac52b0c91993e9b3916633a69ed5e28'; | ||
| 475 | + var signStr = timestamp + password; | ||
| 476 | + var sign= md5(signStr); | ||
| 477 | + | ||
| 478 | + var url = 'http://58.34.52.130:9777/distance/preAndNext'; | ||
| 479 | + var data = { | ||
| 480 | + deviceId: deviceId, | ||
| 481 | + timestamp: timestamp, | ||
| 482 | + sign: sign | ||
| 483 | + }; | ||
| 484 | + | ||
| 485 | + $.ajax({ | ||
| 486 | + url: url, | ||
| 487 | + type: 'GET', | ||
| 488 | + data: data, | ||
| 489 | + dataType: 'json', | ||
| 490 | + success: function(response) { | ||
| 491 | + if (callback) { | ||
| 492 | + callback(null, response); | ||
| 493 | + } | ||
| 494 | + }, | ||
| 495 | + error: function(xhr, status, error) { | ||
| 496 | + if (callback) { | ||
| 497 | + callback(error, null); | ||
| 498 | + } | ||
| 499 | + } | ||
| 500 | + }); | ||
| 501 | + }; | ||
| 502 | + | ||
| 503 | + | ||
| 222 | return { | 504 | return { |
| 223 | update: updateFixedTip, | 505 | update: updateFixedTip, |
| 224 | refresh: refresh, | 506 | refresh: refresh, |
| 225 | - refreshTooltip: refreshTooltip | 507 | + refreshTooltip: refreshTooltip, |
| 508 | + xfll:xfll | ||
| 226 | }; | 509 | }; |
| 227 | })(); | 510 | })(); |