Browse Source

健康管理功能模块优化与BUG修复

shilin 2 years ago
parent
commit
f2995b233a
100 changed files with 27590 additions and 1675 deletions
  1. 0 620
      web/health-hb/target/classes/static/admin/assets/js/blockUI/jquery.blockUI.js
  2. 0 18
      web/health-hb/target/classes/static/admin/assets/js/bootstrap/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.lt.js
  3. 0 188
      web/health-hb/target/classes/static/admin/bootstarp/ndesaintheme.com/themes/apricot/assets/js/footable/js/footable.sortcd98.js
  4. 115 0
      web/monitor-hb/src/main/java/com/gyee/frame/common/cache/RedisSessionDao.java
  5. 172 157
      web/monitor-hb/src/main/java/com/gyee/frame/common/interceptor/MyInterceptor.java
  6. 501 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/AdminController.java
  7. 67 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/IndexController.java
  8. 32 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/ApiController.java
  9. 46 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/ApiController2.java
  10. 212 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/AutoCodeController.java
  11. 142 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/CaptchaController.java
  12. 181 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/DictDataController.java
  13. 170 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/DictTypeController.java
  14. 175 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/EmailController.java
  15. 251 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/FileController.java
  16. 38 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/JsonController.java
  17. 91 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/LogController.java
  18. 268 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/PermissionController.java
  19. 261 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/PermissionVueController.java
  20. 111 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/ProvinceLinkageController.java
  21. 42 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/QuartzController.java
  22. 199 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/QuartzJobController.java
  23. 116 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/QuartzJobLogController.java
  24. 175 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/RoleController.java
  25. 170 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/RoleVueController.java
  26. 47 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/ServiceController.java
  27. 46 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SwaggerController.java
  28. 174 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysAreaController.java
  29. 170 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysCityController.java
  30. 218 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysDepartmentController.java
  31. 195 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysInterUrlController.java
  32. 231 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysNoticeController.java
  33. 167 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysPositionController.java
  34. 175 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysProvinceController.java
  35. 173 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysStreetController.java
  36. 39 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/TestController.java
  37. 39 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/ToolController.java
  38. 83 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/UeditorController.java
  39. 239 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/UserController.java
  40. 229 0
      web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/UserVueController.java
  41. 0 96
      web/monitor-hb/src/main/java/com/gyee/frame/mapper/auto/EarlywarningmainMapper.java.1
  42. 0 96
      web/monitor-hb/src/main/java/com/gyee/frame/mapper/auto/EarlywarningmainMapper.java.2
  43. 40 0
      web/monitor-hb/src/main/java/com/gyee/frame/mapper/auto/SysInterUrlMapper.java
  44. 3 3
      web/monitor-hb/src/main/java/com/gyee/frame/model/auto/Alertrule2.java
  45. 10 10
      web/monitor-hb/src/main/java/com/gyee/frame/model/auto/Alertrule2Example.java
  46. 87 0
      web/monitor-hb/src/main/java/com/gyee/frame/model/auto/SysInterUrl.java
  47. 491 0
      web/monitor-hb/src/main/java/com/gyee/frame/model/auto/SysInterUrlExample.java
  48. 137 0
      web/monitor-hb/src/main/java/com/gyee/frame/service/SysInterUrlService.java
  49. 1 1
      web/monitor-hb/src/main/java/com/gyee/frame/service/SysPermissionService.java
  50. 5 2
      web/monitor-hb/src/main/java/com/gyee/frame/service/websocket/GenreSetPushService.java
  51. 1 1
      web/monitor-hb/src/main/java/com/gyee/frame/service/websocket/MatrixQfPushService.java
  52. 99 0
      web/monitor-hb/src/main/java/com/gyee/frame/shiro/config/MShiroFilterFactoryBean.java
  53. 71 24
      web/monitor-hb/src/main/java/com/gyee/frame/shiro/config/ShiroConfig.java
  54. 52 11
      web/monitor-hb/src/main/java/com/gyee/frame/shiro/config/ShiroService.java
  55. 3 3
      web/monitor-hb/src/main/java/com/gyee/frame/shiro/service/MyShiroRealm.java
  56. 13 1
      web/monitor-hb/src/main/resources/application-hb.yml
  57. 222 0
      web/monitor-hb/src/main/resources/application-hbn.yml
  58. 1 1
      web/monitor-hb/src/main/resources/application.yml
  59. 443 443
      web/monitor-hb/src/main/resources/mybatis/auto/Alertrule2Mapper.xml
  60. 236 0
      web/monitor-hb/src/main/resources/mybatis/auto/SysInterUrlMapper.xml
  61. BIN
      web/monitor-hb/src/main/resources/resources.7z
  62. 251 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/Checkboxes/awesome-bootstrap-checkbox.css
  63. 268 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/Checkboxes/build.css
  64. 121 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/awwwards.css
  65. 5832 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/bootstrap.css
  66. 5831 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/bootstrap.css.map
  67. 427 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/dripicon.css
  68. 0 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/entypo-icon.css
  69. 0 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/extra-pages.css
  70. 2337 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/font-awesome.css
  71. 22 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/icons-style.css
  72. 0 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/loader-style.css
  73. 48 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/mail.css
  74. 12 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/maki-icons.css
  75. 0 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/media.css
  76. 0 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/open-sans.css
  77. 138 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/profile.css
  78. BIN
      web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_black_left.png
  79. 0 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_black_left2x.png
  80. BIN
      web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_black_right.png
  81. 0 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_black_right2x.png
  82. BIN
      web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_green_left.png
  83. BIN
      web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_green_left2x.png
  84. BIN
      web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_green_right.png
  85. BIN
      web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_green_right2x.png
  86. BIN
      web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_white_left.png
  87. BIN
      web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_white_left2x.png
  88. BIN
      web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_white_right.png
  89. BIN
      web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_white_right2x.png
  90. 226 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/signin.css
  91. 362 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/social.css
  92. 3070 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/style.css
  93. 28 0
      web/monitor-hb/src/main/resources/static/admin/assets/css/weather-icons.min.css
  94. 370 0
      web/monitor-hb/src/main/resources/static/admin/assets/font-ali/demo.css
  95. 142 0
      web/monitor-hb/src/main/resources/static/admin/assets/font-ali/demo_fontclass.html
  96. 199 0
      web/monitor-hb/src/main/resources/static/admin/assets/font-ali/demo_symbol.html
  97. 180 0
      web/monitor-hb/src/main/resources/static/admin/assets/font-ali/demo_unicode.html
  98. 51 0
      web/monitor-hb/src/main/resources/static/admin/assets/font-ali/iconfont.css
  99. BIN
      web/monitor-hb/src/main/resources/static/admin/assets/font-ali/iconfont.eot
  100. 0 0
      web/monitor-hb/src/main/resources/static/admin/assets/font-ali/iconfont.js

+ 0 - 620
web/health-hb/target/classes/static/admin/assets/js/blockUI/jquery.blockUI.js

@@ -1,620 +0,0 @@
-/*!
- * jQuery blockUI plugin
- * Version 2.70.0-2014.11.23
- * Requires jQuery v1.7 or later
- *jQuery遮罩插件 jquery.blockUI.js
- * Examples at: http://malsup.com/jquery/block/
- * Copyright (c) 2007-2013 M. Alsup
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- *
- * Thanks to Amir-Hossein Sobhi for some excellent contributions!
- */
-
-;(function() {
-/*jshint eqeqeq:false curly:false latedef:false */
-"use strict";
-
-	function setup($) {
-		$.fn._fadeIn = $.fn.fadeIn;
-
-		var noOp = $.noop || function() {};
-
-		// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
-		// confusing userAgent strings on Vista)
-		var msie = /MSIE/.test(navigator.userAgent);
-		var ie6  = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);
-		var mode = document.documentMode || 0;
-		var setExpr = $.isFunction( document.createElement('div').style.setExpression );
-
-		// global $ methods for blocking/unblocking the entire page
-		$.blockUI   = function(opts) { install(window, opts); };
-		$.unblockUI = function(opts) { remove(window, opts); };
-
-		// convenience method for quick growl-like notifications  (http://www.google.com/search?q=growl)
-		$.growlUI = function(title, message, timeout, onClose) {
-			var $m = $('<div class="growlUI"></div>');
-			if (title) $m.append('<h1>'+title+'</h1>');
-			if (message) $m.append('<h2>'+message+'</h2>');
-			if (timeout === undefined) timeout = 3000;
-
-			// Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications
-			var callBlock = function(opts) {
-				opts = opts || {};
-
-				$.blockUI({
-					message: $m,
-					fadeIn : typeof opts.fadeIn  !== 'undefined' ? opts.fadeIn  : 700,
-					fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,
-					timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,
-					centerY: false,
-					showOverlay: false,
-					onUnblock: onClose,
-					css: $.blockUI.defaults.growlCSS
-				});
-			};
-
-			callBlock();
-			var nonmousedOpacity = $m.css('opacity');
-			$m.mouseover(function() {
-				callBlock({
-					fadeIn: 0,
-					timeout: 30000
-				});
-
-				var displayBlock = $('.blockMsg');
-				displayBlock.stop(); // cancel fadeout if it has started
-				displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency
-			}).mouseout(function() {
-				$('.blockMsg').fadeOut(1000);
-			});
-			// End konapun additions
-		};
-
-		// plugin method for blocking element content
-		$.fn.block = function(opts) {
-			if ( this[0] === window ) {
-				$.blockUI( opts );
-				return this;
-			}
-			var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});
-			this.each(function() {
-				var $el = $(this);
-				if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))
-					return;
-				$el.unblock({ fadeOut: 0 });
-			});
-
-			return this.each(function() {
-				if ($.css(this,'position') == 'static') {
-					this.style.position = 'relative';
-					$(this).data('blockUI.static', true);
-				}
-				this.style.zoom = 1; // force 'hasLayout' in ie
-				install(this, opts);
-			});
-		};
-
-		// plugin method for unblocking element content
-		$.fn.unblock = function(opts) {
-			if ( this[0] === window ) {
-				$.unblockUI( opts );
-				return this;
-			}
-			return this.each(function() {
-				remove(this, opts);
-			});
-		};
-
-		$.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!
-
-		// override these in your code to change the default behavior and style
-		$.blockUI.defaults = {
-			// message displayed when blocking (use null for no message)
-			message:  '<div class="loaderbox"><div class="loading-activity"></div> 加载中......</div>',
-
-			title: null,		// title string; only used when theme == true
-			draggable: true,	// only used when theme == true (requires jquery-ui.js to be loaded)
-
-			theme: false, // set to true to use with jQuery UI themes
-
-			// styles for the message when blocking; if you wish to disable
-			// these and use an external stylesheet then do this in your code:
-			// $.blockUI.defaults.css = {};
-			css: {
-				padding:	0,
-				margin:		0,
-				width:		'30%',
-				top:		'40%',
-				left:		'35%',
-				textAlign:	'center',
-				color:		'#000',
-				border:		'0px',
-				backgroundColor:'transparent',
-				cursor:		'wait'
-			},
-
-			// minimal style set used when themes are used
-			themedCSS: {
-				width:	'30%',
-				top:	'40%',
-				left:	'35%'
-			},
-
-			// styles for the overlay
-			overlayCSS:  {
-				backgroundColor:	'#000',
-				opacity:			0.6,
-				cursor:				'wait'
-			},
-
-			// style to replace wait cursor before unblocking to correct issue
-			// of lingering wait cursor
-			cursorReset: 'default',
-
-			// styles applied when using $.growlUI
-			growlCSS: {
-				width:		'350px',
-				top:		'10px',
-				left:		'',
-				right:		'10px',
-				border:		'none',
-				padding:	'5px',
-				opacity:	0.6,
-				cursor:		'default',
-				color:		'#fff',
-				backgroundColor: '#000',
-				'-webkit-border-radius':'10px',
-				'-moz-border-radius':	'10px',
-				'border-radius':		'10px'
-			},
-
-			// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
-			// (hat tip to Jorge H. N. de Vasconcelos)
-			/*jshint scripturl:true */
-			iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',
-
-			// force usage of iframe in non-IE browsers (handy for blocking applets)
-			forceIframe: false,
-
-			// z-index for the blocking overlay
-			baseZ: 1000,
-
-			// set these to true to have the message automatically centered
-			centerX: true, // <-- only effects element blocking (page block controlled via css above)
-			centerY: true,
-
-			// allow body element to be stetched in ie6; this makes blocking look better
-			// on "short" pages.  disable if you wish to prevent changes to the body height
-			allowBodyStretch: true,
-
-			// enable if you want key and mouse events to be disabled for content that is blocked
-			bindEvents: true,
-
-			// be default blockUI will supress tab navigation from leaving blocking content
-			// (if bindEvents is true)
-			constrainTabKey: true,
-
-			// fadeIn time in millis; set to 0 to disable fadeIn on block
-			fadeIn:  200,
-
-			// fadeOut time in millis; set to 0 to disable fadeOut on unblock
-			fadeOut:  400,
-
-			// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
-			timeout: 0,
-
-			// disable if you don't want to show the overlay
-			showOverlay: true,
-
-			// if true, focus will be placed in the first available input field when
-			// page blocking
-			focusInput: true,
-
-            // elements that can receive focus
-            focusableElements: ':input:enabled:visible',
-
-			// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
-			// no longer needed in 2012
-			// applyPlatformOpacityRules: true,
-
-			// callback method invoked when fadeIn has completed and blocking message is visible
-			onBlock: null,
-
-			// callback method invoked when unblocking has completed; the callback is
-			// passed the element that has been unblocked (which is the window object for page
-			// blocks) and the options that were passed to the unblock call:
-			//	onUnblock(element, options)
-			onUnblock: null,
-
-			// callback method invoked when the overlay area is clicked.
-			// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.
-			onOverlayClick: null,
-
-			// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
-			quirksmodeOffsetHack: 4,
-
-			// class name of the message block
-			blockMsgClass: 'blockMsg',
-
-			// if it is already blocked, then ignore it (don't unblock and reblock)
-			ignoreIfBlocked: false
-		};
-
-		// private data and functions follow...
-
-		var pageBlock = null;
-		var pageBlockEls = [];
-
-		function install(el, opts) {
-			var css, themedCSS;
-			var full = (el == window);
-			var msg = (opts && opts.message !== undefined ? opts.message : undefined);
-			opts = $.extend({}, $.blockUI.defaults, opts || {});
-
-			if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))
-				return;
-
-			opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
-			css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
-			if (opts.onOverlayClick)
-				opts.overlayCSS.cursor = 'pointer';
-
-			themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});
-			msg = msg === undefined ? opts.message : msg;
-
-			// remove the current block (if there is one)
-			if (full && pageBlock)
-				remove(window, {fadeOut:0});
-
-			// if an existing element is being used as the blocking content then we capture
-			// its current place in the DOM (and current display style) so we can restore
-			// it when we unblock
-			if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
-				var node = msg.jquery ? msg[0] : msg;
-				var data = {};
-				$(el).data('blockUI.history', data);
-				data.el = node;
-				data.parent = node.parentNode;
-				data.display = node.style.display;
-				data.position = node.style.position;
-				if (data.parent)
-					data.parent.removeChild(node);
-			}
-
-			$(el).data('blockUI.onUnblock', opts.onUnblock);
-			var z = opts.baseZ;
-
-			// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
-			// layer1 is the iframe layer which is used to supress bleed through of underlying content
-			// layer2 is the overlay layer which has opacity and a wait cursor (by default)
-			// layer3 is the message content that is displayed while blocking
-			var lyr1, lyr2, lyr3, s;
-			if (msie || opts.forceIframe)
-				lyr1 = $('<iframe class="blockUI" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+opts.iframeSrc+'"></iframe>');
-			else
-				lyr1 = $('<div class="blockUI" style="display:none"></div>');
-
-			if (opts.theme)
-				lyr2 = $('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+ (z++) +';display:none"></div>');
-			else
-				lyr2 = $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
-
-			if (opts.theme && full) {
-				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:fixed">';
-				if ( opts.title ) {
-					s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || '&nbsp;')+'</div>';
-				}
-				s += '<div class="ui-widget-content ui-dialog-content"></div>';
-				s += '</div>';
-			}
-			else if (opts.theme) {
-				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:absolute">';
-				if ( opts.title ) {
-					s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || '&nbsp;')+'</div>';
-				}
-				s += '<div class="ui-widget-content ui-dialog-content"></div>';
-				s += '</div>';
-			}
-			else if (full) {
-				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage" style="z-index:'+(z+10)+';display:none;position:fixed"></div>';
-			}
-			else {
-				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement" style="z-index:'+(z+10)+';display:none;position:absolute"></div>';
-			}
-			lyr3 = $(s);
-
-			// if we have a message, style it
-			if (msg) {
-				if (opts.theme) {
-					lyr3.css(themedCSS);
-					lyr3.addClass('ui-widget-content');
-				}
-				else
-					lyr3.css(css);
-			}
-
-			// style the overlay
-			if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)
-				lyr2.css(opts.overlayCSS);
-			lyr2.css('position', full ? 'fixed' : 'absolute');
-
-			// make iframe layer transparent in IE
-			if (msie || opts.forceIframe)
-				lyr1.css('opacity',0.0);
-
-			//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
-			var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);
-			$.each(layers, function() {
-				this.appendTo($par);
-			});
-
-			if (opts.theme && opts.draggable && $.fn.draggable) {
-				lyr3.draggable({
-					handle: '.ui-dialog-titlebar',
-					cancel: 'li'
-				});
-			}
-
-			// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
-			var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);
-			if (ie6 || expr) {
-				// give body 100% height
-				if (full && opts.allowBodyStretch && $.support.boxModel)
-					$('html,body').css('height','100%');
-
-				// fix ie6 issue when blocked element has a border width
-				if ((ie6 || !$.support.boxModel) && !full) {
-					var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
-					var fixT = t ? '(0 - '+t+')' : 0;
-					var fixL = l ? '(0 - '+l+')' : 0;
-				}
-
-				// simulate fixed position
-				$.each(layers, function(i,o) {
-					var s = o[0].style;
-					s.position = 'absolute';
-					if (i < 2) {
-						if (full)
-							s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"');
-						else
-							s.setExpression('height','this.parentNode.offsetHeight + "px"');
-						if (full)
-							s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"');
-						else
-							s.setExpression('width','this.parentNode.offsetWidth + "px"');
-						if (fixL) s.setExpression('left', fixL);
-						if (fixT) s.setExpression('top', fixT);
-					}
-					else if (opts.centerY) {
-						if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
-						s.marginTop = 0;
-					}
-					else if (!opts.centerY && full) {
-						var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;
-						var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
-						s.setExpression('top',expression);
-					}
-				});
-			}
-
-			// show the message
-			if (msg) {
-				if (opts.theme)
-					lyr3.find('.ui-widget-content').append(msg);
-				else
-					lyr3.append(msg);
-				if (msg.jquery || msg.nodeType)
-					$(msg).show();
-			}
-
-			if ((msie || opts.forceIframe) && opts.showOverlay)
-				lyr1.show(); // opacity is zero
-			if (opts.fadeIn) {
-				var cb = opts.onBlock ? opts.onBlock : noOp;
-				var cb1 = (opts.showOverlay && !msg) ? cb : noOp;
-				var cb2 = msg ? cb : noOp;
-				if (opts.showOverlay)
-					lyr2._fadeIn(opts.fadeIn, cb1);
-				if (msg)
-					lyr3._fadeIn(opts.fadeIn, cb2);
-			}
-			else {
-				if (opts.showOverlay)
-					lyr2.show();
-				if (msg)
-					lyr3.show();
-				if (opts.onBlock)
-					opts.onBlock.bind(lyr3)();
-			}
-
-			// bind key and mouse events
-			bind(1, el, opts);
-
-			if (full) {
-				pageBlock = lyr3[0];
-				pageBlockEls = $(opts.focusableElements,pageBlock);
-				if (opts.focusInput)
-					setTimeout(focus, 20);
-			}
-			else
-				center(lyr3[0], opts.centerX, opts.centerY);
-
-			if (opts.timeout) {
-				// auto-unblock
-				var to = setTimeout(function() {
-					if (full)
-						$.unblockUI(opts);
-					else
-						$(el).unblock(opts);
-				}, opts.timeout);
-				$(el).data('blockUI.timeout', to);
-			}
-		}
-
-		// remove the block
-		function remove(el, opts) {
-			var count;
-			var full = (el == window);
-			var $el = $(el);
-			var data = $el.data('blockUI.history');
-			var to = $el.data('blockUI.timeout');
-			if (to) {
-				clearTimeout(to);
-				$el.removeData('blockUI.timeout');
-			}
-			opts = $.extend({}, $.blockUI.defaults, opts || {});
-			bind(0, el, opts); // unbind events
-
-			if (opts.onUnblock === null) {
-				opts.onUnblock = $el.data('blockUI.onUnblock');
-				$el.removeData('blockUI.onUnblock');
-			}
-
-			var els;
-			if (full) // crazy selector to handle odd field errors in ie6/7
-				els = $('body').children().filter('.blockUI').add('body > .blockUI');
-			else
-				els = $el.find('>.blockUI');
-
-			// fix cursor issue
-			if ( opts.cursorReset ) {
-				if ( els.length > 1 )
-					els[1].style.cursor = opts.cursorReset;
-				if ( els.length > 2 )
-					els[2].style.cursor = opts.cursorReset;
-			}
-
-			if (full)
-				pageBlock = pageBlockEls = null;
-
-			if (opts.fadeOut) {
-				count = els.length;
-				els.stop().fadeOut(opts.fadeOut, function() {
-					if ( --count === 0)
-						reset(els,data,opts,el);
-				});
-			}
-			else
-				reset(els, data, opts, el);
-		}
-
-		// move blocking element back into the DOM where it started
-		function reset(els,data,opts,el) {
-			var $el = $(el);
-			if ( $el.data('blockUI.isBlocked') )
-				return;
-
-			els.each(function(i,o) {
-				// remove via DOM calls so we don't lose event handlers
-				if (this.parentNode)
-					this.parentNode.removeChild(this);
-			});
-
-			if (data && data.el) {
-				data.el.style.display = data.display;
-				data.el.style.position = data.position;
-				data.el.style.cursor = 'default'; // #59
-				if (data.parent)
-					data.parent.appendChild(data.el);
-				$el.removeData('blockUI.history');
-			}
-
-			if ($el.data('blockUI.static')) {
-				$el.css('position', 'static'); // #22
-			}
-
-			if (typeof opts.onUnblock == 'function')
-				opts.onUnblock(el,opts);
-
-			// fix issue in Safari 6 where block artifacts remain until reflow
-			var body = $(document.body), w = body.width(), cssW = body[0].style.width;
-			body.width(w-1).width(w);
-			body[0].style.width = cssW;
-		}
-
-		// bind/unbind the handler
-		function bind(b, el, opts) {
-			var full = el == window, $el = $(el);
-
-			// don't bother unbinding if there is nothing to unbind
-			if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
-				return;
-
-			$el.data('blockUI.isBlocked', b);
-
-			// don't bind events when overlay is not in use or if bindEvents is false
-			if (!full || !opts.bindEvents || (b && !opts.showOverlay))
-				return;
-
-			// bind anchors and inputs for mouse and key events
-			var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';
-			if (b)
-				$(document).bind(events, opts, handler);
-			else
-				$(document).unbind(events, handler);
-
-		// former impl...
-		//		var $e = $('a,:input');
-		//		b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
-		}
-
-		// event handler to suppress keyboard/mouse events when blocking
-		function handler(e) {
-			// allow tab navigation (conditionally)
-			if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {
-				if (pageBlock && e.data.constrainTabKey) {
-					var els = pageBlockEls;
-					var fwd = !e.shiftKey && e.target === els[els.length-1];
-					var back = e.shiftKey && e.target === els[0];
-					if (fwd || back) {
-						setTimeout(function(){focus(back);},10);
-						return false;
-					}
-				}
-			}
-			var opts = e.data;
-			var target = $(e.target);
-			if (target.hasClass('blockOverlay') && opts.onOverlayClick)
-				opts.onOverlayClick(e);
-
-			// allow events within the message content
-			if (target.parents('div.' + opts.blockMsgClass).length > 0)
-				return true;
-
-			// allow events for content that is not being blocked
-			return target.parents().children().filter('div.blockUI').length === 0;
-		}
-
-		function focus(back) {
-			if (!pageBlockEls)
-				return;
-			var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
-			if (e)
-				e.focus();
-		}
-
-		function center(el, x, y) {
-			var p = el.parentNode, s = el.style;
-			var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
-			var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
-			if (x) s.left = l > 0 ? (l+'px') : '0';
-			if (y) s.top  = t > 0 ? (t+'px') : '0';
-		}
-
-		function sz(el, p) {
-			return parseInt($.css(el,p),10)||0;
-		}
-
-	}
-
-
-	/*global define:true */
-	if (typeof define === 'function' && define.amd && define.amd.jQuery) {
-		define(['jquery'], setup);
-	} else {
-		setup(jQuery);
-	}
-
-})();

+ 0 - 18
web/health-hb/target/classes/static/admin/assets/js/bootstrap/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.lt.js

@@ -1,18 +0,0 @@
-/**
- * Lithuanian translation for bootstrap-datetimepicker
- * Šarūnas Gliebus <ssharunas@yahoo.co.uk>
- */
-
-;(function($){
-    $.fn.datetimepicker.dates['lt'] = {
-        days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"],
-        daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"],
-        daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"],
-        months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"],
-        monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"],
-        today: "Šiandien",
-		suffix: [],
-		meridiem: [],
-        weekStart: 1
-    };
-}(jQuery));

+ 0 - 188
web/health-hb/target/classes/static/admin/bootstarp/ndesaintheme.com/themes/apricot/assets/js/footable/js/footable.sortcd98.js

@@ -1,188 +0,0 @@
-(function ($, w, undefined) {
-    if (w.footable === undefined || w.footable === null)
-        throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.');
-
-    var defaults = {
-        sort: true,
-        sorters: {
-            alpha: function (a, b) {
-                if (a === b) return 0;
-                if (a < b) return -1;
-                return 1;
-            },
-            numeric: function (a, b) {
-                return a - b;
-            }
-        },
-        classes: {
-            sort: {
-                sortable: 'footable-sortable',
-                sorted: 'footable-sorted',
-                descending: 'footable-sorted-desc',
-                indicator: 'footable-sort-indicator'
-            }
-        },
-        events: {
-            sort: {
-                sorting: 'footable_sorting',
-                sorted: 'footable_sorted'
-            }
-        }
-    };
-
-    function Sort() {
-        var p = this;
-        p.name = 'Footable Sortable';
-        p.init = function (ft) {
-            p.footable = ft;
-            if (ft.options.sort === true) {
-                $(ft.table)
-                    .unbind('.sorting')
-                    .bind({
-                        'footable_initialized.sorting': function (e) {
-                            var $table = $(ft.table),
-                                $tbody = $table.find('> tbody'),
-                                cls = ft.options.classes.sort,
-                                column, $th;
-
-                            if ($table.data('sort') === false) return;
-
-                            $table.find('> thead > tr:last-child > th, > thead > tr:last-child > td').each(function (ec) {
-                                $th = $(this), column = ft.columns[$th.index()];
-                                if (column.sort.ignore !== true && !$th.hasClass(cls.sortable)) {
-                                    $th.addClass(cls.sortable);
-                                    $('<span />').addClass(cls.indicator).appendTo($th);
-                                }
-                            });
-
-                            $table.find('> thead > tr:last-child > th.' + cls.sortable + ', > thead > tr:last-child > td.' + cls.sortable).unbind('click.footable').bind('click.footable', function (ec) {
-                                ec.preventDefault();
-                                $th = $(this);
-                                var ascending = !$th.hasClass(cls.sorted);
-                                p.doSort($th.index(), ascending);
-                                return false;
-                            });
-
-                            var didSomeSorting = false;
-                            for (var c in ft.columns) {
-                                column = ft.columns[c];
-                                if (column.sort.initial) {
-                                    var ascending = (column.sort.initial !== 'descending');
-                                    p.doSort(column.index, ascending);
-                                    break;
-                                }
-                            }
-                            if (didSomeSorting) {
-                                ft.bindToggleSelectors();
-                            }
-                        },
-                        'footable_redrawn.sorting': function(e) {
-                            var $table = $(ft.table),
-                                cls = ft.options.classes.sort;
-                            if ($table.data('sorted') >= 0) {
-                                $table.find('> thead > tr:last-child > th').each(function(i){
-                                    var $th = $(this);
-                                    if ($th.hasClass(cls.sorted) || $th.hasClass(cls.descending)) {
-                                        p.doSort(i);
-                                        return;
-                                    }
-                                });
-                            }
-                        },
-                        'footable_column_data.sorting': function (e) {
-                            var $th = $(e.column.th);
-                            e.column.data.sort = e.column.data.sort || {};
-                            e.column.data.sort.initial = $th.data('sort-initial') || false;
-                            e.column.data.sort.ignore = $th.data('sort-ignore') || false;
-                            e.column.data.sort.selector = $th.data('sort-selector') || null;
-
-                            var match = $th.data('sort-match') || 0;
-                            if (match >= e.column.data.matches.length) match = 0;
-                            e.column.data.sort.match = e.column.data.matches[match];
-                        }
-                    })
-                //save the sort object onto the table so we can access it later
-                .data('footable-sort', p);
-            }
-        };
-
-        p.doSort = function(columnIndex, ascending) {
-            var ft = p.footable;
-            if ($(ft.table).data('sort') === false) return;
-
-            var $table = $(ft.table),
-                $tbody = $table.find('> tbody'),
-                column = ft.columns[columnIndex],
-                $th = $table.find('> thead > tr:last-child > th:eq(' + columnIndex + ')'),
-                cls = ft.options.classes.sort,
-                evt = ft.options.events.sort;
-
-            ascending = (ascending === undefined) ? $th.hasClass(cls.sorted) :
-                (ascending === 'toggle') ? !$th.hasClass(cls.sorted) : ascending;
-
-            if (column.sort.ignore === true) return true;
-
-            //raise a pre-sorting event so that we can cancel the sorting if needed
-            var event = ft.raise(evt.sorting, { column: column, direction: ascending ? 'ASC' : 'DESC' });
-            if (event && event.result === false) return;
-
-            $table.data('sorted', column.index);
-
-            $table.find('> thead > tr:last-child > th, > thead > tr:last-child > td').not($th).removeClass(cls.sorted + ' ' + cls.descending);
-
-            if (ascending === undefined) {
-                ascending = $th.hasClass(cls.sorted);
-            }
-
-            if (ascending) {
-                $th.removeClass(cls.descending).addClass(cls.sorted);
-            } else {
-                $th.removeClass(cls.sorted).addClass(cls.descending);
-            }
-
-            p.sort(ft, $tbody, column, ascending);
-
-            ft.bindToggleSelectors();
-            ft.raise(evt.sorted, { column: column, direction: ascending ? 'ASC' : 'DESC' });
-        };
-
-        p.rows = function (ft, tbody, column) {
-            var rows = [];
-            tbody.find('> tr').each(function () {
-                var $row = $(this), $next = null;
-                if ($row.hasClass(ft.options.classes.detail)) return true;
-                if ($row.next().hasClass(ft.options.classes.detail)) {
-                    $next = $row.next().get(0);
-                }
-                var row = { 'row': $row, 'detail': $next };
-                if (column !== undefined) {
-                    row.value = ft.parse(this.cells[column.sort.match], column);
-                }
-                rows.push(row);
-                return true;
-            }).detach();
-            return rows;
-        };
-
-        p.sort = function (ft, tbody, column, ascending) {
-            var rows = p.rows(ft, tbody, column);
-            var sorter = ft.options.sorters[column.type] || ft.options.sorters.alpha;
-            rows.sort(function (a, b) {
-                if (ascending) {
-                    return sorter(a.value, b.value);
-                } else {
-                    return sorter(b.value, a.value);
-                }
-            });
-            for (var j = 0; j < rows.length; j++) {
-                tbody.append(rows[j].row);
-                if (rows[j].detail !== null) {
-                    tbody.append(rows[j].detail);
-                }
-            }
-        };
-    }
-
-    w.footable.plugins.register(Sort, defaults);
-
-})(jQuery, window);

+ 115 - 0
web/monitor-hb/src/main/java/com/gyee/frame/common/cache/RedisSessionDao.java

@@ -0,0 +1,115 @@
+package com.gyee.frame.common.cache;
+
+import org.apache.shiro.session.Session;
+import org.apache.shiro.session.UnknownSessionException;
+import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * Created by Administrator on 2018/7/31.
+ */
+@Service
+public class RedisSessionDao extends EnterpriseCacheSessionDAO {
+    // Session超时时间,单位为毫秒
+    private long expireTime = 120000;
+
+    private String prefix="session_";
+  @Resource
+  private RedisTemplate<String,Object>  redisTemplate;// Redis操作类,对这个使用不熟悉的,可以参考前面的博客
+
+    public RedisSessionDao() {
+        super();
+    }
+
+    public RedisSessionDao(long expireTime, RedisTemplate redisTemplate) {
+        super();
+        this.expireTime = expireTime;
+        this.redisTemplate = redisTemplate;
+    }
+
+    @Override // 更新session
+    public void update(Session session) throws UnknownSessionException {
+        System.out.println("===============update================");
+        if (session == null || session.getId() == null) {
+            return;
+        }
+        session.setTimeout(expireTime);
+        redisTemplate.opsForValue().set(prefix+session.getId(), session, expireTime, TimeUnit.MILLISECONDS);
+    }
+
+    @Override // 删除session
+    public void delete(Session session) {
+        System.out.println("===============delete================");
+        if (null == session) {
+            return;
+        }
+        redisTemplate.opsForValue().getOperations().delete(prefix+session.getId());
+    }
+
+    @Override
+// 获取活跃的session,可以用来统计在线人数,如果要实现这个功能,可以在将session加入redis时指定一个session前缀,统计的时候则使用keys("session-prefix*")的方式来模糊查找redis中所有的session集合
+    public Collection<Session> getActiveSessions() {
+        Set<String> keys = this.redisTemplate.keys(this.prefix + "*");
+
+        if (keys != null && !keys.isEmpty()) {
+            List<Object> sessions = this.redisTemplate.opsForValue().multiGet(keys);
+            if (sessions != null) {
+                return sessions.stream().map(o -> (Session) o).collect(Collectors.toList());
+            }
+        }
+        return Collections.emptySet();
+    }
+
+    @Override// 加入session
+    protected Serializable doCreate(Session session) {
+        System.out.println("===============doCreate================");
+        Serializable sessionId = this.generateSessionId(session);
+        this.assignSessionId(session, sessionId);
+
+        redisTemplate.opsForValue().set(prefix+session.getId(), session, expireTime, TimeUnit.MILLISECONDS);
+        return sessionId;
+    }
+
+    @Override// 读取session
+    protected Session doReadSession(Serializable sessionId) {
+        System.out.println("==============doReadSession=================");
+        if (sessionId == null) {
+            return null;
+        }
+        Session session=null;
+        try {
+            return (Session) redisTemplate.opsForValue().get(prefix+sessionId);
+        }catch (ClassCastException e)
+        {
+            System.out.println("系统初始化中,请稍等。。。。。");
+        }
+      return session;
+    }
+
+    public long getExpireTime() {
+        return expireTime;
+    }
+
+    public void setExpireTime(long expireTime) {
+        this.expireTime = expireTime;
+    }
+
+    public RedisTemplate getRedisTemplate() {
+        return redisTemplate;
+    }
+
+    public void setRedisTemplate(RedisTemplate redisTemplate) {
+        this.redisTemplate = redisTemplate;
+
+    }
+}

+ 172 - 157
web/monitor-hb/src/main/java/com/gyee/frame/common/interceptor/MyInterceptor.java

@@ -1,19 +1,17 @@
 package com.gyee.frame.common.interceptor;
 
-import java.util.ArrayList;
-import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.gyee.frame.model.auto.TsysUser;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.apache.shiro.subject.Subject;
+import cn.hutool.core.util.StrUtil;
+import com.gyee.frame.common.spring.SpringUtils;
+import com.gyee.frame.model.auto.SysInterUrl;
+import com.gyee.frame.model.auto.SysInterUrlExample;
+import com.gyee.frame.service.SysInterUrlService;
 import org.springframework.web.servlet.HandlerInterceptor;
 import org.springframework.web.servlet.ModelAndView;
-import com.gyee.frame.common.conf.V2Config;
-import com.gyee.frame.common.exception.demo.DemoModeException;
-import cn.hutool.core.util.StrUtil;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
 /**
  * 自定义拦截器
  * @author fc
@@ -21,154 +19,171 @@ import cn.hutool.core.util.StrUtil;
  */
 public class MyInterceptor  implements HandlerInterceptor {
 
-	/*************演示模式需要 start*************/
-	/**需要被拦截的post请求url**/
-	public static List<String> posturllist=new ArrayList<String>();
-	/**需要被拦截的get请求url**/
-	public static List<String> geturllist=new ArrayList<String>();
-
-	/**
-	 * 初始化静态块,避免多次创建调用
-	 * 需要拦截的请求集合
-	 */
-	static {
-		//用户POST请求
-		posturllist.add("/UserController/add");
-		posturllist.add("/UserController/remove");
-		posturllist.add("/UserController/edit");
-		posturllist.add("/UserController/editPwd");
-		//自动生成POST请求
-		posturllist.add("/autoCodeController/addGlobal");
-		posturllist.add("/autoCodeController/saveOne");
-		//字典表POST请求
-		posturllist.add("/DictDataController/add");
-		posturllist.add("/DictDataController/remove");
-		posturllist.add("/DictDataController/edit");
-		posturllist.add("/DictTypeController/add");
-		posturllist.add("/DictTypeController/remove");
-		posturllist.add("/DictTypeController/edit");
-		//邮箱POST请求
-		posturllist.add("/EmailController/add");
-		posturllist.add("/EmailController/edit");
-		//文件上传POST请求
-		posturllist.add("/FileController/upload");
-		posturllist.add("/FileController/add");
-		posturllist.add("/FileController/remove");
-		posturllist.add("/FileController/del_file");
-		posturllist.add("/FileController/edit");
-		//日志POST请求
-		posturllist.add("/LogController/remove");
-		//权限POST请求
-		posturllist.add("/PermissionController/add");
-		posturllist.add("/PermissionController/remove");
-		posturllist.add("/PermissionController/edit");
-		//定时器POST请求
-		posturllist.add("/SysQuartzJobController/add");
-		posturllist.add("/SysQuartzJobController/remove");
-		posturllist.add("/SysQuartzJobController/edit");
-		posturllist.add("/SysQuartzJobController/changeStatus");
-		posturllist.add("/SysQuartzJobController/run");
-		posturllist.add("/SysQuartzJobLogController/remove");
-		//角色POST请求
-		posturllist.add("/RoleController/add");
-		posturllist.add("/RoleController/remove");
-		posturllist.add("/RoleController/edit");
-		//公告POST请求
-		posturllist.add("/SysNoticeController/add");
-		posturllist.add("/SysNoticeController/remove");
-		posturllist.add("/SysNoticeController/viewinfo");
-		posturllist.add("/SysNoticeController/edit");
-		//省份POST请求
-		posturllist.add("/SysProvinceController/add");
-		posturllist.add("/SysProvinceController/remove");
-		posturllist.add("/SysProvinceController/edit");
-		//地区POST请求
-		posturllist.add("/SysAreaController/add");
-		posturllist.add("/SysAreaController/remove");
-		posturllist.add("/SysAreaController/edit");
-		//城市POST请求
-		posturllist.add("/SysCityController/add");
-		posturllist.add("/SysCityController/remove");
-		posturllist.add("/SysCityController/edit");
-		//街道POST请求
-		posturllist.add("/SysStreetController/add");
-		posturllist.add("/SysStreetController/remove");
-		posturllist.add("/SysStreetController/edit");
-		//百度编辑器POST请求
-		posturllist.add("/UeditorController/ueditor");
-		posturllist.add("/UeditorController/");
-		posturllist.add("/UeditorController/imgUpload");
-		//七牛POST请求
-		posturllist.add("/QiNiuCloudController/uploadToQiNiu");
-		//定时器GET请求
-		geturllist.add("/quartz/stop");
-		geturllist.add("/quartz/resume");
-		geturllist.add("/quartz/update");
-		geturllist.add("/quartz/delete");
-
-	}
-	/*************演示模式需要 end*************/
-	@Override
-	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {
-		// //System.out.println(">>>MyInterceptor1>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
-	}
-
-	@Override
-	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {
-		// //System.out.println(">>>MyInterceptor1>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
-	}
-
-	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
-		//String url2=request.getScheme()+"://"+ request.getServerName();
-		////System.out.println("xxxxxxxxx==="+"http://localhost:8081/");
-		////System.out.println(">>>MyInterceptor1>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");
-		//设置前端的全局 地址,如果前端网页错乱请修改这儿
-
-		// by Wang Jiawen 2020-01-07 临时补丁  调试需要暂时取消shiro大管家的登入限制
+    /*************演示模式需要 start*************/
+    /**需要被拦截的post请求url**/
+    public static List<SysInterUrl> posturllist=new ArrayList<SysInterUrl>();
+    /**需要被拦截的get请求url**/
+    public static List<SysInterUrl> geturllist=new ArrayList<SysInterUrl>();
+
+    public static SysInterUrlService interUrlService= SpringUtils.getBean(SysInterUrlService.class);
+    /**
+     * 初始化静态块,避免多次创建调用
+     * 需要拦截的请求集合
+     */
+    static {
+
+        SysInterUrlExample example_post= new SysInterUrlExample();
+        geturllist=interUrlService.selectByExample(example_post);
+//		//用户POST请求
+//		posturllist.add("/UserController/add");
+//		posturllist.add("/UserController/remove");
+//		posturllist.add("/UserController/edit");
+//		posturllist.add("/UserController/editPwd");
+//		//自动生成POST请求
+//		posturllist.add("/autoCodeController/addGlobal");
+//		posturllist.add("/autoCodeController/saveOne");
+//		//字典表POST请求
+//		posturllist.add("/DictDataController/add");
+//		posturllist.add("/DictDataController/remove");
+//		posturllist.add("/DictDataController/edit");
+//		posturllist.add("/DictTypeController/add");
+//		posturllist.add("/DictTypeController/remove");
+//		posturllist.add("/DictTypeController/edit");
+//		//邮箱POST请求
+//		posturllist.add("/EmailController/add");
+//		posturllist.add("/EmailController/edit");
+//		//文件上传POST请求
+//		posturllist.add("/FileController/upload");
+//		posturllist.add("/FileController/add");
+//		posturllist.add("/FileController/remove");
+//		posturllist.add("/FileController/del_file");
+//		posturllist.add("/FileController/edit");
+//		//日志POST请求
+//		posturllist.add("/LogController/remove");
+//		//权限POST请求
+//		posturllist.add("/PermissionController/add");
+//		posturllist.add("/PermissionController/remove");
+//		posturllist.add("/PermissionController/edit");
+//		//定时器POST请求
+//		posturllist.add("/SysQuartzJobController/add");
+//		posturllist.add("/SysQuartzJobController/remove");
+//		posturllist.add("/SysQuartzJobController/edit");
+//		posturllist.add("/SysQuartzJobController/changeStatus");
+//		posturllist.add("/SysQuartzJobController/run");
+//		posturllist.add("/SysQuartzJobLogController/remove");
+//		//角色POST请求
+//		posturllist.add("/RoleController/add");
+//		posturllist.add("/RoleController/remove");
+//		posturllist.add("/RoleController/edit");
+//		//公告POST请求
+//		posturllist.add("/SysNoticeController/add");
+//		posturllist.add("/SysNoticeController/remove");
+//		posturllist.add("/SysNoticeController/viewinfo");
+//		posturllist.add("/SysNoticeController/edit");
+//		//省份POST请求
+//		posturllist.add("/SysProvinceController/add");
+//		posturllist.add("/SysProvinceController/remove");
+//		posturllist.add("/SysProvinceController/edit");
+//		//地区POST请求
+//		posturllist.add("/SysAreaController/add");
+//		posturllist.add("/SysAreaController/remove");
+//		posturllist.add("/SysAreaController/edit");
+//		//城市POST请求
+//		posturllist.add("/SysCityController/add");
+//		posturllist.add("/SysCityController/remove");
+//		posturllist.add("/SysCityController/edit");
+//		//街道POST请求
+//		posturllist.add("/SysStreetController/add");
+//		posturllist.add("/SysStreetController/remove");
+//		posturllist.add("/SysStreetController/edit");
+//		//百度编辑器POST请求
+//		posturllist.add("/UeditorController/ueditor");
+//		posturllist.add("/UeditorController/");
+//		posturllist.add("/UeditorController/imgUpload");
+//		//七牛POST请求
+//		posturllist.add("/QiNiuCloudController/uploadToQiNiu");
+//		//定时器GET请求
+//		geturllist.add("/quartz/stop");
+//		geturllist.add("/quartz/resume");
+//		geturllist.add("/quartz/update");
+//		geturllist.add("/quartz/delete");
+
+    }
+    /*************演示模式需要 end*************/
+    @Override
+    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {
+        // //System.out.println(">>>MyInterceptor1>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {
+        // //System.out.println(">>>MyInterceptor1>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
+    }
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
+        //String url2=request.getScheme()+"://"+ request.getServerName();
+        ////System.out.println("xxxxxxxxx==="+"http://localhost:8081/");
+        ////System.out.println(">>>MyInterceptor1>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");
+        //设置前端的全局 地址,如果前端网页错乱请修改这儿
+
+        // by Wang Jiawen 2020-01-07 临时补丁  调试需要暂时取消shiro大管家的登入限制
 //		TsysUser user = new TsysUser("1","admin","admin","管理员");
 //		Subject currentUser = SecurityUtils.getSubject();
 //		UsernamePasswordToken token =new UsernamePasswordToken("admin",user.getPassword());
 //		token.setRememberMe(true);
 //		currentUser.login(token);
-		//结束
-
-
-		request.setAttribute("rootPath", request.getContextPath());
-		if(V2Config.getDemoEnabled().equals("true")) {
-			Boolean b = ifurl(request, response);
-			if(b) {
-				throw new DemoModeException();
-			}
-		}
-		return true;// 只有返回true才会继续向下执行,返回false取消当前请求
-	}
-
-	/**
-	 * 判断是否需要拦截的用于展示演示模式
-	 * @param request
-	 * @param response
-	 * @return
-	 * @author gyee
-	 * @Date 2019年11月11日 下午5:17:30
-	 */
-	public Boolean ifurl(HttpServletRequest request, HttpServletResponse response) {
-		//当前请求
-		String requesturl=request.getRequestURI();
-		if(request.getMethod().equals("POST")) {
-			for (String postrul : posturllist) {
-				if(StrUtil.containsAnyIgnoreCase(requesturl, postrul)) {
-					return true;
-				}
-			}
-		}else {
-			for (String geturl : geturllist) {
-				if(StrUtil.containsAnyIgnoreCase(requesturl, geturl)) {
-					return true;
-				}
-			}
-		}
-
-		return false;
-	}
+        //结束
+
+
+//		request.setAttribute("rootPath", request.getContextPath());
+//		if(V2Config.getDemoEnabled().equals("true")) {
+//			Boolean b = ifurl(request, response);
+//			if(b) {
+//				throw new DemoModeException();
+//			}
+//		}
+//		return true;// 只有返回true才会继续向下执行,返回false取消当前请求
+
+        request.setAttribute("rootPath", request.getContextPath());
+        //开启与关闭url过滤
+        if(ifurl(request, response)) {
+          return false;
+        }
+        return true;// 只有返回true才会继续向下执行,返回false取消当前请求
+    }
+
+    /**
+     * 判断是否需要拦截的用于展示演示模式
+     * @param request
+     * @param response
+     * @return
+     * @author gyee
+     * @Date 2019年11月11日 下午5:17:30
+     */
+    public Boolean ifurl(HttpServletRequest request, HttpServletResponse response) {
+        //当前请求
+        String requesturl=request.getRemoteAddr();
+
+        String url="http://" + request.getRemoteAddr() //服务器地址
+                + ":"
+                + request.getServerPort()           //端口号
+                + request.getRequestURI();
+
+        if(request.getMethod().equals("POST")) {
+            for (SysInterUrl sysInterUrl : posturllist) {
+                if(StrUtil.containsAnyIgnoreCase(url, sysInterUrl.getUrl())) {
+                    return true;
+                }
+            }
+        }else if(request.getMethod().equals("GET")){
+            for (SysInterUrl sysInterUrl : geturllist) {
+                if(StrUtil.containsAnyIgnoreCase(url, sysInterUrl.getUrl())) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
 }

+ 501 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/AdminController.java

@@ -0,0 +1,501 @@
+package com.gyee.frame.controller;
+
+import com.google.code.kaptcha.Constants;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.conf.AjaxStatus;
+import com.gyee.frame.common.conf.V2Config;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.common.websocket.WebSocketLoginOutEvent;
+import com.gyee.frame.model.auto.SysNotice;
+import com.gyee.frame.model.auto.TsysUser;
+import com.gyee.frame.model.custom.BootstrapTree;
+import com.gyee.frame.model.custom.ElementNode;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.model.custom.TokenUser;
+import com.gyee.frame.shiro.config.ShiroService;
+import com.gyee.frame.shiro.util.ShiroUtils;
+import com.gyee.frame.util.StringUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.apache.shiro.subject.Subject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 后台方法
+ * 
+ * @ClassName: HomeController
+ * @author gyee
+ * @date 2019-10-21 00:10
+ *
+ */
+@Controller
+@RequestMapping("/admin")
+@CrossOrigin
+@Api(value = "后台管理接口" ,tags="后台管理接口")
+public class AdminController extends BaseController {
+	private static Logger logger = LoggerFactory.getLogger(AdminController.class);
+
+	private String prefix = "admin";
+	private String AUTHTOKEN="authToken";
+	@Resource
+	private ShiroService shiroService;
+	@Resource
+	private WebSocketLoginOutEvent webSocketLoginOutEvent;
+
+	@ApiOperation(value = "首页", notes = "首页")
+	@GetMapping("/index")
+	public String index(HttpServletRequest request) {
+		// 获取菜单栏
+		BootstrapTree bootstrapTree = sysPermissionService.getbooBootstrapTreePerm(ShiroUtils.getUserId());
+		request.getSession().setAttribute("bootstrapTree", bootstrapTree);
+		request.getSession().setAttribute("sessionUserName", ShiroUtils.getUser().getNickname());
+		// 获取公告信息
+		List<SysNotice> notices = sysNoticeService.getuserNoticeNotRead(ShiroUtils.getUser(), 0);
+		request.getSession().setAttribute("notices", notices);
+		return prefix + "/index";
+	}
+
+	@ApiOperation(value = "局部刷新区域", notes = "局部刷新区域")
+	@GetMapping("/main")
+	public String main(ModelMap map) {
+		setTitle(map, new TitleVo("首页", "首页", true, "欢迎进入", true, false));
+		return prefix + "/main";
+	}
+
+	/**
+	 * 请求到登陆界面
+	 * 
+	 * @return
+	 */
+	@ApiOperation(value = "请求到登陆界面", notes = "请求到登陆界面")
+	@GetMapping("/login")
+	public String login(ModelMap modelMap) {
+		try {
+			if ((null != SecurityUtils.getSubject() && SecurityUtils.getSubject().isAuthenticated())
+					|| SecurityUtils.getSubject().isRemembered()) {
+				return "redirect:/" + prefix + "/index";
+			} else {
+				System.out.println("--进行登录验证..验证开始");
+
+				modelMap.put("RollVerification", V2Config.getRollVerification());
+				System.out.println("V2Config.getRollVerification()>>>" + V2Config.getRollVerification());
+				return "login";
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return "login";
+	}
+
+	/**
+	 * 用户登陆验证
+	 * 
+	 * @param user
+	 * @param redirectAttributes
+	 * @param rememberMe
+	 * @param request
+	 * @return
+	 */
+//	@ApiOperation(value = "用户登陆验证", notes = "用户登陆验证")
+	@PostMapping("/login")
+	@ResponseBody
+	public AjaxResult login(TsysUser user, String code, RedirectAttributes redirectAttributes, boolean rememberMe,
+			HttpServletRequest request) {
+		// ModelAndView view =new ModelAndView();
+		Boolean yz = false;
+		if (V2Config.getRollVerification()) {// 滚动验证
+			yz = true;
+		} else {// 图片验证
+			String scode = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
+			yz = StringUtils.isNotEmpty(scode) && StringUtils.isNotEmpty(code) && scode.equals(code);
+		}
+		// 判断验证码
+		if (yz) {
+			String userName = user.getUsername();
+			Subject currentUser = SecurityUtils.getSubject();
+
+			// 是否验证通过
+			if (!currentUser.isAuthenticated()) {
+				UsernamePasswordToken token = new UsernamePasswordToken(userName, user.getPassword());
+				try {
+//					if (rememberMe) {
+					if (true) {
+						token.setRememberMe(true);
+					}
+					// 存入用户
+					currentUser.login(token);
+					if (StringUtils.isNotNull(ShiroUtils.getUser())) {
+						// 若为前后端分离版本,则可把sessionId返回,作为分离版本的请求头authToken
+						// String authToken = ShiroUtils.getSessionId();
+						// return AjaxResult.successData(200, authToken);
+						return AjaxResult.success();
+					} else {
+						return AjaxResult.error(500, "未知账户");
+					}
+				} catch (UnknownAccountException uae) {
+					logger.info("对用户[" + userName + "]进行登录验证..验证未通过,未知账户");
+					return AjaxResult.error(500, "未知账户");
+				} catch (IncorrectCredentialsException ice) {
+					logger.info("对用户[" + userName + "]进行登录验证..验证未通过,错误的凭证");
+					return AjaxResult.error(500, "用户名或密码不正确");
+				} catch (LockedAccountException lae) {
+					logger.info("对用户[" + userName + "]进行登录验证..验证未通过,账户已锁定");
+					return AjaxResult.error(500, "账户已锁定");
+				} catch (ExcessiveAttemptsException eae) {
+					logger.info("对用户[" + userName + "]进行登录验证..验证未通过,错误次数过多");
+					return AjaxResult.error(500, "用户名或密码错误次数过多");
+				} catch (AuthenticationException ae) {
+					// 通过处理Shiro的运行时AuthenticationException就可以控制用户登录失败或密码错误时的情景
+					logger.info("对用户[" + userName + "]进行登录验证..验证未通过,堆栈轨迹如下");
+					ae.printStackTrace();
+					return AjaxResult.error(500, "用户名或密码不正确");
+				}
+			} else {
+				if (StringUtils.isNotNull(ShiroUtils.getUser())) {
+					// 跳转到 get请求的登陆方法
+					// view.setViewName("redirect:/"+prefix+"/index");
+					return AjaxResult.success();
+				} else {
+					return AjaxResult.error(500, "未知账户");
+				}
+			}
+		} else {
+			return AjaxResult.error(500, "验证码不正确!");
+		}
+
+	}
+
+
+	/**
+	 * 用户登陆验证
+	 *
+	 * @param user
+	 * @param request
+	 * @return
+	 */
+	@ApiOperation(value = "用户登陆验证", notes = "用户登陆验证")
+	@PostMapping("/loginvue")
+	@ResponseBody
+	public AjaxResult loginvue(TsysUser user,
+							HttpServletRequest request) {
+		// ModelAndView view =new ModelAndView();
+
+			String userName = user.getUsername();
+			Subject currentUser = SecurityUtils.getSubject();
+			String customtoken = request.getHeader(AUTHTOKEN);
+
+				if(StringUtils.notEmp(customtoken))
+				{
+					TokenUser customuser = shiroService.findToken(customtoken);
+					/**
+					 * user == null 表示第一次登录
+					 */
+					if (customuser == null)
+					{
+						return initialLogin(user, userName, currentUser);
+					}else
+					{
+						long expireTime = customuser.getExpireTime();
+						long nowTime = new Date().getTime();
+						/**
+						 * 判断登录是否过期
+						 */
+						if (nowTime - expireTime > shiroService.EXPIRE)
+						{
+							return AjaxResult.error(AjaxStatus.loginexpire.code, "账号已过期请重新登录");
+						}else
+						{
+							Map<String, Object> result = new HashMap<>();
+							result.put(AUTHTOKEN, customtoken);
+							result.put("user", customuser);
+							return AjaxResult.successData(AjaxStatus.success.code, result);
+						}
+
+					}
+				}else
+				{
+					return initialLogin(user, userName, currentUser);
+				}
+
+
+	}
+
+	private AjaxResult initialLogin(TsysUser user, String userName, Subject currentUser) {
+		// 是否验证通过
+		if (!currentUser.isAuthenticated()) {
+			UsernamePasswordToken token = new UsernamePasswordToken(userName, user.getPassword());
+			try {
+				token.setRememberMe(true);
+				// 存入用户
+				currentUser.login(token);
+
+				Map<String, Object> authToken = shiroService.createToken(ShiroUtils.getUser());
+
+				if(authToken.containsKey(AUTHTOKEN))
+				{
+					return AjaxResult.successData(AjaxStatus.success.code, authToken);
+				}else
+				{
+					return AjaxResult.error(AjaxStatus.logineroor.code, "未知账户");
+				}
+
+//							if (StringUtils.isNotNull(ShiroUtils.getUser())) {
+//
+//								// 若为前后端分离版本,则可把sessionId返回,作为分离版本的请求头authToken
+//								String sessionId = ShiroUtils.getSessionId();
+//								return AjaxResult.successData(AjaxStatus.success.code, sessionId);
+////
+//							} else {
+//								return AjaxResult.error(AjaxStatus.logineroor.code, "未知账户");
+//							}
+			} catch (UnknownAccountException uae) {
+				logger.info("对用户[" + userName + "]进行登录验证..验证未通过,未知账户");
+				return AjaxResult.error(AjaxStatus.logineroor.code, "未知账户");
+			} catch (IncorrectCredentialsException ice) {
+				logger.info("对用户[" + userName + "]进行登录验证..验证未通过,错误的凭证");
+				return AjaxResult.error(AjaxStatus.logineroor.code, "用户名或密码不正确");
+			} catch (LockedAccountException lae) {
+				logger.info("对用户[" + userName + "]进行登录验证..验证未通过,账户已锁定");
+				return AjaxResult.error(AjaxStatus.logineroor.code, "账户已锁定");
+			} catch (ExcessiveAttemptsException eae) {
+				logger.info("对用户[" + userName + "]进行登录验证..验证未通过,错误次数过多");
+				return AjaxResult.error(AjaxStatus.logineroor.code, "用户名或密码错误次数过多");
+			} catch (AuthenticationException ae) {
+				// 通过处理Shiro的运行时AuthenticationException就可以控制用户登录失败或密码错误时的情景
+				logger.info("对用户[" + userName + "]进行登录验证..验证未通过,堆栈轨迹如下");
+				ae.printStackTrace();
+				return AjaxResult.error(AjaxStatus.logineroor.code, "用户名或密码不正确");
+			}
+		} else {
+			if (StringUtils.isNotNull(ShiroUtils.getUser())) {
+				// 跳转到 get请求的登陆方法
+				// view.setViewName("redirect:/"+prefix+"/index");
+				Map<String, Object> authToken = shiroService.createToken(ShiroUtils.getUser());
+
+				if(authToken.containsKey(AUTHTOKEN))
+				{
+					return AjaxResult.successData(AjaxStatus.success.code, authToken);
+				}else
+				{
+					return AjaxResult.error(AjaxStatus.logineroor.code, "未知账户");
+				}
+			} else {
+				return AjaxResult.error(AjaxStatus.logineroor.code, "未知账户");
+			}
+		}
+	}
+
+
+	@ApiOperation(value = "获取用户菜单", notes = "获取用户菜单")
+	@PostMapping("/usermenu")
+	@ResponseBody
+	public AjaxResult usermenu(HttpServletRequest request) {
+
+		//String authToken=request.getParameter(AUTHTOKEN);
+		String customtoken = request.getHeader(AUTHTOKEN);
+
+		if(StringUtils.notEmp(customtoken))
+		{
+			TokenUser customuser = shiroService.findToken(customtoken);
+
+			if(customuser ==null)
+			{
+				return AjaxResult.error(AjaxStatus.logineroor.code, "未知账户");
+			}else
+			{
+				// 获取菜单栏
+				List<ElementNode> menuTree = sysPermissionService.getTreePerm(customuser.getLaborNum());
+
+				return AjaxResult.successData(200, menuTree);
+			}
+
+		}else {
+			return AjaxResult.error(AjaxStatus.logineroor.code, "未知账户");
+		}
+
+	}
+	/**
+	 * 手机登录
+	 * @param user
+	 * @param rememberMe
+	 * @param request
+	 * @return
+	 * @author gyee
+	 * @Date 2020年12月7日 上午12:54:28
+	 */
+	@ApiOperation(value = "手机登录", notes = "手机登录")
+	@PostMapping("/API/login")
+	@ResponseBody
+	public AjaxResult APIlogin(TsysUser user,boolean rememberMe,HttpServletRequest request) {
+		// ModelAndView view =new ModelAndView();
+		Boolean yz = true;
+//		if (V2Config.getRollVerification()) {// 滚动验证
+//			yz = true;
+//		} else {// 图片验证
+//			String scode = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
+//			yz = StringUtils.isNotEmpty(scode) && StringUtils.isNotEmpty(code) && scode.equals(code);
+//		}
+		System.out.println("/API/login手机请求");
+		// 判断验证码
+		if (yz) {
+			String userName = user.getUsername();
+			Subject currentUser = SecurityUtils.getSubject();
+			// 是否验证通过
+			if (!currentUser.isAuthenticated()) {
+				UsernamePasswordToken token = new UsernamePasswordToken(userName, user.getPassword());
+				try {
+					if (rememberMe) {
+						token.setRememberMe(true);
+					}
+					// 存入用户
+					currentUser.login(token);
+					if (StringUtils.isNotNull(ShiroUtils.getUser())) {
+						// 若为前后端分离版本,则可把sessionId返回,作为分离版本的请求头authToken
+						 String authToken = ShiroUtils.getSessionId();
+						 return AjaxResult.successData(200, authToken);
+						//return AjaxResult.success();
+					} else {
+						return AjaxResult.error(500, "未知账户");
+					}
+				} catch (UnknownAccountException uae) {
+					logger.info("对用户[" + userName + "]进行登录验证..验证未通过,未知账户");
+					return AjaxResult.error(500, "未知账户");
+				} catch (IncorrectCredentialsException ice) {
+					logger.info("对用户[" + userName + "]进行登录验证..验证未通过,错误的凭证");
+					return AjaxResult.error(500, "用户名或密码不正确");
+				} catch (LockedAccountException lae) {
+					logger.info("对用户[" + userName + "]进行登录验证..验证未通过,账户已锁定");
+					return AjaxResult.error(500, "账户已锁定");
+				} catch (ExcessiveAttemptsException eae) {
+					logger.info("对用户[" + userName + "]进行登录验证..验证未通过,错误次数过多");
+					return AjaxResult.error(500, "用户名或密码错误次数过多");
+				} catch (AuthenticationException ae) {
+					// 通过处理Shiro的运行时AuthenticationException就可以控制用户登录失败或密码错误时的情景
+					logger.info("对用户[" + userName + "]进行登录验证..验证未通过,堆栈轨迹如下");
+					ae.printStackTrace();
+					return AjaxResult.error(500, "用户名或密码不正确");
+				}
+			} else {
+				if (StringUtils.isNotNull(ShiroUtils.getUser())) {
+					// 跳转到 get请求的登陆方法
+					// view.setViewName("redirect:/"+prefix+"/index");
+					 String authToken = ShiroUtils.getSessionId();
+					 return AjaxResult.successData(200, authToken);
+				} else {
+					return AjaxResult.error(500, "未知账户");
+				}
+			}
+		} else {
+			return AjaxResult.error(500, "验证码不正确!");
+		}
+
+	}
+
+	/**
+	 * 退出登陆
+	 * 
+	 * @return
+	 */
+//	@ApiOperation(value = "退出登陆", notes = "退出登陆")
+	@GetMapping("/Loginout")
+
+	public String LoginOut(HttpServletRequest request, HttpServletResponse response) {
+		// 在这里执行退出系统前需要清空的数据
+		Subject subject = SecurityUtils.getSubject();
+		// 注销
+		subject.logout();
+		return "redirect:/" + prefix + "/login";
+	}
+
+	@ApiOperation(value = "退出登陆", notes = "退出登陆")
+	@PostMapping("/Loginoutvue")
+	@ResponseBody
+	public AjaxResult Loginoutvue(HttpServletRequest request, HttpServletResponse response) {
+		// 在这里执行退出系统前需要清空的数据
+		Subject subject = SecurityUtils.getSubject();
+		// shiro注销
+		subject.logout();
+
+		String authToken = request.getHeader(AUTHTOKEN);
+		if(StringUtils.notEmp(authToken))
+		{
+			//websocekt退出
+			webSocketLoginOutEvent.loginOut(authToken);
+			//令牌退出
+			shiroService.logout(authToken);
+		}
+
+		return AjaxResult.success();
+	}
+
+
+	@ApiOperation(value = "WEBSOCKET缓存", notes = "WEBSOCKET缓存")
+	@PostMapping("/websocketdisconnect")
+	@ResponseBody
+	public AjaxResult websocketdisconnect(HttpServletRequest request, HttpServletResponse response) {
+
+
+		String authToken = request.getHeader(AUTHTOKEN);
+		if(StringUtils.notEmp(authToken))
+		{
+			//websocekt退出
+			webSocketLoginOutEvent.loginOut(authToken);
+		}
+
+		return AjaxResult.success();
+	}
+
+	/**** 页面测试 ****/
+	@ApiOperation(value = "404页面", notes = "404页面")
+	@GetMapping("Out404")
+	public String Out404(HttpServletRequest request, HttpServletResponse response) {
+
+		return "redirect:/error/404";
+	}
+
+	@GetMapping("Out403")
+	@ApiOperation(value = "403页面", notes = "403页面")
+	public String Out403(HttpServletRequest request, HttpServletResponse response) {
+
+		return "redirect:/error/403";
+	}
+
+	@ApiOperation(value = "500页面", notes = "500页面")
+	@GetMapping("Out500")
+	public String Out500(HttpServletRequest request, HttpServletResponse response) {
+
+		return "redirect:/error/500";
+	}
+
+	/**
+	 * 权限测试跳转页面
+	 * 
+	 * @param request
+	 * @param response
+	 * @return
+	 */
+	@ApiOperation(value = "权限测试跳转页面", notes = "权限测试跳转页面")
+	@GetMapping("Outqx")
+	@RequiresPermissions("system:user:asd")
+	public String Outqx(HttpServletRequest request, HttpServletResponse response) {
+
+		return "redirect:/error/500";
+	}
+	/**** 页面测试EDN ****/
+}

+ 67 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/IndexController.java

@@ -0,0 +1,67 @@
+package com.gyee.frame.controller;
+
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.conf.V2Config;
+import com.gyee.frame.model.custom.TitleVo;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+
+/**
+ * 如果有前台这儿写前台访问方法
+ * @ClassName: IndexController
+ * @author gyee
+ * @date 2019-10-21 00:15
+ */
+@Controller
+public class IndexController extends BaseController{
+	
+	/**
+	 * 前台访问 域名:端口 例如:localhost:80的get请求
+	 * @param map
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月20日 下午10:55:13
+	 */
+	@ApiOperation(value="前台",notes="前台")
+	@GetMapping("/")
+	public String index(ModelMap modelMap) {
+		String str="前台";
+		setTitle(modelMap, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+		Subject currentUser = SecurityUtils.getSubject();
+
+
+		try {
+			if ((null != SecurityUtils.getSubject() && SecurityUtils.getSubject().isAuthenticated())
+					|| SecurityUtils.getSubject().isRemembered()) {
+				return "redirect:/admin/index";
+			} else {
+				System.out.println("--进行登录验证..验证开始");
+
+				modelMap.put("RollVerification", V2Config.getRollVerification());
+				System.out.println("V2Config.getRollVerification()>>>" + V2Config.getRollVerification());
+				return "login";
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return "login";
+	}
+	/**
+	 * 前台访问/index的get请求
+	 * @param map
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月20日 下午10:54:56
+	 */
+	@ApiOperation(value="前台",notes="前台")
+	@GetMapping("/index")
+	public String index2(ModelMap map) {
+		String str="前台";
+		setTitle(map, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+		return "index";
+	}
+}

+ 32 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/ApiController.java

@@ -0,0 +1,32 @@
+package com.gyee.frame.controller.admin;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.shiro.util.ShiroUtils;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 该接口为了前后端分离or手机端服务不用登录的接口  访问地址:localhot:8080/ApiController/test
+ * 如何还需要其他 接口不登陆就能访问:ShiroFilterMapFactory.java里面配置开放自己的controller
+ * @ClassName: ApiController
+ * @author gyee
+ * @date 2020-04-15 22:59
+ */
+@Api(value = "接口API")
+@Controller
+@RequestMapping("/ApiController")
+public class ApiController {
+	
+	//@Log(title = "${TsysTables.tableComment}集合查询", action = "111")
+	@ApiOperation(value = "测试方法", notes = "测试方法")
+	@GetMapping("/test")
+	@ResponseBody
+	public AjaxResult test() {
+		return AjaxResult.successData(200, ShiroUtils.getLoginName());
+	}
+}

+ 46 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/ApiController2.java

@@ -0,0 +1,46 @@
+package com.gyee.frame.controller.admin;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.shiro.util.ShiroUtils;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * token测试   
+ * 
+ * head 参数
+ * authToken:4acf8612-d66c-4770-a775-c9418c65bacd
+ * @ClassName: ApiController2
+ * @author gyee
+ * @date 2020-12-07 00:56
+ */
+@Api(value = "iphoneAPI")
+@Controller
+@RequestMapping("/api")
+public class ApiController2 {
+	/**
+	 * 第一步:token获取
+	 * post:http://localhost:8080/admin/API/loginvue
+	 * body参数:
+	 * username:admin
+	 * password:admin
+	 * 返回 {"code":200,"data":"1487913f-5a64-488d-9fc7-243d004faae2"}
+	 * 第二步:请求测试
+	 * get:请求地址:http://localhost:8080/api/test
+	 * head参数:
+	 * authToken:1487913f-5a64-488d-9fc7-243d004faae2
+	 * 返回信息
+	 * {"code":200,"data":"admin"}
+	 */
+	@ApiOperation(value = "token测试方法", notes = "token测试方法")
+	@GetMapping("/test")
+	@ResponseBody
+	public AjaxResult test() {
+		return AjaxResult.successData(200, ShiroUtils.getLoginName());
+	}
+}

+ 212 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/AutoCodeController.java

@@ -0,0 +1,212 @@
+package com.gyee.frame.controller.admin;
+
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import cn.hutool.json.JSONUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.TsysPermission;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.model.custom.TsysTables;
+import com.gyee.frame.model.custom.autocode.AutoCodeConfig;
+import com.gyee.frame.model.custom.autocode.BeanColumn;
+import com.gyee.frame.model.custom.autocode.GlobalConfig;
+import com.gyee.frame.service.GeneratorService;
+import com.gyee.frame.service.SysPermissionService;
+import com.gyee.frame.service.SysUtilService;
+import com.gyee.frame.util.AutoCode.AutoCodeUtil;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ * 代码自动生成
+ * 
+ * @ClassName: AutoCodeController
+ * @author gyee
+ * @date 2019-08-13 00:34
+ */
+@Api(value = "代码自动生成")
+@Controller
+@RequestMapping("/autoCodeController")
+public class AutoCodeController extends BaseController {
+
+	private String prefix = "admin/auto_code";
+	@Resource
+	private GeneratorService generatorService;
+	@Resource
+	private SysUtilService sysUtilService;
+	@Resource
+	private SysPermissionService sysPermissionService;
+
+	/**
+	 * 代码自动生成展示首页
+	 * 
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年8月13日 上午12:35:23
+	 */
+	@ApiOperation(value = " 代码自动生成展示首页", notes = " 代码自动生成展示首页")
+	@GetMapping("/one")
+	@RequiresPermissions("system:autocode:one")
+	public String one(ModelMap model) {
+		String str = "单表代码生成";
+		setTitle(model, new TitleVo("生成", str + "管理", true, "欢迎进入" + str + "页面", true, false));
+		List<TsysTables> tables = generatorService.queryList(null);
+		List<TsysPermission> permissions = sysPermissionService.list2(null);
+		model.addAttribute("tables", tables);
+		model.addAttribute("permissions", permissions);
+		return prefix + "/one";
+	}
+
+	/**
+	 * 代码自动生成全局配置
+	 * 
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年8月13日 上午12:34:30
+	 */
+	@ApiOperation(value = " 代码自动生成全局配置", notes = "代码自动生成全局配置")
+	@GetMapping("/global")
+	@RequiresPermissions("system:autocode:global")
+	public String global(ModelMap modelMap) {
+		String str = "全局配置";
+		setTitle(modelMap, new TitleVo("配置", str + "管理", true, "欢迎进入" + str + "页面", true, false));
+
+		modelMap.put("autoConfig", AutoCodeConfig.getGlobalConfig());
+		System.out.println(JSONUtil.toJsonStr(AutoCodeConfig.getGlobalConfig()));
+		return prefix + "/global";
+	}
+
+	/**
+	 * 根据表名查询表信息
+	 * @param tableName
+	 * @return
+	 * @author gyee
+	 * @Date 2019年8月15日 上午1:09:36
+	 */
+	@ApiOperation(value = "根据表名查询表信息", notes = "根据表名查询表信息")
+	@PostMapping("/queryTable")
+	@ResponseBody
+	public AjaxResult queryTable(String tableName) {
+		List<TsysTables> list = generatorService.queryList(tableName);
+		if (list.size() > 0) {
+			return AjaxResult.successData(200, list);
+		}
+		return AjaxResult.error();
+	}
+
+	/**
+	 * 根据表查询表字段详情
+	 * 
+	 * @param tableName
+	 * @return
+	 * @author gyee
+	 * @Date 2019年8月15日 上午1:10:42
+	 */
+	@ApiOperation(value = "根据表查询表字段详情", notes = "根据表查询表字段详情")
+	@PostMapping("/queryTableInfo")
+	@ResponseBody
+	public AjaxResult queryTableInfo(String tableName) {
+		List<BeanColumn> list = generatorService.queryColumns2(tableName);
+		System.out.println(JSONUtil.toJsonStr(list));
+		if (list.size() > 0) {
+			return AjaxResult.successData(200, list);
+		}
+		return AjaxResult.error();
+	}
+
+	/**
+	 * 保存配置文件
+	 * 
+	 * @param globalConfig
+	 * @param model
+	 * @param request
+	 * @return
+	 * @throws Exception
+	 * @author gyee
+	 * @Date 2019年8月24日 下午3:25:41
+	 */
+	//@Log(title = "保存配置文件", action = "1")
+	@ApiOperation(value = "保存配置文件", notes = "保存配置文件")
+	@PostMapping("/addGlobal")
+	@ResponseBody
+	public AjaxResult addGlobal(GlobalConfig globalConfig, Model model, HttpServletRequest request) throws Exception {
+		AutoCodeConfig.setGlobalConfig(globalConfig);
+		if (globalConfig != null) {
+			return success();
+		} else {
+			return error();
+		}
+	}
+
+	/**
+	 * 保存单表信息
+	 * 
+	 * @param allColumnss  字段列表字符串
+	 * @param tableName 表名
+	 * @param conditionQueryField  条件查询字段
+	 * @param pid 父id
+	 * @param sqlcheck 是否录入数据
+	 * @param vhtml 生成html
+	 * @param vController 生成controller
+	 * @param vservice 生成service
+	 * @param vMapperORdao 生成mapper or dao
+	 * @return
+	 * @throws Exception
+	 * @author gyee
+	 * @Date 2019年8月31日 上午2:49:18
+	 */
+	//@Log(title = "保存单表信息", action = "1")
+	@ApiOperation(value = "保存单表信息", notes = "保存单表信息")
+	@PostMapping("/saveOne")
+	@ResponseBody
+	public AjaxResult saveOne(String allColumnss, String tableName, String conditionQueryField, String pid,
+			int sqlcheck,Boolean vhtml,Boolean vController,Boolean vService,Boolean vMapperORdao) throws Exception {
+		//JSONArray array = JSONUtil.parseArray(allColumnss);
+		// 遗留可用前端修改传入的字段等信息(未完善)
+		//List<BeanColumn> beanColumns2 = JSONUtil.toList(array, BeanColumn.class);
+		List<TsysTables> list = generatorService.queryList(tableName);
+		if (list.size() > 0) {
+			TsysTables tables = list.get(0);
+			List<BeanColumn> beanColumns = generatorService.queryColumns2(tableName);
+			AutoCodeUtil.autoCodeOneModel(sysUtilService, tables, beanColumns, conditionQueryField, pid, sqlcheck, vhtml, vController, vService, vMapperORdao);
+		}
+		return AjaxResult.success();
+	}
+
+	/**
+	 * 根据权限字段查询是否存在
+	 * 
+	 * @param perms
+	 * @return
+	 * @author gyee
+	 * @Date 2019年9月1日 上午2:06:31
+	 */
+	@ApiOperation(value = "根据权限字段查询是否存在", notes = "根据权限字段查询是否存在")
+	@PostMapping("/queryLikePerms")
+	@ResponseBody
+	public AjaxResult queryLikePerms(String tableName) {
+		List<TsysTables> list = generatorService.queryList(tableName);
+		if (list.size() > 0) {
+			TsysTables tables = list.get(0);
+			Boolean boolean1 = sysPermissionService.queryLikePerms(tables.getTableModel_a());
+			if (boolean1) {
+				return AjaxResult.error("数据库已有权限");
+			} else {
+				return AjaxResult.success("ok");
+			}
+		}
+		return AjaxResult.error("请选择表");
+	}
+}

+ 142 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/CaptchaController.java

@@ -0,0 +1,142 @@
+package com.gyee.frame.controller.admin;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.List;
+
+import javax.imageio.ImageIO;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.gyee.frame.common.base.BaseController;
+import com.google.code.kaptcha.Constants;
+import com.google.code.kaptcha.Producer;
+
+/**
+ * 图片验证码
+ * @author fc
+ */
+@Api(value = "验证码")
+@Controller
+@RequestMapping("/captcha")
+public class CaptchaController extends BaseController
+{
+	@Resource
+    private Producer captchaProducer;
+    
+    @Resource
+    private Producer captchaProducerMath;
+
+    /**
+     * 生成验证码
+     * @param request
+     * @param response
+     * @param type
+     * @return
+     * @author gyee
+     * @Date 2020年5月22日 上午12:17:03
+     */
+    @ApiOperation(value = "验证码生成", notes = "验证码生成")
+    @GetMapping("/captchaImage")
+    public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response,String type)
+    {
+        ServletOutputStream out = null;
+        try
+        {
+            HttpSession session = request.getSession();
+            response.setDateHeader("Expires", 0);
+            //Set standard HTTP/1.1 no-cache headers. 
+            response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
+            //Set IE extended HTTP/1.1 no-cache headers (use addHeader). 
+            response.addHeader("Cache-Control", "post-check=0, pre-check=0");
+            //Set standard HTTP/1.0 no-cache header. 
+            response.setHeader("Pragma", "no-cache");
+            //return a jpeg 
+            response.setContentType("image/jpeg");
+            ///验证码字符串
+            String captStr = null;
+            //答案
+            String answer = null;
+            BufferedImage images = null;
+            if ("math".equals(type))//验证码为算数 8*9 类型
+            {
+            	//验证码加答案8-3=?@5
+                String captText = captchaProducerMath.createText();
+                //验证码8-3=?
+                captStr = captText.substring(0, captText.lastIndexOf("@"));
+                answer = captText.substring(captText.lastIndexOf("@") + 1);
+                //生成图片
+                images = captchaProducerMath.createImage(captStr);
+            }
+            else if ("char".equals(type))//验证码为 abcd类型
+            {
+            	captStr = answer = captchaProducer.createText();
+                images = captchaProducer.createImage(captStr);
+            }
+            session.setAttribute(Constants.KAPTCHA_SESSION_KEY, answer);
+            out = response.getOutputStream();
+            ImageIO.write(images, "jpg", out);
+            out.flush();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        finally
+        {
+            try
+            {
+                if (out != null)
+                {
+                    out.close();
+                }
+            }
+            catch (IOException e)
+            {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+    
+    /**
+     * 滚动条验证码
+     * @param datas
+     * @return
+     * @author gyee
+     * @Date 2019年11月23日 下午6:12:27
+     */
+    @ApiOperation(value = "滚动条验证码", notes = "滚动条验证码")
+    @PostMapping("/isVerify")
+    @ResponseBody
+	public boolean isVerify(@RequestBody List<Integer> datas) {
+		int sum = 0;  
+		for (Integer data : datas) {
+			sum += data;
+		}
+		double avg = sum * 1.0 / datas.size();
+		
+		double sum2 = 0.0;
+		for (Integer data : datas) {
+			sum2 += Math.pow(data - avg, 2);
+		}
+		
+		double stddev = sum2 / datas.size();
+		return stddev != 0;
+	}
+	
+}

+ 181 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/DictDataController.java

@@ -0,0 +1,181 @@
+package com.gyee.frame.controller.admin;
+
+import com.gyee.frame.model.auto.TSysDictData;
+import com.gyee.frame.service.SysDictDataService;
+import com.gyee.frame.service.SysDictTypeService;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 字典表Controller
+ * @ClassName: DictDataController
+ * @author gyee
+ * @date 2019-11-20 22:46
+ */
+@Api(value = "字典数据表")
+@Controller
+@RequestMapping("/DictDataController")
+public class DictDataController extends BaseController{
+	
+	private String prefix = "admin/dict_data";
+	@Resource
+	private SysDictDataService tSysDictDataService;
+	@Resource
+	private SysDictTypeService sysDictTypeService;
+	
+	/**
+	 * 分页list页面
+	 * @param model
+	 * @param dictId
+	 * @return
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("system:dictData:view")
+    public String view(ModelMap model,String dictId)
+    {
+    	model.addAttribute("dictId",dictId);
+		String str="字典数据表";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * 字典数据表集合查询
+	 * @param tablepar
+	 * @param searchText
+	 * @param dictId
+	 * @return
+	 */
+	//@Log(title = "字典数据表集合查询", action = "1")
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("system:dictData:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText,String dictId){
+		PageInfo<TSysDictData> page=tSysDictDataService.list(tablepar,searchText,dictId) ;
+		TableSplitResult<TSysDictData> result=new TableSplitResult<TSysDictData>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	/**
+	 * 新增跳转
+	 * @param modelMap
+	 * @param dictId
+	 * @return
+	 */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap,String dictId)
+    {
+		modelMap.addAttribute("dictType",sysDictTypeService.selectByPrimaryKey(dictId).getDictType());
+        return prefix + "/add";
+    }
+	
+    /**
+     * 新增保存
+     * @param tSysDictData
+     * @param model
+     * @return
+     */
+	//@Log(title = "字典数据表新增", action = "1")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("system:dictData:add")
+	@ResponseBody
+	public AjaxResult add(TSysDictData tSysDictData, Model model){
+		int b=tSysDictDataService.insertSelective(tSysDictData);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "字典数据表删除", action = "1")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("system:dictData:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=tSysDictDataService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(TSysDictData tSysDictData){
+		int b=tSysDictDataService.checkNameUnique(tSysDictData);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") String id, ModelMap mmap)
+    {
+		TSysDictData sysDictData= tSysDictDataService.selectByPrimaryKey(id);
+        mmap.put("TSysDictData", sysDictData);
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存
+     */
+    //@Log(title = "字典数据表修改", action = "1")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("system:dictData:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(TSysDictData record)
+    {
+        return toAjax(tSysDictDataService.updateByPrimaryKeySelective(record));
+    }
+
+    
+    
+
+	
+}

+ 170 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/DictTypeController.java

@@ -0,0 +1,170 @@
+package com.gyee.frame.controller.admin;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.TSysDictType;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysDictTypeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 字典类型Controller
+ * @ClassName: DictTypeController
+ * @author gyee
+ * @date 2019-11-20 22:45
+ */
+@Api(value = "字典类型表")
+@Controller
+@RequestMapping("/DictTypeController")
+public class DictTypeController extends BaseController{
+	
+	private String prefix = "admin/dict_type";
+	@Resource
+	private SysDictTypeService tSysDictTypeService;
+	
+	/**
+	 * 分页list页面
+	 * @param model
+	 * @param dictId
+	 * @return
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("system:dictType:view")
+    public String view(ModelMap model)
+    {	
+		String str="字典类型表";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * 字典类型表集合查询
+	 * @param tablepar
+	 * @param searchText
+	 * @return
+	 */
+	//@Log(title = "字典类型表集合查询", action = "111")
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("system:dictType:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<TSysDictType> page=tSysDictTypeService.list(tablepar,searchText) ; 
+		TableSplitResult<TSysDictType> result=new TableSplitResult<TSysDictType>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	/**
+	 * 新增跳转
+	 * @param modelMap
+	 * @return
+	 */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+        return prefix + "/add";
+    }
+	
+    /**
+     * 新增保存
+     * @param tSysDictType
+     * @param model
+     * @return
+     */
+	//@Log(title = "字典类型表新增", action = "111")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("system:dictType:add")
+	@ResponseBody
+	public AjaxResult add(TSysDictType tSysDictType,Model model){
+		int b=tSysDictTypeService.insertSelective(tSysDictType);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除字典类型
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "字典类型表删除", action = "111")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("system:dictType:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=tSysDictTypeService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查字典类型名字相同
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(TSysDictType tSysDictType){
+		int b=tSysDictTypeService.checkNameUnique(tSysDictType);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") String id, ModelMap mmap)
+    {
+        mmap.put("TSysDictType", tSysDictTypeService.selectByPrimaryKey(id));
+
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存
+     */
+    //@Log(title = "字典类型表修改", action = "111")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("system:dictType:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(TSysDictType record)
+    {
+        return toAjax(tSysDictTypeService.updateByPrimaryKeySelective(record));
+    }
+
+	
+}

+ 175 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/EmailController.java

@@ -0,0 +1,175 @@
+package com.gyee.frame.controller.admin;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.TSysEmail;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.TSysEmailService;
+import com.gyee.frame.util.SimpleEmailUtil;
+import com.github.pagehelper.PageInfo;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 邮件发送Controller
+ * @ClassName: EmailController
+ * @author gyee
+ * @date 2019-06-10 00:39
+ * @version V1.0
+ */
+@Api(value = "邮件发送Controller")
+@Controller
+@RequestMapping("/EmailController")
+public class EmailController extends BaseController{
+		
+	private String prefix = "admin/email";
+	
+	@Resource
+	private TSysEmailService tSysEmailService;
+	
+	/**
+	 * 分页展示页面
+	 * @param model
+	 * @param dictId
+	 * @return
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("system:email:view")
+    public String view(ModelMap model)
+    {	
+		String str="邮件";
+		setTitle(model, new TitleVo("发送", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+
+	/**
+	 * 分页list页面
+	 * @param model
+	 * @param dictId
+	 * @return
+	 */
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("system:email:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<TSysEmail> page=tSysEmailService.list(tablepar,searchText) ; 
+		TableSplitResult<TSysEmail> result=new TableSplitResult<TSysEmail>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	/**
+     * 新增跳转
+     */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+        return prefix + "/add";
+    }
+	
+	/**
+	 * 新增
+	 * @param tSysEmail
+	 * @param model
+	 * @return
+	 * @throws Exception
+	 * @author gyee
+	 */
+	//@Log(title = "新增邮件", action = "1")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("system:email:add")
+	@ResponseBody
+	public AjaxResult add(TSysEmail tSysEmail,Model model) throws Exception{
+		int b=tSysEmailService.insertSelective(tSysEmail);
+		SimpleEmailUtil.sendEmail(tSysEmail);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除邮件
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "删除邮件", action = "1")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("system:email:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=tSysEmailService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查邮件同名
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(TSysEmail tSysEmail){
+		int b=tSysEmailService.checkNameUnique(tSysEmail);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") String id, ModelMap mmap)
+    {
+        mmap.put("TSysEmail", tSysEmailService.selectByPrimaryKey(id));
+
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存
+     */
+	//@Log(title = "修改保存", action = "1")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("system:email:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(TSysEmail record)
+    {
+        return toAjax(tSysEmailService.updateByPrimaryKeySelective(record));
+    }
+
+
+}

+ 251 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/FileController.java

@@ -0,0 +1,251 @@
+package com.gyee.frame.controller.admin;
+
+import java.io.IOException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.common.file.FileUtils;
+import com.gyee.frame.model.auto.TsysDatas;
+import com.gyee.frame.model.auto.TsysFile;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.util.StringUtils;
+import com.github.pagehelper.PageInfo;
+
+/**
+ * 文件上传controller
+ * @author gyee
+ * @date: 2018年9月16日 下午4:23:50
+ */
+@Api(value = "文件上传")
+@Controller
+@RequestMapping("/FileController")
+public class FileController extends BaseController{
+
+	//跳转页面参数
+	private String prefix = "admin/file";
+	
+	/**
+	 * 分页展示页面
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月20日 下午10:18:32
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("system:file:view")
+    public String view(ModelMap model)
+    {	
+		String str="上传图片";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * 文件列表
+	 * @param tablepar
+	 * @param searchText 搜索字符
+	 * @return
+	 */
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("system:file:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<TsysFile> page=sysFileService.list(tablepar,searchText) ; 
+		TableSplitResult<TsysFile> result=new TableSplitResult<TsysFile>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	/**
+	 * 新增文件跳转页面
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月20日 下午10:19:03
+	 */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add()
+    {
+        return prefix + "/add";
+    }
+	
+    
+    
+    /**
+     * 文件上传
+     * @param file
+     * @return
+     * @author gyee
+     * @Date 2019年11月20日 下午10:18:49
+     */
+	//@Log(title = "文件上传", action = "1")
+	@ApiOperation(value = "文件上传", notes = "文件上传")
+    @PostMapping("/upload")
+    @ResponseBody
+    public AjaxResult updateAvatar(@RequestParam("file") MultipartFile file)
+    {
+        try
+        {
+            if (!file.isEmpty())
+            {
+                //插入文件存储表
+            	String id=sysDatasService.insertSelective(file);
+                if(id!=null){
+                	 return AjaxResult.successData(200, id);
+                }
+            }
+            return error();
+        }
+        catch (Exception e)
+        {
+            return error(e.getMessage());
+        }
+    }
+	
+    /**
+     * 文件添加
+     * @param file
+     * @return
+     */
+	//@Log(title = "文件添加", action = "1")
+	@ApiOperation(value = "文件添加", notes = "文件添加")
+	@PostMapping("/add")
+	@RequiresPermissions("system:file:add")
+	@ResponseBody
+	public AjaxResult add(TsysFile file,String dataId){
+		if(StringUtils.isNotEmpty(dataId)) {
+			int b=sysFileService.insertSelective(file,dataId);
+			if(b>0){
+				return success();
+			}
+		}
+		return error("请上传文件");
+	}
+	
+	/**
+	 * 删除文件
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "删除文件", action = "1")
+	@ApiOperation(value = "删除文件", notes = "删除文件")
+	@PostMapping("/remove")
+	@RequiresPermissions("system:file:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysFileService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	
+	/**
+	 * 删除本地文件
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "删除本地文件", action = "1")
+	@ApiOperation(value = "删除本地文件", notes = "删除本地文件")
+	@PostMapping("/del_file")
+	@ResponseBody
+	public AjaxResult del_file(String ids){
+		int b=sysFileService.deleteBydataFile(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	
+	/**
+	 * 检查文件名字
+	 * @param tsysFile
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(TsysFile tsysFile){
+		int b=sysFileService.checkNameUnique(tsysFile);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改文件
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") String id, ModelMap mmap)
+    {
+        mmap.put("tsysFile", sysFileService.selectByPrimaryKey(id));
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存文件
+     */
+	//@Log(title = "修改保存文件", action = "1")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("system:user:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(TsysFile tsysFile,String dataId)
+    {
+        return toAjax(sysFileService.updateByPrimaryKey(tsysFile,dataId));
+    }
+    
+    /**
+     * 展示文件跳转页面
+     */
+	@ApiOperation(value = "展示文件跳转页面", notes = "展示文件跳转页面")
+    @GetMapping("/viewfile/{id}")
+    public String viewfile(@PathVariable("id") String id,ModelMap mmap){
+    	mmap.put("tsysDatas",sysFileDatasService.queryfileID(id));
+        return prefix + "/viewfile";
+    }
+    
+    /**
+     * 此功能为application.yml 下面的isstatic为N 时候需要的
+     * 逻辑为:根据数据库文件存放地址,读取图片流放入到<ima src>里面展示
+     */
+	@ApiOperation(value = "展示文件跳转页面", notes = "展示文件跳转页面")
+    @GetMapping("/viewImg/{id}")
+    public void viewIMG(@PathVariable("id") String id,HttpServletRequest request,HttpServletResponse response){
+    	TsysDatas datas= sysDatasService.selectByPrimaryKey(id);
+    	try {
+			FileUtils.readIMGTohtml(request, response, datas.getFileAbsolutePath());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+    }
+    
+    
+}

+ 38 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/JsonController.java

@@ -0,0 +1,38 @@
+package com.gyee.frame.controller.admin;
+
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.model.custom.TitleVo;
+import io.swagger.annotations.Api;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+
+/**
+ * jsonController 
+ * @ClassName: JsonController
+ * @author gyee
+ * @date 2019-09-21 17:59
+ */
+@Api(value = "Json格式化")
+@Controller
+@RequestMapping("/Json")
+public class JsonController extends BaseController{
+
+	private String prefix = "admin/json";
+
+	/**
+	 * json格式化展示页面
+	 * @param model
+	 * @return
+	 */
+	@GetMapping("/view")
+    public String view(ModelMap model)
+    {	
+		String str="json";
+		setTitle(model, new TitleVo("json格式化", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+}

+ 91 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/LogController.java

@@ -0,0 +1,91 @@
+package com.gyee.frame.controller.admin;
+
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.TsysOperLog;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.github.pagehelper.PageInfo;
+
+/**
+ * 日志记录controller
+ * @author gyee
+ * @date: 2018年9月30日 下午9:28:31
+ */
+@Controller
+@Api(value = "日志记录")
+@RequestMapping("/LogController")
+public class LogController extends BaseController{
+
+	//跳转页面参数
+	private String prefix = "admin/log";
+	
+	/**
+	 * 日志记录展示页面
+	 * @param model
+	 * @return
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("system:log:view")
+    public String view(ModelMap model)
+    {	
+		String str="操作日志";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+		
+        return prefix + "/list";
+    }
+	
+	/**
+	 * 文件列表
+	 * @param tablepar
+	 * @param searchText 搜索字符
+	 * @return
+	 */
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("system:log:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<TsysOperLog> page=sysOperLogService.list(tablepar,searchText) ; 
+		TableSplitResult<TsysOperLog> result=new TableSplitResult<TsysOperLog>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+
+	
+	/**
+	 * 删除日志
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "删除日志", action = "1")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("system:log:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysOperLogService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	
+
+    
+    
+}

+ 268 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/PermissionController.java

@@ -0,0 +1,268 @@
+package com.gyee.frame.controller.admin;
+
+import java.util.List;
+
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.TsysPermission;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ * 权限Controller
+ * @author gyee
+ * @date: 2018年9月2日 下午8:08:21
+ */
+@Api(value = "权限")
+@Controller
+@RequestMapping("/PermissionController")
+public class PermissionController  extends BaseController{
+	
+	//跳转页面参数
+	private String prefix = "admin/permission";
+	
+	/**
+	 * 权限列表展示
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午3:43:51
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("system:permission:view")
+    public String view(ModelMap model)
+    {	
+		String str="权限";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * 权限列表
+	 * @param tablepar
+	 * @param searchText 搜索字符
+	 * @return
+	 */
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("system:permission:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<TsysPermission> page= sysPermissionService.list(tablepar, searchText) ;
+		TableSplitResult<TsysPermission> result=new TableSplitResult<TsysPermission>(page.getPageNum(), page.getTotal(), page.getList());
+		return  result;
+	}
+	/**
+	 * 权限列表
+	 * @param tablepar
+	 * @param searchText 搜索字符
+	 * @return
+	 */
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list2")
+	@ResponseBody
+	public Object list2(Tablepar tablepar,String searchText){
+		List<TsysPermission> page= sysPermissionService.list2(searchText) ;
+		return  page;
+	}
+	/**
+     * 新增权限
+     */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add()
+    {
+        return prefix + "/add";
+    }
+	
+	
+    /**
+     * 权限添加
+     * @param role
+     * @return
+     */
+	//@Log(title = "权限添加", action = "1")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("system:permission:add")
+	@ResponseBody
+	public AjaxResult add(TsysPermission role){
+		int b= sysPermissionService.insertSelective(role);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除权限
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "删除权限", action = "1")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("system:permission:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b= sysPermissionService.deleteByPrimaryKey(ids);
+		if(b==1){
+			return success();
+		}else if(b==-1){
+			return error("该权限有子权限,请先删除子权限");
+		}else if(b==-2){
+			return error("该权限绑定了角色,请解除角色绑定");
+		}else {
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查权限
+	 * @param TsysPermission
+	 * @return
+	 */
+	@ApiOperation(value = "检查权限", notes = "检查权限")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(TsysPermission TsysPermission){
+		int b= sysPermissionService.checkNameUnique(TsysPermission);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	/**
+	 * 检查权限URL
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查权限URL", notes = "检查权限URL")
+	@PostMapping("/checkURLUnique")
+	@ResponseBody
+	public int checkURLUnique(TsysPermission tsysPermission){
+		int b= sysPermissionService.checkURLUnique(tsysPermission);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	/**
+	 * 检查权限perms字段
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查权限perms字段", notes = "检查权限perms字段")
+	@PostMapping("/checkPermsUnique")
+	@ResponseBody
+	public int checkPermsUnique(TsysPermission tsysPermission){
+		int b= sysPermissionService.checkPermsUnique(tsysPermission);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	/**
+	 * 修改权限
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{roleId}")
+    public String edit(@PathVariable("roleId") String id, ModelMap mmap)
+    {	
+		//获取自己的权限信息
+		TsysPermission mytsysPermission = sysPermissionService.selectByPrimaryKey(id);
+		//获取父权限信息
+		TsysPermission pattsysPermission = sysPermissionService.selectByPrimaryKey(mytsysPermission.getPid());
+        mmap.put("TsysPermission", mytsysPermission);
+        mmap.put("pattsysPermission", pattsysPermission);
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存权限
+     */
+	//@Log(title = "修改保存权限", action = "1")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("system:permission:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(TsysPermission TsysPermission)
+    {
+        return toAjax(sysPermissionService.updateByPrimaryKey(TsysPermission));
+    }
+    
+    /**
+     * 获取所有的转换成bootstarp的权限数据
+     * @return
+     */
+	@ApiOperation(value = "获取所有的转换成bootstarp的权限数据", notes = "获取所有的转换成bootstarp的权限数据")
+    @GetMapping("/getTreePerm")
+    @ResponseBody
+    public AjaxResult getbooBootstrapTreePerm(){
+    	
+    	return retobject(200, sysPermissionService.getbooBootstrapTreePerm(null));
+    }
+    
+    
+    /**
+     * 根据角色id获取bootstarp 所有打勾权限
+     * @param roleId 角色id集合
+     * @return
+     */
+	@ApiOperation(value = "根据角色id获取bootstarp 所有打勾权限", notes = "根据角色id获取bootstarp 所有打勾权限")
+    @PostMapping("/getCheckPrem")
+    @ResponseBody
+    public AjaxResult getCheckPrem(String roleId){
+    	
+    	return retobject(200, sysPermissionService.getCheckPrem(roleId));
+    }
+    
+    
+    /**
+     * 跳转到菜单树页面
+     * @return
+     */
+	@ApiOperation(value = "跳转到菜单树页面", notes = "跳转到菜单树页面")
+    @GetMapping("/tree")
+    public String Tree(){
+    	 return prefix + "/tree";
+    }
+    
+    /**
+     * 获取菜单树
+     * @param pid 父id【没用到】
+     * @return
+     */
+	@ApiOperation(value = "获取菜单树", notes = "获取菜单树")
+    @PostMapping("/tree/{pid}")
+    @ResponseBody
+    public AjaxResult Tree(@PathVariable("pid") String pid){
+    	return retobject(200, sysPermissionService.getbooBootstrapTreePerm(null));
+    }
+    
+    
+}

+ 261 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/PermissionVueController.java

@@ -0,0 +1,261 @@
+package com.gyee.frame.controller.admin;
+
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.TvuePermission;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * VUE权限Controller
+ * @author gyee
+ * @date: 2018年9月2日 下午8:08:21
+ */
+@Api(value = "VUE权限")
+@Controller
+@RequestMapping("/PermissionVueController")
+public class PermissionVueController extends BaseController{
+	
+	//跳转页面参数
+	private String prefix = "admin/permissionvue";
+	
+	/**
+	 * VUE权限列表展示
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午3:43:51
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("system:permissionvue:view")
+    public String view(ModelMap model)
+    {	
+		String str="VUE权限";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * VUE权限列表
+	 * @param tablepar
+	 * @param searchText 搜索字符
+	 * @return
+	 */
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("system:permissionvue:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<TvuePermission> page= vuePermissionService.list(tablepar, searchText) ;
+		TableSplitResult<TvuePermission> result=new TableSplitResult<TvuePermission>(page.getPageNum(), page.getTotal(), page.getList());
+		return  result;
+	}
+	/**
+	 * VUE权限列表
+	 * @param tablepar
+	 * @param searchText 搜索字符
+	 * @return
+	 */
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list2")
+	@ResponseBody
+	public Object list2(Tablepar tablepar,String searchText){
+		List<TvuePermission> page= vuePermissionService.list2(searchText) ;
+		return  page;
+	}
+	/**
+     * 新增VUE权限
+     */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add()
+    {
+        return prefix + "/add";
+    }
+	
+	
+    /**
+     * VUE权限添加
+     * @param role
+     * @return
+     */
+	//@Log(title = "VUE权限添加", action = "1")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("system:permissionvue:add")
+	@ResponseBody
+	public AjaxResult add(TvuePermission role){
+		int b= vuePermissionService.insertSelective(role);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除VUE权限
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "删除VUE权限", action = "1")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("system:permissionvue:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b= vuePermissionService.deleteByPrimaryKey(ids);
+		if(b==1){
+			return success();
+		}else if(b==-1){
+			return error("该VUE权限有子VUE权限,请先删除子VUE权限");
+		}else if(b==-2){
+			return error("该VUE权限绑定了角色,请解除角色绑定");
+		}else {
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查VUE权限
+	 * @param TvuePermission
+	 * @return
+	 */
+	@ApiOperation(value = "检查VUE权限", notes = "检查VUE权限")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(TvuePermission TvuePermission){
+		int b= vuePermissionService.checkNameUnique(TvuePermission);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	/**
+	 * 检查VUE权限URL
+	 * @return
+	 */
+	@ApiOperation(value = "检查VUE权限URL", notes = "检查VUE权限URL")
+	@PostMapping("/checkURLUnique")
+	@ResponseBody
+	public int checkURLUnique(TvuePermission tsysPermission){
+		int b= vuePermissionService.checkURLUnique(tsysPermission);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	/**
+	 * 检查VUE权限perms字段
+	 * @return
+	 */
+	@ApiOperation(value = "检查VUE权限perms字段", notes = "检查VUE权限perms字段")
+	@PostMapping("/checkPermsUnique")
+	@ResponseBody
+	public int checkPermsUnique(TvuePermission tsysPermission){
+		int b= vuePermissionService.checkPermsUnique(tsysPermission);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	/**
+	 * 修改VUE权限
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{roleId}")
+    public String edit(@PathVariable("roleId") String id, ModelMap mmap)
+    {	
+		//获取自己的VUE权限信息
+		TvuePermission mytsysPermission = vuePermissionService.selectByPrimaryKey(id);
+		//获取父VUE权限信息
+		TvuePermission pattsysPermission = vuePermissionService.selectByPrimaryKey(mytsysPermission.getPid());
+        mmap.put("TvuePermission", mytsysPermission);
+        mmap.put("pattsysPermission", pattsysPermission);
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存VUE权限
+     */
+	//@Log(title = "修改保存VUE权限", action = "1")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("system:permissionvue:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(TvuePermission TvuePermission)
+    {
+        return toAjax(vuePermissionService.updateByPrimaryKey(TvuePermission));
+    }
+    
+    /**
+     * 获取所有的转换成bootstarp的VUE权限数据
+     * @return
+     */
+	@ApiOperation(value = "获取所有的转换成bootstarp的VUE权限数据", notes = "获取所有的转换成bootstarp的VUE权限数据")
+    @GetMapping("/getTreePerm")
+    @ResponseBody
+    public AjaxResult getbooBootstrapTreePerm(){
+    	
+    	return retobject(200, vuePermissionService.getbooBootstrapTreePerm(null));
+    }
+    
+    
+    /**
+     * 根据角色id获取bootstarp 所有打勾VUE权限
+     * @param roleId 角色id集合
+     * @return
+     */
+	@ApiOperation(value = "根据角色id获取bootstarp 所有打勾VUE权限", notes = "根据角色id获取bootstarp 所有打勾VUE权限")
+    @PostMapping("/getCheckPrem")
+    @ResponseBody
+    public AjaxResult getCheckPrem(String roleId){
+    	
+    	return retobject(200, vuePermissionService.getCheckPrem(roleId));
+    }
+    
+    
+    /**
+     * 跳转到菜单树页面
+     * @return
+     */
+	@ApiOperation(value = "跳转到菜单树页面", notes = "跳转到菜单树页面")
+    @GetMapping("/tree")
+    public String Tree(){
+    	 return prefix + "/tree";
+    }
+    
+    /**
+     * 获取菜单树
+     * @param pid 父id【没用到】
+     * @return
+     */
+	@ApiOperation(value = "获取菜单树", notes = "获取菜单树")
+    @PostMapping("/tree/{pid}")
+    @ResponseBody
+    public AjaxResult Tree(@PathVariable("pid") String pid){
+    	return retobject(200, vuePermissionService.getbooBootstrapTreePerm(null));
+    }
+    
+    
+}

+ 111 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/ProvinceLinkageController.java

@@ -0,0 +1,111 @@
+package com.gyee.frame.controller.admin;
+
+import java.util.List;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.model.auto.SysArea;
+import com.gyee.frame.model.auto.SysAreaExample;
+import com.gyee.frame.model.auto.SysCity;
+import com.gyee.frame.model.auto.SysCityExample;
+import com.gyee.frame.model.auto.SysProvinceExample;
+import com.gyee.frame.model.auto.SysStreet;
+import com.gyee.frame.model.auto.SysStreetExample;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysAreaService;
+import com.gyee.frame.service.SysCityService;
+import com.gyee.frame.service.SysProvinceService;
+import com.gyee.frame.service.SysStreetService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 省份联动controller
+ * @ClassName: ProvinceLinkageController
+ * @author gyee
+ * @date 2019-10-05 11:19
+ */
+@Api(value = "省份联动controller")
+@Controller
+@RequestMapping("/ProvinceLinkageController")
+public class ProvinceLinkageController  extends BaseController{
+	@Resource
+	private SysProvinceService sysProvinceService;
+	@Resource
+	private SysCityService sysCityService;
+	@Resource
+	private SysAreaService sysAreaService;
+	
+	@Resource
+	private SysStreetService sysStreetService;
+	
+	private String prefix = "admin/province";
+	
+	/**
+	 * 分页list页面
+	 * @param model
+	 * @param dictId
+	 * @return
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+    public String view(ModelMap model)
+    {	
+		String str="省份联动";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+		model.addAttribute("provinceList",sysProvinceService.selectByExample(new SysProvinceExample()));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * 市查询
+	 * @param pid
+	 * @return
+	 */
+	@ApiOperation(value = "市查询", notes = "市查询")
+	@GetMapping("/getCity")
+	@ResponseBody
+	public List<SysCity> getCity(String pid){
+		SysCityExample example=new SysCityExample();
+		example.createCriteria().andProvinceCodeEqualTo(pid);
+		return sysCityService.selectByExample(example);
+		
+	}
+	
+	/**
+	 * 区查询
+	 * @param pid
+	 * @return
+	 */
+	@ApiOperation(value = "区查询", notes = "区查询")
+	@GetMapping("/getArea")
+	@ResponseBody
+	public List<SysArea> getArea(String pid){
+		SysAreaExample example=new SysAreaExample();
+		example.createCriteria().andCityCodeEqualTo(pid);
+		return sysAreaService.selectByExample(example);
+		
+	}
+	
+	/**
+	 * 街道查询
+	 * @param pid
+	 * @return
+	 */
+	@ApiOperation(value = "街道查询", notes = "街道查询")
+	@GetMapping("/getStreet")
+	@ResponseBody
+	public List<SysStreet> getStreet(String pid){
+		SysStreetExample example=new SysStreetExample();
+		example.createCriteria().andAreaCodeEqualTo(pid);
+		return sysStreetService.selectByExample(example);
+		
+	}
+		
+	
+}

+ 42 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/QuartzController.java

@@ -0,0 +1,42 @@
+package com.gyee.frame.controller.admin;
+
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.model.custom.TitleVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+
+/**
+ * 定时任务表达式工具生成Controller
+ * @ClassName: QuartzController
+ * @author gyee
+ * @date 2019-11-20 22:44
+ */
+@Api(value = "定时任务工具类")
+@Controller
+@RequestMapping("/quartz")
+public class QuartzController extends BaseController{
+
+	private String prefix = "admin/quartz";
+
+	/**
+	 * 定时页面展示
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午3:45:53
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+    public String view(ModelMap model)
+    {	
+		String str="定时器";
+		setTitle(model, new TitleVo("表达式生成", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+}

+ 199 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/QuartzJobController.java

@@ -0,0 +1,199 @@
+package com.gyee.frame.controller.admin;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.quartz.SchedulerException;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.SysQuartzJob;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysQuartzJobService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 
+* @ClassName: QuartzJobController
+* @author Jan 橙寂
+* @date 2019-11-20 22:49
+ */
+@Api(value = "定时任务调度表")
+@Controller
+@RequestMapping("/SysQuartzJobController")
+public class QuartzJobController extends BaseController{
+	
+	private String prefix = "admin/sysQuartzJob";
+	@Resource
+	private SysQuartzJobService sysQuartzJobService;
+	
+	/**
+	 * 展示页面
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午3:55:01
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("gen:sysQuartzJob:view")
+    public String view(ModelMap model)
+    {	
+		String str="定时任务调度表";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	/**
+	 * 定时任务调度list
+	 * @param tablepar
+	 * @param searchText
+	 * @return
+	 */
+	//@Log(title = "定时任务调度表集合查询", action = "111")
+	@ApiOperation(value = "定时任务调度list", notes = "定时任务调度list")
+	@PostMapping("/list")
+	@RequiresPermissions("gen:sysQuartzJob:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<SysQuartzJob> page=sysQuartzJobService.list(tablepar,searchText) ; 
+		TableSplitResult<SysQuartzJob> result=new TableSplitResult<SysQuartzJob>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	/**
+	 * 新增跳转页面
+	 * @param modelMap
+	 * @return
+	 */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+        return prefix + "/add";
+    }
+	
+    /**
+     * 新增保存
+     * @param sysQuartzJob
+     * @return
+     * @author gyee
+     * @Date 2019年11月11日 下午4:00:08
+     */
+	//@Log(title = "定时任务调度表新增", action = "111")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("gen:sysQuartzJob:add")
+	@ResponseBody
+	public AjaxResult add(SysQuartzJob sysQuartzJob){
+		int b=sysQuartzJobService.insertSelective(sysQuartzJob);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "定时任务调度表删除", action = "111")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("gen:sysQuartzJob:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysQuartzJobService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(SysQuartzJob sysQuartzJob){
+		int b=sysQuartzJobService.checkNameUnique(sysQuartzJob);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") String id, ModelMap mmap)
+    {
+        mmap.put("SysQuartzJob", sysQuartzJobService.selectByPrimaryKey(id));
+
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存
+     */
+    //@Log(title = "定时任务调度表修改", action = "111")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("gen:sysQuartzJob:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(SysQuartzJob record)
+    {
+        return toAjax(sysQuartzJobService.updateByPrimaryKeySelective(record));
+    }
+
+    /**
+     * 任务调度状态修改
+     */
+	//@Log(title = "任务调度状态修改", action = "1")
+	@ApiOperation(value = "任务调度状态修改", notes = "任务调度状态修改")
+    @PostMapping("/changeStatus")
+    @ResponseBody
+    public AjaxResult changeStatus(SysQuartzJob job) throws SchedulerException
+    {
+    	SysQuartzJob newJob = sysQuartzJobService.selectByPrimaryKey(job.getId());
+        newJob.setStatus(job.getStatus());
+        return toAjax(sysQuartzJobService.changeStatus(newJob));
+    }
+    
+    /**
+     * 任务调度立即执行一次
+     */
+	//@Log(title = "任务调度立即执行一次", action = "1")
+	@ApiOperation(value = "任务调度立即执行一次", notes = "任务调度立即执行一次")
+    @PostMapping("/run")
+    @ResponseBody
+    public AjaxResult run(SysQuartzJob job) throws SchedulerException
+    {
+    	SysQuartzJob newJob = sysQuartzJobService.selectByPrimaryKey(job.getId());
+    	sysQuartzJobService.run(newJob);
+        return success();
+    }
+
+	
+}

+ 116 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/QuartzJobLogController.java

@@ -0,0 +1,116 @@
+package com.gyee.frame.controller.admin;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.SysQuartzJobLog;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysQuartzJobLogService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 定时任务日志Controller
+* @ClassName: QuartzJobLogController
+* @author gyee
+* @date 2019-11-20 22:51
+ */
+@Api(value = "定时任务调度日志表")
+@Controller
+@RequestMapping("/SysQuartzJobLogController")
+public class QuartzJobLogController extends BaseController{
+	
+	private String prefix = "admin/sysQuartzJobLog";
+	@Resource
+	private SysQuartzJobLogService sysQuartzJobLogService;
+	
+	/**
+	 * 展示跳转页面
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:01:13
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("gen:sysQuartzJobLog:view")
+    public String view(ModelMap model)
+    {	
+		String str="定时任务调度日志表";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * 定时任务调度日志list
+	 * @param tablepar
+	 * @param searchText
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:01:26
+	 */
+	//@Log(title = "定时任务调度日志表集合查询", action = "111")
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("gen:sysQuartzJobLog:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<SysQuartzJobLog> page=sysQuartzJobLogService.list(tablepar,searchText) ; 
+		TableSplitResult<SysQuartzJobLog> result=new TableSplitResult<SysQuartzJobLog>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	/**
+	 * 查看详情
+	 * @param modelMap
+	 * @return
+	 * @author gyee
+	 * @Date 2019年9月14日 下午11:50:42
+	 */
+	 @ApiOperation(value = "查看详情", notes = "查看详情")
+	 @GetMapping("/detail/{id}")
+     public String detail(@PathVariable("id") String id,ModelMap modelMap)
+     {
+		SysQuartzJobLog log= sysQuartzJobLogService.selectByPrimaryKey(id);
+		modelMap.put("SysQuartzJobLog", log);
+        return prefix + "/detail";
+     }
+	 
+
+	
+	/**
+	 * 定时任务日志删除
+	 * @param ids id集合
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月20日 下午10:51:52
+	 */
+	//@Log(title = "定时任务调度日志表删除", action = "111")
+	@ApiOperation(value = "定时任务日志删除", notes = "定时任务日志删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("gen:sysQuartzJobLog:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysQuartzJobLogService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+    
+    
+
+	
+}

+ 175 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/RoleController.java

@@ -0,0 +1,175 @@
+package com.gyee.frame.controller.admin;
+
+import javax.servlet.http.HttpServletRequest;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.TsysRole;
+import com.gyee.frame.model.custom.BootstrapTree;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.shiro.util.ShiroUtils;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+
+/**
+ * 角色Controller
+ * @author gyee
+ * @date: 2018年9月2日 下午8:08:21
+ */
+@Api(value = "用户角色")
+@Controller
+@RequestMapping("/RoleController")
+public class RoleController extends BaseController{
+	
+	
+	//跳转页面参数
+	private String prefix = "admin/role";
+	
+	/**
+	 * 展示页面
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:01:58
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("system:role:view")
+    public String view(ModelMap model)
+    {	
+		String str="角色";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * 角色列表
+	 * @param tablepar
+	 * @param searchText 搜索字符
+	 * @return
+	 */
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("system:user:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<TsysRole> page=sysRoleService.list(tablepar,searchText) ; 
+		TableSplitResult<TsysRole> result=new TableSplitResult<TsysRole>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	/**
+     * 新增角色
+     */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add()
+    {
+        return prefix + "/add";
+    }
+	
+	
+    /**
+     * 角色添加
+     * @param role
+     * @return
+     */
+	//@Log(title = "角色添加", action = "1")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("system:user:add")
+	@ResponseBody
+	public AjaxResult add(TsysRole role,String prem){
+		int b=sysRoleService.insertRoleAndPrem(role,prem);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除角色
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "删除角色", action = "1")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("system:user:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysRoleService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查角色
+	 * @param TsysRole
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(TsysRole tsysRole){
+		int b=sysRoleService.checkNameUnique(tsysRole);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改角色
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{roleId}")
+    public String edit(@PathVariable("roleId") String id, ModelMap mmap)
+    {
+        mmap.put("TsysRole", sysRoleService.selectByPrimaryKey(id));
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存角色
+     */
+	//@Log(title = "修改保存角色", action = "1")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("system:user:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(TsysRole tsysRole,String prem,HttpServletRequest request)
+    {
+    	int i=sysRoleService.updateRoleAndPrem(tsysRole,prem);
+    	if(i>0) {
+    		//大于0刷新权限
+    		ShiroUtils.clearCachedAuthorizationInfo();
+    		//获取菜单栏
+        	BootstrapTree bootstrapTree= sysPermissionService.getbooBootstrapTreePerm(ShiroUtils.getUserId());
+        	request.getSession().setAttribute("bootstrapTree", bootstrapTree);
+    	}
+		
+        return toAjax(i);
+    }
+}

+ 170 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/RoleVueController.java

@@ -0,0 +1,170 @@
+package com.gyee.frame.controller.admin;
+
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.TvueRole;
+import com.gyee.frame.model.custom.BootstrapTree;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.shiro.util.ShiroUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * 角色Controller
+ * @author gyee
+ * @date: 2018年9月2日 下午8:08:21
+ */
+@Api(value = "用户角色")
+@Controller
+@RequestMapping("/RoleVueController")
+public class RoleVueController extends BaseController{
+	
+	
+	//跳转页面参数
+	private String prefix = "admin/rolevue";
+	
+	/**
+	 * 展示页面
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:01:58
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("system:rolevue:view")
+    public String view(ModelMap model)
+    {	
+		String str="VUE角色";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * 角色列表
+	 * @param tablepar
+	 * @param searchText 搜索字符
+	 * @return
+	 */
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("system:rolevue:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<TvueRole> page=vueRoleService.list(tablepar,searchText) ; 
+		TableSplitResult<TvueRole> result=new TableSplitResult<TvueRole>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	/**
+     * 新增角色
+     */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add()
+    {
+        return prefix + "/add";
+    }
+	
+	
+    /**
+     * 角色添加
+     * @param rolevue
+     * @return
+     */
+	//@Log(title = "角色添加", action = "1")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("system:rolevue:add")
+	@ResponseBody
+	public AjaxResult add(TvueRole rolevue,String prem){
+		int b=vueRoleService.insertRoleAndPrem(rolevue,prem);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除角色
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "删除角色", action = "1")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("system:rolevue:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=vueRoleService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查角色
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(TvueRole tsysRole){
+		int b=vueRoleService.checkNameUnique(tsysRole);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改角色
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{roleId}")
+    public String edit(@PathVariable("roleId") String id, ModelMap mmap)
+    {
+        mmap.put("TvueRole", vueRoleService.selectByPrimaryKey(id));
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存角色
+     */
+	//@Log(title = "修改保存角色", action = "1")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("system:rolevue:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(TvueRole tsysRole,String prem,HttpServletRequest request)
+    {
+    	int i=vueRoleService.updateRoleAndPrem(tsysRole,prem);
+    	if(i>0) {
+    		//大于0刷新权限
+    		ShiroUtils.clearCachedAuthorizationInfo();
+    		//获取菜单栏
+        	BootstrapTree bootstrapTree= sysPermissionService.getbooBootstrapTreePerm(ShiroUtils.getUserId());
+        	request.getSession().setAttribute("bootstrapTree", bootstrapTree);
+    	}
+		
+        return toAjax(i);
+    }
+}

+ 47 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/ServiceController.java

@@ -0,0 +1,47 @@
+package com.gyee.frame.controller.admin;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.model.custom.Service;
+import com.gyee.frame.model.custom.TitleVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 服务器信息Controller
+ * @ClassName: ServiceController
+ * @author gyee
+ * @date 2019-06-23 00:55
+ * @version V1.0
+ */
+@Api(value = "服务器信息")
+@Controller
+@RequestMapping("/ServiceController")
+public class ServiceController extends BaseController{
+
+	//跳转页面参数
+	private String prefix = "admin/service";
+	
+	/**
+	 * 展示页面
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:04:03
+	 */
+	@ApiOperation(value = "展示页面", notes = "展示页面")
+	@GetMapping("/view")
+	@RequiresPermissions("system:service:view")
+    public String view(ModelMap model)
+    {	
+		
+		String str="服务器";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+		model.addAttribute("service", new Service());
+        return prefix + "/list";
+    }
+}

+ 46 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SwaggerController.java

@@ -0,0 +1,46 @@
+package com.gyee.frame.controller.admin;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.model.custom.TitleVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * SwaggerController
+ * @ClassName: SwaggerController
+ * @author gyee
+ * @date 2019-11-20 22:34
+ */
+@Api(value = "Api接口文档")
+@Controller
+@RequestMapping("/SwaggerController")
+public class SwaggerController  extends BaseController{
+
+	//跳转页面参数
+	private String prefix = "admin/swagger";
+	
+	/**
+	 * 展示页面
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:04:20
+	 */
+	@ApiOperation(value = "展示页面", notes = "展示页面")
+	@GetMapping("/view")
+	@RequiresPermissions("system:swagger:view")
+    public String view(ModelMap model)
+    {	
+		String str="API文档";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+
+	
+
+}

+ 174 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysAreaController.java

@@ -0,0 +1,174 @@
+package com.gyee.frame.controller.admin;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.SysArea;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysAreaService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 地区Controller
+ * @ClassName: SysAreaController
+ * @author gyee
+ * @date 2019-11-20 22:34
+ */
+@Api(value = "地区设置")
+@Controller
+@RequestMapping("/SysAreaController")
+public class SysAreaController extends BaseController{
+	
+	private String prefix = "admin/province/sysArea";
+	@Resource
+	private SysAreaService sysAreaService;
+	
+	/**
+	 * 地区页面展示
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:05:04
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("gen:sysArea:view")
+    public String view(ModelMap model)
+    {	
+		String str="地区设置";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * list集合
+	 * @param tablepar
+	 * @param searchText
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:04:53
+	 */
+	//@Log(title = "地区设置集合查询", action = "111")
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@PostMapping("/list")
+	@RequiresPermissions("gen:sysArea:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<SysArea> page=sysAreaService.list(tablepar,searchText) ; 
+		TableSplitResult<SysArea> result=new TableSplitResult<SysArea>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	/**
+     * 新增跳转
+     */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+        return prefix + "/add";
+    }
+	
+    /**
+     * 新增保存
+     * @param sysArea
+     * @return
+     * @author gyee
+     * @Date 2019年11月11日 下午4:04:41
+     */
+	//@Log(title = "地区设置新增", action = "111")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("gen:sysArea:add")
+	@ResponseBody
+	public AjaxResult add(SysArea sysArea){
+		int b=sysAreaService.insertSelective(sysArea);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 地区设置删除
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "地区设置删除", action = "111")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("gen:sysArea:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysAreaService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查
+	 * @param SysArea
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(SysArea sysArea){
+		int b=sysAreaService.checkNameUnique(sysArea);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") Integer id, ModelMap mmap)
+    {
+        mmap.put("SysArea", sysAreaService.selectByPrimaryKey(id));
+
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存
+     */
+    //@Log(title = "地区设置修改", action = "111")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("gen:sysArea:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(SysArea record)
+    {
+        return toAjax(sysAreaService.updateByPrimaryKeySelective(record));
+    }
+
+    
+    
+
+	
+}

+ 170 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysCityController.java

@@ -0,0 +1,170 @@
+package com.gyee.frame.controller.admin;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.SysCity;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysCityService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 城市Controller
+ * @ClassName: SysCityController
+ * @author gyee
+ * @date 2019-11-20 22:31
+ */
+@Api(value = "城市设置")
+@Controller
+@RequestMapping("/SysCityController")
+public class SysCityController extends BaseController{
+	
+	private String prefix = "admin/province/sysCity";
+	@Resource
+	private SysCityService sysCityService;
+	
+	/**
+	 * 城市设置展示跳转
+	 * 
+	 * @param model
+	 * @return
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("gen:sysCity:view")
+    public String view(ModelMap model)
+    {	
+		String str="城市设置";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * 城市设置list
+	 * @param tablepar
+	 * @param searchText
+	 * @return
+	 */
+	//@Log(title = "城市设置集合查询", action = "111")
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("gen:sysCity:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<SysCity> page=sysCityService.list(tablepar,searchText) ; 
+		TableSplitResult<SysCity> result=new TableSplitResult<SysCity>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	/**
+	 * 新增跳转
+	 * @param modelMap
+	 * @return
+	 */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+        return prefix + "/add";
+    }
+	/**
+	 * 新增保存
+	 * @param sysCity
+	 * @return
+	 */
+	//@Log(title = "城市设置新增", action = "111")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("gen:sysCity:add")
+	@ResponseBody
+	public AjaxResult add(SysCity sysCity){
+		int b=sysCityService.insertSelective(sysCity);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "城市设置删除", action = "111")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("gen:sysCity:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysCityService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(SysCity sysCity){
+		int b=sysCityService.checkNameUnique(sysCity);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") Integer id, ModelMap mmap)
+    {
+        mmap.put("SysCity", sysCityService.selectByPrimaryKey(id));
+
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存
+     */
+    //@Log(title = "城市设置修改", action = "111")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("gen:sysCity:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(SysCity record)
+    {
+        return toAjax(sysCityService.updateByPrimaryKeySelective(record));
+    }
+
+    
+    
+
+	
+}

+ 218 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysDepartmentController.java

@@ -0,0 +1,218 @@
+package com.gyee.frame.controller.admin;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.SysDepartment;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysDepartmentService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@Api(value = "部门表")
+@Controller
+@RequestMapping("/SysDepartmentController")
+public class SysDepartmentController extends BaseController{
+	
+	private String prefix = "admin/sysDepartment";
+	@Resource
+	private SysDepartmentService sysDepartmentService;
+	
+	/**
+	 * 分页跳转
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2020年4月18日 下午11:48:55
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("gen:sysDepartment:view")
+    public String view(ModelMap model)
+    {	
+		String str="部门表";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * 分页查询
+	 * @param tablepar
+	 * @param searchText
+	 * @return
+	 * @author gyee
+	 * @Date 2020年4月18日 下午11:48:34
+	 */
+	//@Log(title = "部门表集合查询", action = "111")
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("gen:sysDepartment:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<SysDepartment> page=sysDepartmentService.list(tablepar,searchText) ; 
+		TableSplitResult<SysDepartment> result=new TableSplitResult<SysDepartment>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	@ApiOperation(value = "分页查询2", notes = "分页查询2")
+	@PostMapping("/list2")
+	@ResponseBody
+	public Object list2(Tablepar tablepar,String searchText){
+		List<SysDepartment> page= sysDepartmentService.list2(searchText) ;
+		return  page;
+	}
+	
+	/**
+     * 新增
+     */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+        return prefix + "/add";
+    }
+	
+    /**
+     * 新增
+     * @param sysDepartment
+     * @return
+     * @author gyee
+     * @Date 2020年4月18日 下午11:47:51
+     */
+	//@Log(title = "部门表新增", action = "111")
+    @ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("gen:sysDepartment:add")
+	@ResponseBody
+	public AjaxResult add(SysDepartment sysDepartment){
+		int b=sysDepartmentService.insertSelective(sysDepartment);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "部门表删除", action = "111")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("gen:sysDepartment:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysDepartmentService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查用户
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(SysDepartment sysDepartment){
+		int b=sysDepartmentService.checkNameUnique(sysDepartment);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") String id, ModelMap mmap)
+    {
+		//获取自己的权限信息
+		SysDepartment mytsysPermission = sysDepartmentService.selectByPrimaryKey(id);
+		//获取父权限信息
+		SysDepartment department = sysDepartmentService.selectByPrimaryKey(mytsysPermission.getParentId());
+		if(department==null) {
+			department=new SysDepartment(1, "", "顶级菜单", "", "", "", 0, 1, 1);
+		}
+        mmap.put("SysDepartment", mytsysPermission);
+        mmap.put("perSysDepartment", department);
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存
+     */
+    //@Log(title = "部门表修改", action = "111")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("gen:sysDepartment:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(SysDepartment record)
+    {
+        return toAjax(sysDepartmentService.updateByPrimaryKeySelective(record));
+    }
+
+    
+    /**
+   	 * 根据主键查询
+   	 * 
+   	 * @param id
+   	 * @param mmap
+   	 * @return
+   	 */
+   	@PostMapping("/get/{id}")
+   	@ApiOperation(value = "根据id查询唯一", notes = "根据id查询唯一")
+   	public SysDepartment edit(@PathVariable("id") String id) {
+   		return sysDepartmentService.selectByPrimaryKey(id);
+   	}
+    
+   	
+   	/**
+     * 跳转到菜单树页面
+     * @return
+     */
+   	@ApiOperation(value = "跳转到菜单树页面", notes = "跳转到菜单树页面")
+    @GetMapping("/tree")
+    public String Tree(){
+    	 return prefix + "/tree";
+    }
+    
+    /**
+     * 获取菜单树
+     * @param pid 父id【没用到】
+     * @return
+     */
+    @ApiOperation(value = "获取菜单树", notes = "获取菜单树")
+    @PostMapping("/tree/{pid}")
+    @ResponseBody
+    public AjaxResult Tree(@PathVariable("pid") String pid){
+    	return retobject(200, sysDepartmentService.getbooBootstrapTreePerm());
+    }
+
+	
+}

+ 195 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysInterUrlController.java

@@ -0,0 +1,195 @@
+package com.gyee.frame.controller.admin;
+
+
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.SysInterUrl;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.service.SysInterUrlService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+@Api(value = "拦截url表")
+@Controller
+@RequestMapping("/SysInterUrlController")
+public class SysInterUrlController extends BaseController {
+	
+	private final String prefix = "admin/sysInterUrl";
+	@Autowired
+	private SysInterUrlService sysInterUrlService;
+	
+	/**
+	 * 分页跳转
+	 * @param model
+	 * @return
+	 * @author fuce
+	 * @Date 2020年4月18日 下午11:43:33
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("gen:sysInterUrl:view")
+    public String view(ModelMap model)
+    {
+		return prefix + "/list";
+    }
+	
+	/**
+	 * 分页查询
+	 * @param tablepar
+	 * @param searchText
+	 * @return
+	 * @author fuce
+	 * @Date 2020年4月18日 下午11:43:42
+	 */
+	//@Log(title = "拦截url表集合查询", action = "111")
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("gen:sysInterUrl:list")
+	@ResponseBody
+    public Object list(Tablepar tablepar,String searchText) {
+        PageInfo<SysInterUrl> page = sysInterUrlService.list(tablepar, searchText);
+        TableSplitResult<SysInterUrl> result = new TableSplitResult<SysInterUrl>(page.getPageNum(), page.getTotal(), page.getList());
+        return result;
+    }
+	/**
+     * 新增跳转
+     */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+        return prefix + "/add";
+    }
+	
+	/**
+	 * 新增
+	 * @param sysInterUrl
+	 * @return
+	 * @author fuce
+	 * @Date 2020年4月18日 下午11:44:30
+	 */
+	//@Log(title = "拦截url表新增", action = "1")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("gen:sysInterUrl:add")
+	@ResponseBody
+	public AjaxResult add(SysInterUrl sysInterUrl){
+		int b=sysInterUrlService.insertSelective(sysInterUrl);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 复制
+	 * @param id
+	 * @return
+	 * @author fuce
+	 * @Date 2020年4月18日 下午11:44:42
+	 */
+	//@Log(title = "复制", action = "1")
+	@ApiOperation(value = "复制", notes = "复制")
+	@GetMapping("/copy/{id}")
+	@RequiresPermissions("gen:sysInterUrl:add")
+	@ResponseBody
+	public AjaxResult copy(@PathVariable("id") String id){
+		SysInterUrl sysInterUrl= sysInterUrlService.selectByPrimaryKey(id);
+		sysInterUrl.setInterName(sysInterUrl.getInterName()+"复制");
+		int b=sysInterUrlService.insertSelective(sysInterUrl);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	
+	/**
+	 * 删除用户
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "拦截url表删除", action = "111")
+	@ApiOperation(value = "删除", notes = "删除")
+    @PostMapping("/remove")
+	@RequiresPermissions("gen:sysInterUrl:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysInterUrlService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查用户
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(SysInterUrl sysInterUrl){
+		int b=sysInterUrlService.checkNameUnique(sysInterUrl);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") String id, ModelMap mmap)
+    {
+        mmap.put("SysInterUrl", sysInterUrlService.selectByPrimaryKey(id));
+
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存
+     */
+    //@Log(title = "拦截url表修改", action = "1")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("gen:sysInterUrl:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(SysInterUrl record)
+    {
+        return toAjax(sysInterUrlService.updateByPrimaryKeySelective(record));
+    }
+
+    
+    /**
+   	 * 根据主键查询
+   	 * 
+   	 * @param id
+   	 * @return
+   	 */
+   	@PostMapping("/get/{id}")
+   	@ApiOperation(value = "根据id查询唯一", notes = "根据id查询唯一")
+   	public SysInterUrl edit(@PathVariable("id") String id) {
+   		return sysInterUrlService.selectByPrimaryKey(id);
+   	}
+    
+
+	
+}

+ 231 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysNoticeController.java

@@ -0,0 +1,231 @@
+ package com.gyee.frame.controller.admin;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.SysNotice;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysNoticeService;
+import com.gyee.frame.shiro.util.ShiroUtils;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 公告Controller
+ * @ClassName: SysNoticeController
+ * @author gyee
+ * @date 2019-11-20 22:31
+ */
+@Api(value = "公告")
+@Controller
+@RequestMapping("/SysNoticeController")
+public class SysNoticeController extends BaseController{
+	
+	private String prefix = "admin/sysNotice";
+	@Resource
+	private SysNoticeService sysNoticeService;
+	
+	
+	/**
+	 * 展示页面跳转
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:09:24
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("gen:sysNotice:view")
+    public String view(ModelMap model)
+    {	
+		String str="公告";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	/**
+	 * list页面
+	 * @param tablepar
+	 * @param searchText
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:09:35
+	 */
+	//@Log(title = "公告集合查询", action = "111")
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("gen:sysNotice:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<SysNotice> page=sysNoticeService.list(tablepar,searchText) ; 
+		TableSplitResult<SysNotice> result=new TableSplitResult<SysNotice>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	
+	/**
+	 * 对应的用户的展示页面
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:09:42
+	 */
+	@ApiOperation(value = "对应的用户的展示页面", notes = "对应的用户的展示页面")
+	@GetMapping("/viewUser")
+    public String viewUser(ModelMap model)
+    {	
+		String str="公告";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list_view";
+    }
+	/**
+	 * 根据公告id查询跳转到公告详情页面
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "table根据公告id查询跳转到公告详情页面", notes = "table根据公告id查询跳转到公告详情页面")
+	@PostMapping("/viewUserlist")
+	@ResponseBody
+    public Object viewUserlist(Tablepar tablepar,String searchText)
+    {
+        
+		PageInfo<SysNotice> page=sysNoticeService.list(ShiroUtils.getUser(), tablepar, searchText);
+		TableSplitResult<SysNotice> result=new TableSplitResult<SysNotice>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+    }
+	
+	/**
+	 * 新增跳转
+	 * @param modelMap
+	 * @return
+	 */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+        return prefix + "/add";
+    }
+	/**
+	 * 新增保存
+	 * @param sysNotice
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:07:09
+	 */
+	//@Log(title = "公告新增", action = "111")
+    @ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("gen:sysNotice:add")
+	@ResponseBody
+	public AjaxResult add(SysNotice sysNotice){
+		int b=sysNoticeService.insertSelective(sysNotice);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除
+	 * @param ids
+	 * @return
+	 **/
+	//@Log(title = "公告删除", action = "111")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("gen:sysNotice:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysNoticeService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(SysNotice sysNotice){
+		int b=sysNoticeService.checkNameUnique(sysNotice);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	/**
+	 * 根据公告id查询跳转到公告详情页面
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	//@Log(title = "字典数据表删除", action = "1")
+	@ApiOperation(value = "根据公告id查询跳转到公告详情页面", notes = " 根据公告id查询跳转到公告详情页面")
+	@GetMapping("/viewinfo/{id}")
+    public String viewinfo(@PathVariable("id") String id,ModelMap mmap)
+    {
+        
+		String str="公告";
+		setTitle(mmap, new TitleVo("详情", str+"列表", true,"欢迎进入"+str+"详情页面", true, false));
+		SysNotice notice= sysNoticeService.selectByPrimaryKey(id);
+		mmap.addAttribute("notice", notice);
+		//把推送给该用户的公告设置为已读
+		sysNoticeService.editUserState(id);
+        return prefix + "/view";
+    }
+	
+	
+	/**
+	 * 修改跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") String id, ModelMap mmap)
+    {
+        mmap.put("SysNotice", sysNoticeService.selectByPrimaryKey(id));
+
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存
+     */
+    //@Log(title = "公告修改", action = "111")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("gen:sysNotice:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(SysNotice record)
+    {
+        return toAjax(sysNoticeService.updateByPrimaryKeySelective(record));
+    }
+
+    
+    
+
+	
+}

+ 167 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysPositionController.java

@@ -0,0 +1,167 @@
+package com.gyee.frame.controller.admin;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.SysPosition;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysPositionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@Controller
+@RequestMapping("/SysPositionController")
+@Api(value = "岗位表")
+public class SysPositionController extends BaseController{
+	
+	private String prefix = "admin/sysPosition";
+	@Resource
+	private SysPositionService sysPositionService;
+	
+	/**
+	 * list展示
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("gen:sysPosition:view")
+    public String view(ModelMap model)
+    {	
+		String str="岗位表";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * 分页集合
+	 */
+	//@Log(title = "岗位表集合查询", action = "111")
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("gen:sysPosition:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<SysPosition> page=sysPositionService.list(tablepar,searchText) ; 
+		TableSplitResult<SysPosition> result=new TableSplitResult<SysPosition>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	/**
+     * 新增跳转
+     */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+        return prefix + "/add";
+    }
+	
+    /**
+     * 新增
+     */
+	//@Log(title = "岗位表新增", action = "111")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("add")
+	@RequiresPermissions("gen:sysPosition:add")
+	@ResponseBody
+	public AjaxResult add(SysPosition sysPosition){
+		int b=sysPositionService.insertSelective(sysPosition);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除用户
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "岗位表删除", action = "111")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("gen:sysPosition:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysPositionService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查用户
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(SysPosition sysPosition){
+		int b=sysPositionService.checkNameUnique(sysPosition);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") String id, ModelMap mmap)
+    {
+        mmap.put("SysPosition", sysPositionService.selectByPrimaryKey(id));
+
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存
+     */
+    //@Log(title = "岗位表修改", action = "111")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("gen:sysPosition:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(SysPosition record)
+    {
+        return toAjax(sysPositionService.updateByPrimaryKeySelective(record));
+    }
+
+    
+    /**
+   	 * 根据主键查询
+   	 * 
+   	 * @param id
+   	 * @param mmap
+   	 * @return
+   	 */
+   	@PostMapping("/get/{id}")
+   	@ApiOperation(value = "根据id查询唯一", notes = "根据id查询唯一")
+   	public SysPosition edit(@PathVariable("id") String id) {
+   		return sysPositionService.selectByPrimaryKey(id);
+   	}
+    
+
+	
+}

+ 175 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysProvinceController.java

@@ -0,0 +1,175 @@
+package com.gyee.frame.controller.admin;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.SysProvince;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysProvinceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 省份Controller
+ * @ClassName: SysProvinceController
+ * @author gyee
+ * @date 2019-11-20 22:32
+ */
+@Api(value = "省份表")
+@Controller
+@RequestMapping("/SysProvinceController")
+public class SysProvinceController extends BaseController{
+	
+	private String prefix = "admin/province/sysProvince";
+	@Resource
+	private SysProvinceService sysProvinceService;
+	/**
+	 * 展示页面跳转
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:10:48
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("gen:sysProvince:view")
+    public String view(ModelMap model)
+    {	
+		String str="省份表";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	/**
+	 *list查询
+	 * @param tablepar
+	 * @param searchText
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:10:39
+	 */
+	//@Log(title = "省份表集合查询", action = "111")
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("gen:sysProvince:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<SysProvince> page=sysProvinceService.list(tablepar,searchText) ; 
+		TableSplitResult<SysProvince> result=new TableSplitResult<SysProvince>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	/**
+	 * 新增跳转
+	 * @param modelMap
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:10:20
+	 */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+        return prefix + "/add";
+    }
+    
+	/**
+	 * 新增保存
+	 * @param sysProvince
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:10:26
+	 */
+	//@Log(title = "省份表新增", action = "111")
+    @ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("gen:sysProvince:add")
+	@ResponseBody
+	public AjaxResult add(SysProvince sysProvince){
+		int b=sysProvinceService.insertSelective(sysProvince);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "省份表删除", action = "111")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("gen:sysProvince:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysProvinceService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(SysProvince sysProvince){
+		int b=sysProvinceService.checkNameUnique(sysProvince);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") Integer id, ModelMap mmap)
+    {
+        mmap.put("SysProvince", sysProvinceService.selectByPrimaryKey(id));
+
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存
+     */
+    //@Log(title = "省份表修改", action = "111")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("gen:sysProvince:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(SysProvince record)
+    {
+        return toAjax(sysProvinceService.updateByPrimaryKeySelective(record));
+    }
+
+    
+    
+
+	
+}

+ 173 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/SysStreetController.java

@@ -0,0 +1,173 @@
+package com.gyee.frame.controller.admin;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.auto.SysStreet;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysStreetService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 街道Controller
+ * @ClassName: SysStreetController
+ * @author gyee
+ * @date 2019-11-20 22:32
+ */
+@Api(value = "街道设置")
+@Controller
+@RequestMapping("/SysStreetController")
+public class SysStreetController extends BaseController{
+	
+	private String prefix = "admin/province/sysStreet";
+	@Resource
+	private SysStreetService sysStreetService;
+	
+	/**
+	 * 展示跳转
+	 * @param model
+	 * @return
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("gen:sysStreet:view")
+    public String view(ModelMap model)
+    {	
+		String str="街道设置";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	/**
+	 * list查询
+	 * @param tablepar
+	 * @param searchText
+	 * @return
+	 */
+	//@Log(title = "街道设置集合查询", action = "111")
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("gen:sysStreet:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<SysStreet> page=sysStreetService.list(tablepar,searchText) ; 
+		TableSplitResult<SysStreet> result=new TableSplitResult<SysStreet>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	
+	/**
+	 * 新增跳转
+	 * @param modelMap
+	 * @return
+	 */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+        return prefix + "/add";
+    }
+	
+    /**
+     * 新增保存
+     * @param sysStreet
+     * @return
+     * @author gyee
+     * @Date 2019年11月11日 下午4:13:37
+     */
+	//@Log(title = "街道设置新增", action = "111")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("gen:sysStreet:add")
+	@ResponseBody
+	public AjaxResult add(SysStreet sysStreet){
+		int b=sysStreetService.insertSelective(sysStreet);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "街道设置删除", action = "111")
+	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("gen:sysStreet:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysStreetService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkNameUnique")
+	@ResponseBody
+	public int checkNameUnique(SysStreet sysStreet){
+		int b=sysStreetService.checkNameUnique(sysStreet);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") String id, ModelMap mmap)
+    {
+        mmap.put("SysStreet", sysStreetService.selectByPrimaryKey(id));
+
+        return prefix + "/edit";
+    }
+	/**
+	 * 修改保存
+	 * @param record
+	 * @return
+	 */
+    //@Log(title = "街道设置修改", action = "111")
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @RequiresPermissions("gen:sysStreet:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(SysStreet record)
+    {
+        return toAjax(sysStreetService.updateByPrimaryKeySelective(record));
+    }
+
+    
+    
+
+	
+}

+ 39 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/TestController.java

@@ -0,0 +1,39 @@
+package com.gyee.frame.controller.admin;
+
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.model.auto.SysArea;
+import com.gyee.frame.model.auto.SysAreaExample;
+import com.gyee.frame.model.auto.SysCity;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.service.SysAreaService;
+import com.gyee.frame.service.SysCityService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+@Api(value = "区域")
+@Controller
+@RequestMapping("/gyee-query/area")
+public class TestController {
+    @Resource
+    private SysAreaService sysAreaService;
+
+    @ApiOperation(value = "列表", notes = "区域列表")
+    @GetMapping("/list")
+    @ResponseBody
+    public Object list(Tablepar tablepar, String searchText){
+
+        SysAreaExample testExample=new SysAreaExample();
+        List<SysArea> result=sysAreaService.selectByExample(testExample);
+        return  result;
+    }
+}

+ 39 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/ToolController.java

@@ -0,0 +1,39 @@
+package com.gyee.frame.controller.admin;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.model.custom.TitleVo;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 表单构建Controller
+ * @ClassName: ToolController
+ * @author gyee
+ * @date 2019-11-20 22:32
+ */
+@Api(value = "表单构建工具类")
+@Controller
+@RequestMapping("/ToolController")
+public class ToolController  extends BaseController{
+
+	//跳转页面参数
+	private String prefix = "admin/tool";
+	
+	
+	@ApiOperation(value = "表单构建工具类", notes = "表单构建工具类")
+	@GetMapping("/view")
+    public String view(ModelMap model)
+    {	
+		
+		String str="工具";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+			
+}

+ 83 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/UeditorController.java

@@ -0,0 +1,83 @@
+package com.gyee.frame.controller.admin;
+
+import java.io.IOException;
+import javax.servlet.http.HttpServletRequest;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.model.auto.TsysDatas;
+import com.gyee.frame.model.custom.PublicMsg;
+import com.gyee.frame.model.custom.Ueditor;
+import com.gyee.frame.service.UeditorService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 百度Controller
+ * 
+ * @ClassName: UeditorController
+ * @author gyee
+ * @date 2019-11-20 22:34
+ */
+@Api(value = "百度编辑器")
+@Controller
+@RequestMapping("/UeditorController")
+public class UeditorController extends BaseController {
+	@Resource
+	private UeditorService ueditorService;
+
+	@ApiOperation(value = "百度编辑器配置", notes = "百度编辑器配置")
+	@RequestMapping("/ueditor")
+	@ResponseBody
+	public Object ueditor(HttpServletRequest request, String action, MultipartFile upfile) {
+		if ("config".equals(action)) {
+			return PublicMsg.UEDITOR_CONFIG;
+		}
+		if ("uploadimage".equals(action) || "uploadvideo".equals(action) ) {// 图片-视频(音频)上传
+
+			try {
+				// 添加文件到本地
+				TsysDatas tsysDatas = ueditorService.fileDataByinsert(upfile);
+				// 添加文件信息
+				ueditorService.fileInfoByininsert(tsysDatas.getId());
+				String url2 = request.getScheme() + "://" + request.getServerName() + ":" + request.getLocalPort()
+						+ request.getContextPath() + "/" + tsysDatas.getFilePath();
+				Ueditor ueditor = new Ueditor("SUCCESS", url2, "ssss", "");
+				return ueditor;
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+			return null;
+		}
+		return PublicMsg.UeditorMsg.ERROR.get();
+	}
+
+	// @Log(title = "图片上传", action = "1")
+	@ApiOperation(value = "图片上传", notes = "分页查询")
+	@RequestMapping(value = "/imgUpload")
+	@ResponseBody
+	public Ueditor imgUpload(MultipartFile upfile) {
+		Ueditor ueditor = new Ueditor();
+		return ueditor;
+	}
+
+	public String updateAvatar(MultipartFile file) {
+		try {
+			if (!file.isEmpty()) {
+				// 插入文件存储表
+				String id = sysDatasService.insertSelective(file);
+				if (id != null) {
+					return id;
+				}
+			}
+			return null;
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+}

+ 239 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/UserController.java

@@ -0,0 +1,239 @@
+package com.gyee.frame.controller.admin;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.common.log.Log;
+import com.gyee.frame.model.auto.SysDepartment;
+import com.gyee.frame.model.auto.SysDepartmentExample;
+import com.gyee.frame.model.auto.SysPosition;
+import com.gyee.frame.model.auto.SysPositionExample;
+import com.gyee.frame.model.auto.TsysRole;
+import com.gyee.frame.model.auto.TsysUser;
+import com.gyee.frame.model.custom.RoleVo;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysDepartmentService;
+import com.gyee.frame.service.SysPositionService;
+import com.github.pagehelper.PageInfo;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 用户Controller
+ * @ClassName: UserController
+ * @author gyee
+ * @date 2019-11-20 22:35
+ */
+@Api(value = "用户数据")
+@Controller
+@RequestMapping("/UserController")
+public class UserController extends BaseController{
+	
+	private String prefix = "admin/user";
+	//部门
+	@Resource
+	private SysDepartmentService departmentService;
+	//岗位
+	@Resource
+	private SysPositionService positionService;
+	
+	/**
+	 * 展示跳转页面
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:14:34
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("system:user:view")
+    public String view(ModelMap model)
+    {	
+		String str="用户";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	
+	/**
+	 * list集合
+	 * @param tablepar
+	 * @param searchText
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:14:40
+	 */
+	//@Log(title = "分页查询", action = "1")
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("system:user:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<TsysUser> page=sysUserService.list(tablepar,searchText) ; 
+		TableSplitResult<TsysUser> result=new TableSplitResult<TsysUser>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	/**
+	 * 新增跳转
+	 * @param modelMap
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:14:51
+	 */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+    	//添加角色列表
+		List<TsysRole> tsysRoleList=sysRoleService.queryList();
+		//部门列表
+		List<SysDepartment> departments=departmentService.selectByExample(new SysDepartmentExample());
+		//岗位列表
+		List<SysPosition> sysPositions=positionService.selectByExample(new SysPositionExample());
+		//角色
+		modelMap.put("tsysRoleList",tsysRoleList);
+		//部门
+		modelMap.put("departmentsList",departments);
+		//岗位
+		modelMap.put("sysPositionsList",sysPositions);
+        return prefix + "/add";
+    }
+	/**
+	 * 新增保存
+	 * @param user
+	 * @param model
+	 * @param roles
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:14:57
+	 */
+    @Log(title = "用户新增", action = "111")
+    @ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("system:user:add")
+	@ResponseBody
+	public AjaxResult add(TsysUser user,Model model,@RequestParam(value="roles", required = false)List<String> roles){
+		int b=sysUserService.insertUserRoles(user,roles);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除用户
+	 * @param ids
+	 * @return
+	 */
+    //@Log(title = "删除用户", action = "1")
+  	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("system:user:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=sysUserService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查用户
+	 * @param tsysUser
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkLoginNameUnique")
+	@ResponseBody
+	public int checkLoginNameUnique(TsysUser tsysUser){
+		int b=sysUserService.checkLoginNameUnique(tsysUser);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改用户跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") String id, ModelMap mmap)
+    {
+		//查询所有角色
+		List<RoleVo> roleVos=sysUserService.getUserIsRole(id);
+		//岗位列表
+		List<SysPosition> sysPositions=positionService.selectByExample(new SysPositionExample());
+		mmap.put("roleVos",roleVos);
+        mmap.put("TsysUser", sysUserService.selectByPrimaryKey(id));
+        //岗位
+        mmap.put("sysPositionsList",sysPositions);
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存用户
+     */
+	//@Log(title = "修改保存用户", action = "1")
+    @ApiOperation(value = "修改保存用户", notes = "修改保存用户")
+    @RequiresPermissions("system:user:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(TsysUser tsysUser,@RequestParam(value="roles", required = false)List<String> roles)
+    {
+        return toAjax(sysUserService.updateUserRoles(tsysUser,roles));
+    }
+
+    
+    
+    /**
+	 * 修改用户密码跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+    //@Log(title = "修改用户密码", action = "1")
+    @ApiOperation(value = "修改用户密码跳转", notes = "修改用户密码跳转")
+	@GetMapping("/editPwd/{id}")
+    public String editPwd(@PathVariable("id") String id, ModelMap mmap)
+    {
+        mmap.put("TsysUser", sysUserService.selectByPrimaryKey(id));
+        return prefix + "/editPwd";
+    }
+	/**
+     * 修改保存用户
+     */
+    //@Log(title = "修改用户密码", action = "1")
+    @ApiOperation(value = "修改用户密码", notes = "修改用户密码")
+    @RequiresPermissions("system:user:editPwd")
+    @PostMapping("/editPwd")
+    @ResponseBody
+    public AjaxResult editPwdSave(TsysUser tsysUser)
+    {
+        return toAjax(sysUserService.updateUserPassword(tsysUser));
+    }
+
+	
+}

+ 229 - 0
web/monitor-hb/src/main/java/com/gyee/frame/controller/admin/UserVueController.java

@@ -0,0 +1,229 @@
+package com.gyee.frame.controller.admin;
+
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseController;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.common.log.Log;
+import com.gyee.frame.model.auto.*;
+import com.gyee.frame.model.custom.RoleVo;
+import com.gyee.frame.model.custom.TableSplitResult;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.model.custom.TitleVo;
+import com.gyee.frame.service.SysDepartmentService;
+import com.gyee.frame.service.SysPositionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 用户Controller
+ * @ClassName: UserVueController
+ * @author gyee
+ * @date 2019-11-20 22:35
+ */
+@Api(value = "用户数据")
+@Controller
+@RequestMapping("/UserVueController")
+public class UserVueController extends BaseController{
+	
+	private String prefix = "admin/uservue";
+	//部门
+	@Resource
+	private SysDepartmentService departmentService;
+	//岗位
+	@Resource
+	private SysPositionService positionService;
+	
+	/**
+	 * 展示跳转页面
+	 * @param model
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:14:34
+	 */
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/view")
+	@RequiresPermissions("system:uservue:view")
+    public String view(ModelMap model)
+    {	
+		String str="VUE用户";
+		setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
+        return prefix + "/list";
+    }
+	
+	
+	/**
+	 * list集合
+	 * @param tablepar
+	 * @param searchText
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:14:40
+	 */
+	//@Log(title = "分页查询", action = "1")
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@PostMapping("/list")
+	@RequiresPermissions("system:uservue:list")
+	@ResponseBody
+	public Object list(Tablepar tablepar,String searchText){
+		PageInfo<TvueUser> page=vueUserService.list(tablepar,searchText) ; 
+		TableSplitResult<TvueUser> result=new TableSplitResult<TvueUser>(page.getPageNum(), page.getTotal(), page.getList()); 
+		return  result;
+	}
+	/**
+	 * 新增跳转
+	 * @param modelMap
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:14:51
+	 */
+	@ApiOperation(value = "新增跳转", notes = "新增跳转")
+    @GetMapping("/add")
+    public String add(ModelMap modelMap)
+    {
+    	//添加角色列表
+		List<TsysRole> tsysRoleList=sysRoleService.queryList();
+		//部门列表
+		List<SysDepartment> departments=departmentService.selectByExample(new SysDepartmentExample());
+		//岗位列表
+		List<SysPosition> sysPositions=positionService.selectByExample(new SysPositionExample());
+		//角色
+		modelMap.put("tsysRoleList",tsysRoleList);
+		//部门
+		modelMap.put("departmentsList",departments);
+		//岗位
+		modelMap.put("sysPositionsList",sysPositions);
+        return prefix + "/add";
+    }
+	/**
+	 * 新增保存
+	 * @param uservue
+	 * @param model
+	 * @param roles
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午4:14:57
+	 */
+    @Log(title = "用户新增", action = "111")
+    @ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/add")
+	@RequiresPermissions("system:uservue:add")
+	@ResponseBody
+	public AjaxResult add(TvueUser uservue,Model model,@RequestParam(value="roles", required = false)List<String> roles){
+		int b=vueUserService.insertUserVueRoles(uservue,roles);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 删除用户
+	 * @param ids
+	 * @return
+	 */
+    //@Log(title = "删除用户", action = "1")
+  	@ApiOperation(value = "删除", notes = "删除")
+	@PostMapping("/remove")
+	@RequiresPermissions("system:uservue:remove")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		int b=vueUserService.deleteByPrimaryKey(ids);
+		if(b>0){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	/**
+	 * 检查用户
+	 * @param tsysUserVue
+	 * @return
+	 */
+	@ApiOperation(value = "检查Name唯一", notes = "检查Name唯一")
+	@PostMapping("/checkLoginNameUnique")
+	@ResponseBody
+	public int checkLoginNameUnique(TvueUser tsysUserVue){
+		int b=vueUserService.checkLoginNameUnique(tsysUserVue);
+		if(b>0){
+			return 1;
+		}else{
+			return 0;
+		}
+	}
+	
+	
+	/**
+	 * 修改用户跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+	@ApiOperation(value = "修改跳转", notes = "修改跳转")
+	@GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") String id, ModelMap mmap)
+    {
+		//查询所有角色
+		List<RoleVo> roleVos=vueUserService.getUserVueIsRole(id);
+		//岗位列表
+		List<SysPosition> sysPositions=positionService.selectByExample(new SysPositionExample());
+		mmap.put("roleVos",roleVos);
+        mmap.put("TvueUser", vueUserService.selectByPrimaryKey(id));
+        //岗位
+        mmap.put("sysPositionsList",sysPositions);
+        return prefix + "/edit";
+    }
+	
+	/**
+     * 修改保存用户
+     */
+	//@Log(title = "修改保存用户", action = "1")
+    @ApiOperation(value = "修改保存用户", notes = "修改保存用户")
+    @RequiresPermissions("system:uservue:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(TvueUser tsysUserVue,@RequestParam(value="roles", required = false)List<String> roles)
+    {
+        return toAjax(vueUserService.updateUserVueRoles(tsysUserVue,roles));
+    }
+
+    
+    
+    /**
+	 * 修改用户密码跳转
+	 * @param id
+	 * @param mmap
+	 * @return
+	 */
+    //@Log(title = "修改用户密码", action = "1")
+    @ApiOperation(value = "修改用户密码跳转", notes = "修改用户密码跳转")
+	@GetMapping("/editPwd/{id}")
+    public String editPwd(@PathVariable("id") String id, ModelMap mmap)
+    {
+        mmap.put("TvueUser", vueUserService.selectByPrimaryKey(id));
+        return prefix + "/editPwd";
+    }
+	/**
+     * 修改保存用户
+     */
+    //@Log(title = "修改用户密码", action = "1")
+    @ApiOperation(value = "修改用户密码", notes = "修改用户密码")
+    @RequiresPermissions("system:uservue:editPwd")
+    @PostMapping("/editPwd")
+    @ResponseBody
+    public AjaxResult editPwdSave(TvueUser tsysUserVue)
+    {
+        return toAjax(vueUserService.updateUserVuePassword(tsysUserVue));
+    }
+
+	
+}

+ 0 - 96
web/monitor-hb/src/main/java/com/gyee/frame/mapper/auto/EarlywarningmainMapper.java.1

@@ -1,96 +0,0 @@
-package com.gyee.frame.mapper.auto;
-
-import com.gyee.frame.model.auto.Earlywarningmain;
-import com.gyee.frame.model.auto.EarlywarningmainExample;
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-
-public interface EarlywarningmainMapper {
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    long countByExample(EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int deleteByExample(EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int deleteByPrimaryKey(Short id);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int insert(Earlywarningmain record);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int insertSelective(Earlywarningmain record);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    List<Earlywarningmain> selectByExample(EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    Earlywarningmain selectByPrimaryKey(Short id);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByExampleSelective(@Param("record") Earlywarningmain record, @Param("example") EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByExample(@Param("record") Earlywarningmain record, @Param("example") EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByPrimaryKeySelective(Earlywarningmain record);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table FAILURESTATISTICSMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByPrimaryKey(Earlywarningmain record);
-}

+ 0 - 96
web/monitor-hb/src/main/java/com/gyee/frame/mapper/auto/EarlywarningmainMapper.java.2

@@ -1,96 +0,0 @@
-package com.gyee.frame.mapper.auto;
-
-import com.gyee.frame.model.auto.Earlywarningmain;
-import com.gyee.frame.model.auto.EarlywarningmainExample;
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-
-public interface EarlywarningmainMapper {
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    long countByExample(EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int deleteByExample(EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int deleteByPrimaryKey(Short id);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int insert(Earlywarningmain record);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int insertSelective(Earlywarningmain record);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    List<Earlywarningmain> selectByExample(EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    Earlywarningmain selectByPrimaryKey(Short id);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByExampleSelective(@Param("record") Earlywarningmain record, @Param("example") EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByExample(@Param("record") Earlywarningmain record, @Param("example") EarlywarningmainExample example);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByPrimaryKeySelective(Earlywarningmain record);
-
-    /**
-     * This method was generated by MyBatis Generator.
-     * This method corresponds to the database table EARLYWARNINGMAIN
-     *
-     * @mbg.generated
-     */
-    int updateByPrimaryKey(Earlywarningmain record);
-}

+ 40 - 0
web/monitor-hb/src/main/java/com/gyee/frame/mapper/auto/SysInterUrlMapper.java

@@ -0,0 +1,40 @@
+package com.gyee.frame.mapper.auto;
+
+
+import com.gyee.frame.model.auto.SysInterUrl;
+import com.gyee.frame.model.auto.SysInterUrlExample;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 拦截url表 SysInterUrlMapper
+ * @author fuce_自动生成
+ * @email 115889198@qq.com
+ * @date 2020-01-05 01:48:22
+ */
+public interface SysInterUrlMapper {
+      	   	      	      	      	      
+    long countByExample(SysInterUrlExample example);
+
+    int deleteByExample(SysInterUrlExample example);
+		
+    int deleteByPrimaryKey(String id);
+		
+    int insert(SysInterUrl record);
+
+    int insertSelective(SysInterUrl record);
+
+    List<SysInterUrl> selectByExample(SysInterUrlExample example);
+		
+    SysInterUrl selectByPrimaryKey(String id);
+		
+    int updateByExampleSelective(@Param("record") SysInterUrl record, @Param("example") SysInterUrlExample example);
+
+    int updateByExample(@Param("record") SysInterUrl record, @Param("example") SysInterUrlExample example); 
+		
+    int updateByPrimaryKeySelective(SysInterUrl record);
+
+    int updateByPrimaryKey(SysInterUrl record);
+  	  	
+}

+ 3 - 3
web/monitor-hb/src/main/java/com/gyee/frame/model/auto/Alertrule2.java

@@ -64,7 +64,7 @@ public class Alertrule2 implements Serializable {
      *
      * @mbg.generated
      */
-    private Integer enabled;
+    private Boolean enabled;
 
     /**
      *
@@ -325,7 +325,7 @@ public class Alertrule2 implements Serializable {
      *
      * @mbg.generated
      */
-    public Integer getEnabled() {
+    public Boolean getEnabled() {
         return enabled;
     }
 
@@ -337,7 +337,7 @@ public class Alertrule2 implements Serializable {
      *
      * @mbg.generated
      */
-    public void setEnabled(Integer enabled) {
+    public void setEnabled(Boolean enabled) {
         this.enabled = enabled;
     }
 

+ 10 - 10
web/monitor-hb/src/main/java/com/gyee/frame/model/auto/Alertrule2Example.java

@@ -624,52 +624,52 @@ public class Alertrule2Example {
             return (Criteria) this;
         }
 
-        public Criteria andEnabledEqualTo(Integer value) {
+        public Criteria andEnabledEqualTo(Boolean value) {
             addCriterion("ENABLED =", value, "enabled");
             return (Criteria) this;
         }
 
-        public Criteria andEnabledNotEqualTo(Integer value) {
+        public Criteria andEnabledNotEqualTo(Boolean value) {
             addCriterion("ENABLED <>", value, "enabled");
             return (Criteria) this;
         }
 
-        public Criteria andEnabledGreaterThan(Integer value) {
+        public Criteria andEnabledGreaterThan(Boolean value) {
             addCriterion("ENABLED >", value, "enabled");
             return (Criteria) this;
         }
 
-        public Criteria andEnabledGreaterThanOrEqualTo(Integer value) {
+        public Criteria andEnabledGreaterThanOrEqualTo(Boolean value) {
             addCriterion("ENABLED >=", value, "enabled");
             return (Criteria) this;
         }
 
-        public Criteria andEnabledLessThan(Integer value) {
+        public Criteria andEnabledLessThan(Boolean value) {
             addCriterion("ENABLED <", value, "enabled");
             return (Criteria) this;
         }
 
-        public Criteria andEnabledLessThanOrEqualTo(Integer value) {
+        public Criteria andEnabledLessThanOrEqualTo(Boolean value) {
             addCriterion("ENABLED <=", value, "enabled");
             return (Criteria) this;
         }
 
-        public Criteria andEnabledIn(List<Integer> values) {
+        public Criteria andEnabledIn(List<Boolean> values) {
             addCriterion("ENABLED in", values, "enabled");
             return (Criteria) this;
         }
 
-        public Criteria andEnabledNotIn(List<Integer> values) {
+        public Criteria andEnabledNotIn(List<Boolean> values) {
             addCriterion("ENABLED not in", values, "enabled");
             return (Criteria) this;
         }
 
-        public Criteria andEnabledBetween(Integer value1, Integer value2) {
+        public Criteria andEnabledBetween(Boolean value1, Boolean value2) {
             addCriterion("ENABLED between", value1, value2, "enabled");
             return (Criteria) this;
         }
 
-        public Criteria andEnabledNotBetween(Integer value1, Integer value2) {
+        public Criteria andEnabledNotBetween(Boolean value1, Boolean value2) {
             addCriterion("ENABLED not between", value1, value2, "enabled");
             return (Criteria) this;
         }

+ 87 - 0
web/monitor-hb/src/main/java/com/gyee/frame/model/auto/SysInterUrl.java

@@ -0,0 +1,87 @@
+package com.gyee.frame.model.auto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * 拦截url表 SysInterUrl 
+ * @author fuce_自动生成
+ * @email 115889198@qq.com
+ * @date 2020-01-05 01:48:22
+ */
+ @ApiModel(value="SysInterUrl", description="拦截url表")
+public class SysInterUrl implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+	
+		
+	/** 主键 **/
+	@ApiModelProperty(value = "主键")
+    private String id;
+		
+	/** 拦截名称 **/
+	@ApiModelProperty(value = "拦截名称")
+    private String interName;
+		
+	/** 拦截url **/
+	@ApiModelProperty(value = "拦截url")
+    private String url;
+		
+	/** 类型 **/
+	@ApiModelProperty(value = "类型")
+    private Integer type;
+		
+		
+	public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+	 
+			
+	public String getInterName() {
+        return interName;
+    }
+
+    public void setInterName(String interName) {
+        this.interName = interName;
+    }
+	 
+			
+	public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+	 
+			
+	public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+	 
+			
+	public SysInterUrl() {
+        super();
+    }
+    
+																						
+	public SysInterUrl(String id,String interName,String url,Integer type) {
+	
+		this.id = id;
+		this.interName = interName;
+		this.url = url;
+		this.type = type;
+		
+	}
+	
+}

+ 491 - 0
web/monitor-hb/src/main/java/com/gyee/frame/model/auto/SysInterUrlExample.java

@@ -0,0 +1,491 @@
+package com.gyee.frame.model.auto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 拦截url表 SysInterUrlExample
+ * @author fuce_自动生成
+ * @email 115889198@qq.com
+ * @date 2020-01-05 01:48:22
+ */
+public class SysInterUrlExample {
+
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public SysInterUrlExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+				
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(String value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(String value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(String value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(String value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(String value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(String value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLike(String value) {
+            addCriterion("id like", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotLike(String value) {
+            addCriterion("id not like", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<String> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<String> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(String value1, String value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(String value1, String value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+        
+			
+        public Criteria andInterNameIsNull() {
+            addCriterion("inter_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameIsNotNull() {
+            addCriterion("inter_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameEqualTo(String value) {
+            addCriterion("inter_name =", value, "interName");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameNotEqualTo(String value) {
+            addCriterion("inter_name <>", value, "interName");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameGreaterThan(String value) {
+            addCriterion("inter_name >", value, "interName");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameGreaterThanOrEqualTo(String value) {
+            addCriterion("inter_name >=", value, "interName");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameLessThan(String value) {
+            addCriterion("inter_name <", value, "interName");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameLessThanOrEqualTo(String value) {
+            addCriterion("inter_name <=", value, "interName");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameLike(String value) {
+            addCriterion("inter_name like", value, "interName");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameNotLike(String value) {
+            addCriterion("inter_name not like", value, "interName");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameIn(List<String> values) {
+            addCriterion("inter_name in", values, "interName");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameNotIn(List<String> values) {
+            addCriterion("inter_name not in", values, "interName");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameBetween(String value1, String value2) {
+            addCriterion("inter_name between", value1, value2, "interName");
+            return (Criteria) this;
+        }
+
+        public Criteria andInterNameNotBetween(String value1, String value2) {
+            addCriterion("inter_name not between", value1, value2, "interName");
+            return (Criteria) this;
+        }
+        
+			
+        public Criteria andUrlIsNull() {
+            addCriterion("url is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlIsNotNull() {
+            addCriterion("url is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlEqualTo(String value) {
+            addCriterion("url =", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlNotEqualTo(String value) {
+            addCriterion("url <>", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlGreaterThan(String value) {
+            addCriterion("url >", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlGreaterThanOrEqualTo(String value) {
+            addCriterion("url >=", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlLessThan(String value) {
+            addCriterion("url <", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlLessThanOrEqualTo(String value) {
+            addCriterion("url <=", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlLike(String value) {
+            addCriterion("url like", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlNotLike(String value) {
+            addCriterion("url not like", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlIn(List<String> values) {
+            addCriterion("url in", values, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlNotIn(List<String> values) {
+            addCriterion("url not in", values, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlBetween(String value1, String value2) {
+            addCriterion("url between", value1, value2, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlNotBetween(String value1, String value2) {
+            addCriterion("url not between", value1, value2, "url");
+            return (Criteria) this;
+        }
+        
+			
+        public Criteria andTypeIsNull() {
+            addCriterion("type is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeIsNotNull() {
+            addCriterion("type is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeEqualTo(Integer value) {
+            addCriterion("type =", value, "type");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeNotEqualTo(Integer value) {
+            addCriterion("type <>", value, "type");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeGreaterThan(Integer value) {
+            addCriterion("type >", value, "type");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("type >=", value, "type");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeLessThan(Integer value) {
+            addCriterion("type <", value, "type");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeLessThanOrEqualTo(Integer value) {
+            addCriterion("type <=", value, "type");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeLike(Integer value) {
+            addCriterion("type like", value, "type");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeNotLike(Integer value) {
+            addCriterion("type not like", value, "type");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeIn(List<Integer> values) {
+            addCriterion("type in", values, "type");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeNotIn(List<Integer> values) {
+            addCriterion("type not in", values, "type");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeBetween(Integer value1, Integer value2) {
+            addCriterion("type between", value1, value2, "type");
+            return (Criteria) this;
+        }
+
+        public Criteria andTypeNotBetween(Integer value1, Integer value2) {
+            addCriterion("type not between", value1, value2, "type");
+            return (Criteria) this;
+        }
+        
+	}
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 137 - 0
web/monitor-hb/src/main/java/com/gyee/frame/service/SysInterUrlService.java

@@ -0,0 +1,137 @@
+package com.gyee.frame.service;
+
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.gyee.frame.common.base.BaseService;
+import com.gyee.frame.common.support.ConvertUtil;
+import com.gyee.frame.mapper.auto.SysInterUrlMapper;
+import com.gyee.frame.model.auto.SysInterUrl;
+import com.gyee.frame.model.auto.SysInterUrlExample;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.util.SnowflakeIdWorker;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 拦截url表 SysInterUrlService
+ * @Title: SysInterUrlService.java
+ * @Package com.fc.v2.service
+ * @author fuce_自动生成
+ * @email 115889198@qq.com
+ * @date 2020-01-05 01:48:22
+ **/
+@Service
+public class SysInterUrlService implements BaseService<SysInterUrl, SysInterUrlExample> {
+	@Autowired
+	private SysInterUrlMapper sysInterUrlMapper;
+	
+      	   	      	      	      	      	
+	/**
+	 * 分页查询
+	 * @param pageNum
+	 * @param pageSize
+	 * @return
+	 */
+	 public PageInfo<SysInterUrl> list(Tablepar tablepar, String name){
+	        SysInterUrlExample testExample=new SysInterUrlExample();
+	        testExample.setOrderByClause("id ASC");
+	        if(name!=null&&!"".equals(name)){
+	        	testExample.createCriteria().andInterNameLike("%"+name+"%");
+	        }
+
+	        PageHelper.startPage(tablepar.getPageNum(), tablepar.getPageSize());
+	        List<SysInterUrl> list= sysInterUrlMapper.selectByExample(testExample);
+	        PageInfo<SysInterUrl> pageInfo = new PageInfo<SysInterUrl>(list);
+	        return  pageInfo;
+	 }
+
+	@Override
+	public int deleteByPrimaryKey(String ids) {
+				
+			List<String> lista= ConvertUtil.toListStrArray(ids);
+			SysInterUrlExample example=new SysInterUrlExample();
+			example.createCriteria().andIdIn(lista);
+			return sysInterUrlMapper.deleteByExample(example);
+			
+				
+	}
+	
+	
+	@Override
+	public SysInterUrl selectByPrimaryKey(String id) {
+				
+			return sysInterUrlMapper.selectByPrimaryKey(id);
+				
+	}
+
+	
+	@Override
+	public int updateByPrimaryKeySelective(SysInterUrl record) {
+		return sysInterUrlMapper.updateByPrimaryKeySelective(record);
+	}
+	
+	
+	/**
+	 * 添加
+	 */
+	@Override
+	public int insertSelective(SysInterUrl record) {
+				
+		//添加雪花主键id
+		record.setId(SnowflakeIdWorker.getUUID());
+			
+				
+		return sysInterUrlMapper.insertSelective(record);
+	}
+	
+	
+	@Override
+	public int updateByExampleSelective(SysInterUrl record, SysInterUrlExample example) {
+		
+		return sysInterUrlMapper.updateByExampleSelective(record, example);
+	}
+
+	
+	@Override
+	public int updateByExample(SysInterUrl record, SysInterUrlExample example) {
+		
+		return sysInterUrlMapper.updateByExample(record, example);
+	}
+
+	@Override
+	public List<SysInterUrl> selectByExample(SysInterUrlExample example) {
+		
+		return sysInterUrlMapper.selectByExample(example);
+	}
+
+	
+	@Override
+	public long countByExample(SysInterUrlExample example) {
+		
+		return sysInterUrlMapper.countByExample(example);
+	}
+
+	
+	@Override
+	public int deleteByExample(SysInterUrlExample example) {
+		
+		return sysInterUrlMapper.deleteByExample(example);
+	}
+	
+	/**
+	 * 检查name
+	 * @param sysInterUrl
+	 * @return
+	 */
+	public int checkNameUnique(SysInterUrl sysInterUrl){
+		SysInterUrlExample example=new SysInterUrlExample();
+		example.createCriteria().andInterNameEqualTo(sysInterUrl.getInterName());
+		List<SysInterUrl> list=sysInterUrlMapper.selectByExample(example);
+		return list.size();
+	}
+
+
+}

+ 1 - 1
web/monitor-hb/src/main/java/com/gyee/frame/service/SysPermissionService.java

@@ -325,7 +325,7 @@ public class SysPermissionService implements BaseService<TsysPermission, TsysPer
 
 		return  list;
 	}
-	
+
 	
 	
 	/**

+ 5 - 2
web/monitor-hb/src/main/java/com/gyee/frame/service/websocket/GenreSetPushService.java

@@ -2249,6 +2249,9 @@ public class GenreSetPushService {
                                     break;
                             }
                         }
+
+                        mxztmap.put("jrts", djnum + sdtjnum + zcfdnum + qxjclnum + xdjclnum + xdtjnum + gztjnum + cnsltjnum + jxtjnum + cnsljxnum + dwslnum + hjslnum + lxnum);
+
                     }
 
                     if (!gfzblist.isEmpty() && gfzblist.size() == gfzblist.size()) {
@@ -2284,10 +2287,10 @@ public class GenreSetPushService {
                         }
 
                     }
+                    mxztmap.put("jrts", djnum +  zcfdnum +  gztjnum + cnsltjnum + jxtjnum + xdjclnum + xdjclnum + lxnum);
 
                 }
 
-                mxztmap.put("jrts", djnum + sdtjnum + zcfdnum + qxjclnum + xdjclnum + xdtjnum + gztjnum + cnsltjnum + jxtjnum + cnsljxnum + dwslnum + hjslnum + lxnum);
 
 
                 mxztmap.put("djts", djnum);
@@ -2334,7 +2337,7 @@ public class GenreSetPushService {
                 Double lxnum = 0.0;
 
 
-                if (id.endsWith("FDC")) {
+                if ( id.endsWith("FDC")) {
                     List<String> mxztls = new ArrayList<>();
                     //待机台数
                     mxztls.add(windPowerstationTestingPoint2Service.getWindPowerStationTestingPoint2(id, Constant.DJNUM).getCode());

+ 1 - 1
web/monitor-hb/src/main/java/com/gyee/frame/service/websocket/MatrixQfPushService.java

@@ -350,7 +350,7 @@ public class MatrixQfPushService {
                 }
 
                 //限电台数
-                jczbmap.put("slts", 0.0);
+                jczbmap.put("slts", slts);
                 double djts=(Double)jczbmap.get("djts");
                 double yxts=(Double)jczbmap.get("yxts");
                 double gzts=(Double)jczbmap.get("gzts");

+ 99 - 0
web/monitor-hb/src/main/java/com/gyee/frame/shiro/config/MShiroFilterFactoryBean.java

@@ -0,0 +1,99 @@
+package com.gyee.frame.shiro.config;
+
+import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
+import org.apache.shiro.web.filter.mgt.FilterChainManager;
+import org.apache.shiro.web.filter.mgt.FilterChainResolver;
+import org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver;
+import org.apache.shiro.web.mgt.WebSecurityManager;
+import org.apache.shiro.web.servlet.AbstractShiroFilter;
+import org.springframework.beans.factory.BeanInitializationException;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * 自定义shiro过滤规则
+ * @author Administrator
+ *
+ */
+public class MShiroFilterFactoryBean extends ShiroFilterFactoryBean {
+	// 对ShiroFilter来说,需要直接忽略的请求
+    private Set<String> ignoreExt;
+
+    public MShiroFilterFactoryBean() {
+        super();
+        ignoreExt = new HashSet<>();
+        ignoreExt.add(".jsp");
+//        ignoreExt.add(".png");
+//        ignoreExt.add(".gif");
+//        ignoreExt.add(".bmp");
+//        ignoreExt.add(".js");
+//        ignoreExt.add(".css");
+    }
+
+    @Override
+    protected AbstractShiroFilter createInstance() throws Exception {
+
+        org.apache.shiro.mgt.SecurityManager securityManager = getSecurityManager();
+        if (securityManager == null) {
+            String msg = "SecurityManager property must be set.";
+            throw new BeanInitializationException(msg);
+        }
+
+        if (!(securityManager instanceof WebSecurityManager)) {
+            String msg = "The security manager does not implement the WebSecurityManager interface.";
+            throw new BeanInitializationException(msg);
+        }
+
+        FilterChainManager manager = createFilterChainManager();
+
+        PathMatchingFilterChainResolver chainResolver = new PathMatchingFilterChainResolver();
+        chainResolver.setFilterChainManager(manager);
+
+        return new MSpringShiroFilter((WebSecurityManager) securityManager, chainResolver);
+    }
+
+    private final class MSpringShiroFilter extends AbstractShiroFilter {
+
+        protected MSpringShiroFilter(WebSecurityManager webSecurityManager, FilterChainResolver resolver) {
+            super();
+            if (webSecurityManager == null) {
+                throw new IllegalArgumentException("WebSecurityManager property cannot be null.");
+            }
+            setSecurityManager(webSecurityManager);
+            if (resolver != null) {
+                setFilterChainResolver(resolver);
+            }
+        }
+
+        @Override
+        protected void doFilterInternal(ServletRequest servletRequest, ServletResponse servletResponse,
+                                        FilterChain chain) throws ServletException, IOException {
+            HttpServletRequest request = (HttpServletRequest)servletRequest;
+            String str = request.getRequestURI().toLowerCase();
+            // 因为ShiroFilter 拦截所有请求(在上面我们配置了urlPattern 为 * ,当然你也可以在那里精确的添加要处理的路径,这样就不需要这个类了),而在每次请求里面都做了session的读取和更新访问时间等操作,这样在集群部署session共享的情况下,数量级的加大了处理量负载。
+            // 所以我们这里将一些能忽略的请求忽略掉。
+            // 当然如果你的集群系统使用了动静分离处理,静态资料的请求不会到Filter这个层面,便可以忽略。
+            boolean flag = true;
+            int idx = 0;
+            if(( idx = str.indexOf(".")) > 0 ){
+                str = str.substring(idx);
+                if(!ignoreExt.contains(str.toLowerCase()))
+                    //如果包含jsp则改为false
+                    flag = false;
+           }
+            if(flag){
+                super.doFilterInternal(servletRequest, servletResponse, chain);
+            }else{
+                chain.doFilter(servletRequest, servletResponse);
+            }
+        }
+
+    }
+}

+ 71 - 24
web/monitor-hb/src/main/java/com/gyee/frame/shiro/config/ShiroConfig.java

@@ -1,6 +1,7 @@
 package com.gyee.frame.shiro.config;
 
 import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;
+import com.gyee.frame.common.cache.RedisSessionDao;
 import com.gyee.frame.shiro.service.MyShiroRealm;
 import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
 import org.apache.shiro.cache.CacheManager;
@@ -8,6 +9,7 @@ import org.apache.shiro.cache.MemoryConstrainedCacheManager;
 import org.apache.shiro.mgt.RememberMeManager;
 import org.apache.shiro.realm.AuthorizingRealm;
 import org.apache.shiro.realm.Realm;
+import org.apache.shiro.spring.LifecycleBeanPostProcessor;
 import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
 import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
 import org.apache.shiro.web.mgt.CookieRememberMeManager;
@@ -56,23 +58,43 @@ public class ShiroConfig {
 		shiroFilterFactoryBean.setSecurityManager(securityManager);
 		return shiroFilterFactoryBean;
 	}
-	
-	/**
-	 * web应用管理配置
-	 * @param shiroRealm
-	 * @param cacheManager
-	 * @param manager
-	 * @return
-	 */
-	@Bean
-	public DefaultWebSecurityManager securityManager(Realm shiroRealm,CacheManager cacheManager,RememberMeManager manager) {
-		DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-		securityManager.setCacheManager(cacheManager);
-		securityManager.setRememberMeManager(manager);//记住Cookie
-		securityManager.setRealm(shiroRealm);
-		securityManager.setSessionManager(sessionManager());
-		return securityManager;
-	}
+
+    @Bean
+    public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
+        return new LifecycleBeanPostProcessor();
+    }
+    /**
+     * web应用管理配置
+     * @param shiroRealm
+
+     * @param manager
+     * @return
+     */
+    @Bean
+    public DefaultWebSecurityManager securityManager(Realm shiroRealm,  RememberMeManager manager) {
+        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
+
+        securityManager.setRememberMeManager(manager);//记住Cookie
+        securityManager.setRealm(shiroRealm);
+        securityManager.setSessionManager(sessionManager());
+        return securityManager;
+    }
+//	/**
+//	 * web应用管理配置
+//	 * @param shiroRealm
+//	 * @param cacheManager
+//	 * @param manager
+//	 * @return
+//	 */
+//	@Bean
+//	public DefaultWebSecurityManager securityManager(Realm shiroRealm,CacheManager cacheManager,RememberMeManager manager) {
+//		DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
+//		securityManager.setCacheManager(cacheManager);
+//		securityManager.setRememberMeManager(manager);//记住Cookie
+//		securityManager.setRealm(shiroRealm);
+//		securityManager.setSessionManager(sessionManager());
+//		return securityManager;
+//	}
 	/**
 	 * session过期控制
 	 * @return
@@ -88,18 +110,43 @@ public class ShiroConfig {
 //		return defaultWebSessionManager;
 //	}
 
+    @Bean
+    public RedisSessionDao getRedisSessionDao(){
+        return new RedisSessionDao();
+    }
 
-	@Bean
-	public DefaultWebSessionManager sessionManager() {
-		DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();
-		Cookie cookie = defaultWebSessionManager.getSessionIdCookie();
+    @Bean(name="sessionManager")
+    public DefaultWebSessionManager sessionManager() {
+        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
+        //sessionManager.setCacheManager(cacheManager());
+        sessionManager.setGlobalSessionTimeout(43200000); //12小时
+        sessionManager.setDeleteInvalidSessions(true);
+        //关键在这里
+        sessionManager.setSessionDAO(getRedisSessionDao());
+        sessionManager.setSessionValidationSchedulerEnabled(true);
+        sessionManager.setDeleteInvalidSessions(true);
+        Cookie cookie = sessionManager.getSessionIdCookie();
 		cookie.setSecure(false);
 		cookie.setName("MySessionId");
 		// 设置session过期时间3600s
 		Long timeout=60L*1000*60;//毫秒级别
-		defaultWebSessionManager.setGlobalSessionTimeout(timeout);
-		return defaultWebSessionManager;
-	}
+        sessionManager.setGlobalSessionTimeout(timeout);
+        return sessionManager;
+    }
+
+//	@Bean
+//	public DefaultWebSessionManager sessionManager() {
+//		DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();
+//		Cookie cookie = defaultWebSessionManager.getSessionIdCookie();
+//		cookie.setSecure(false);
+//		cookie.setName("MySessionId");
+//		// 设置session过期时间3600s
+//		Long timeout=60L*1000*60;//毫秒级别
+//		defaultWebSessionManager.setGlobalSessionTimeout(timeout);
+//		return defaultWebSessionManager;
+//	}
+
+
 	/**
 	 * 加密算法
 	 * @return

+ 52 - 11
web/monitor-hb/src/main/java/com/gyee/frame/shiro/config/ShiroService.java

@@ -1,21 +1,32 @@
 package com.gyee.frame.shiro.config;
 
 
+import com.gyee.frame.common.cache.RedisSessionDao;
 import com.gyee.frame.model.auto.TsysUser;
+import com.gyee.frame.model.auto.TvuePermission;
 import com.gyee.frame.model.custom.TokenUser;
+import com.gyee.frame.service.VuePermissionService;
+import com.gyee.frame.shiro.util.ShiroUtils;
+import com.gyee.frame.util.StringUtils;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
 @Service
 public class ShiroService {
 
-
+    private String prefix="session_";
     @Resource
     TokenCache tokenCache;
+    @Resource
+    private    RedisSessionDao    redisSessionDao;
+
+    @Resource
+    private RedisTemplate<String,Object> redisTemplate;// Redis操作类,对这个使用不熟悉的,可以参考前面的博客
+    @Resource
+    VuePermissionService vuePermissionService;
 
     //10天后过期
     public final long EXPIRE = 10 * 24 * 60 * 60;
@@ -25,8 +36,8 @@ public class ShiroService {
         if (user == null)
             return result;
 
-        //生成一个token id
-        String token = TokenGenerator.generateValue();
+//        //生成一个token id
+//        String token = TokenGenerator.generateValue();
         //当前时间
         Date now = new Date();
         //过期时间
@@ -39,17 +50,47 @@ public class ShiroService {
         tokenUser.setDepartment(user.getDepName());
         tokenUser.setExpireTime(expireTime);
 
-        // 保存并更新token
-        tokenCache.saveToken(token, tokenUser);
+////        // 保存并更新token
+//        tokenCache.saveToken(token, tokenUser);
+
+
+
+
+        LinkedHashMap session= (LinkedHashMap) redisTemplate.opsForValue().get(prefix+ShiroUtils.getSession().getId());
+
+        if(StringUtils.notEmp(session) && StringUtils.notEmp(session.get("id")))
+        {
+
+            String token=String.valueOf(session.get("id"));
+            tokenCache.saveToken(token, tokenUser);
+            result.put("authToken",token);
+            result.put("user", tokenUser);
+
+            if(StringUtils.notEmp(tokenUser))
+            {
+                List<TvuePermission> list= vuePermissionService.getall(tokenUser.getLaborNum());
+                result.put("prmissionlist", list);
+
+            }else
+            {
+                result.put("prmissionlist", new ArrayList<>());
+
+            }
+        }
+
+
 
-        result.put("authToken", token);
-        result.put("user", tokenUser);
 
         return result;
     }
 
     public void logout(String token) {
-       tokenCache.removeToken(token);
+
+        if(ShiroUtils.getSession().getId().equals(token))
+        {
+            redisSessionDao.delete(ShiroUtils.getSession());
+        }
+
     }
 
     public TokenUser findToken(String token) {

+ 3 - 3
web/monitor-hb/src/main/java/com/gyee/frame/shiro/service/MyShiroRealm.java

@@ -1,7 +1,5 @@
 package com.gyee.frame.shiro.service;
 
-import java.util.List;
-
 import com.gyee.frame.mapper.custom.PermissionDao;
 import com.gyee.frame.mapper.custom.RoleDao;
 import com.gyee.frame.mapper.custom.TsysUserDao;
@@ -19,9 +17,11 @@ import org.apache.shiro.authz.AuthorizationInfo;
 import org.apache.shiro.authz.SimpleAuthorizationInfo;
 import org.apache.shiro.realm.AuthorizingRealm;
 import org.apache.shiro.subject.PrincipalCollection;
-import javax.annotation.Resource;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.List;
+
 /**
  * 身份校验核心类
  * 

+ 13 - 1
web/monitor-hb/src/main/resources/application-hb.yml

@@ -84,9 +84,21 @@ spring :
       #热部署开关
       enabled: true
       #指定热部署的目录
-      additional-paths: src/main/java
+      additional-paths: src/main
       #指定目录不更新
       exclude: test/**
+  mvc:   #静态文件
+    static-path-pattern : /static/**
+    async.request-timeout : 20000 #接口访问超时设置20秒
+  #模板引擎
+  thymeleaf:
+    model: HTML5
+    prefix: classpath:/templates/
+    suffix: .html
+    #指定编码
+    encoding: utf-8
+    #禁用缓存 默认false
+    cache: false
 
   redis:
     database: 19

+ 222 - 0
web/monitor-hb/src/main/resources/application-hbn.yml

@@ -0,0 +1,222 @@
+# 项目相关配置
+gyee:
+  #名称
+  name: v2
+  #版本
+  version: 3.9
+  #版权年份
+  copyrightYear: 2020
+  #文件上传路径
+  defaultBaseDir: D:/v2file/
+  #地址是否放入项目static目录,如果未Y 放入项目得static。 profile配置失效。  为N存放在D:/v2file/ 前端读取相同,不受影响
+  isstatic: Y
+  #开启存放静态文件夹后目录
+  isroot_dir: static/file_upload/
+  #邮件功能
+  #邮箱发送smtp
+  email_smtp: smtp.sina.com
+  #邮箱发送端口
+  email_port: 465
+  #发送邮箱登录账号
+  email_account: gyee@163.com
+  #发送邮箱登录密码
+  email_password: 1
+  #实例演示开关 启动该模式删除增加修改会弹出演示模式提示框
+  demoEnabled: false
+  #漂亮得拖动验证码 默认false普通验证码、true滚动验证码
+  rollVerification: true
+  #实时数据库Url
+  baseurl: http://10.83.68.96:8011/ts
+  healthurl: http://10.83.68.96:8012/ts
+  #API访问ip
+  #swaggerip: 49.4.50.80:8082
+  swaggerip: 10.83.68.96:8082
+  #默认小数位数
+  digit: 2
+  realtimedataBase: golden #数据查询模式 golden、hwy
+  weatherurl: http://10.83.68.96:7011
+  weatherqygs: hb_qygs
+  hbmaps: {CL_FDC_KEY: 2003,KB_FDC_KEY: 1460,DX_FDC_KEY: 2186,SY_FDC_KEY: 1366}
+  initialcode: INITIAL
+#tomcat config
+server :
+  port : 8171
+  session:
+    timeout: 7200
+  ##项目名字配置
+  #servlet :
+  #  context-path : /demo
+  tomcat :
+    maxHttpHeaderSize : 8192
+    max-threads : 128
+    min-spare-threads : 5
+    uri-encoding : UTF-8
+    #shiro 报错修改的地方
+    max-connections: 200000
+    max-http-form-post-size: 9000000
+#dev环境  mysql7.0
+spring :
+  application:
+#    name: monitor-hb-provider
+#    cloud:
+#      nacos:
+#        discovery:
+#          server-addr: 10.83.68.96:8848
+#          #指定yaml格式的配置
+#          file-extension: yaml
+#          cluster-name: master
+#        username: nacos
+#        password: nacos
+    #引入其他配置文件,例如ftpHX 未配置文件application-ftpHX.yml
+    #include: ftpHX,ftpCloud
+  servlet:
+    multipart:
+      #设置总上传的数据大小
+      max-request-size: 100MB
+      #单个文件大小
+      maxFileSize : 30MB
+      #shiro 报错修改的地方
+    max-connections: 200000
+    max-http-post-size: 9000000
+  #热部署模块
+  devtools:
+    restart:
+      #热部署开关
+      enabled: true
+      #指定热部署的目录
+      additional-paths: src/main
+      #指定目录不更新
+      exclude: test/**
+  mvc:   #静态文件
+    static-path-pattern : /static/**
+    async.request-timeout : 20000 #接口访问超时设置20秒
+  #模板引擎
+  thymeleaf:
+    model: HTML5
+    prefix: classpath:/templates/
+    suffix: .html
+    #指定编码
+    encoding: utf-8
+    #禁用缓存 默认false
+    cache: false
+
+  redis:
+    database: 19
+    host: 10.83.68.94
+    password:
+    pool:
+      maxTotal: 20
+      maxIdle: 20
+      maxwait: 600000
+      minIdle: 10
+    port: 6379
+    timeout: 600000
+  datasource:
+    #type: com.alibaba.druid.pool.DruidDataSource
+    type: com.alibaba.druid.pool.DruidDataSource
+    #    driverClassName: com.mysql.jdbc.Driver
+    #druid连接池配置
+    druid:
+      #主库数据源
+      master:
+        url: jdbc:oracle:thin:@10.83.68.165:1521:gdsj
+        username: gdprod
+        password: gd123
+        driver-class-name: oracle.jdbc.driver.OracleDriver
+      #备数据源 #关闭
+      slave:
+        enabled: false
+        url: jdbc:mysql://localhost:3306/springbootv3?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=UTC
+        username: root
+        password: root
+        #两票数据源
+      ticket:
+        url: jdbc:sqlserver://10.83.68.98:1434;DatabaseName=fdeamnew
+
+        username: sa
+        password: ibs
+        driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+        #配置初始化连接数大小
+      initial-size: 10
+      # 最大连接数
+      max-active: 50
+      #最小连接数
+      min-idle: 10
+      #获取连接等待超时时间
+      max-wait: 5000
+      pool-prepared-statements: true #是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
+      max-pool-prepared-statement-per-connection-size: 20
+      validation-query: SELECT 1 FROM DUAL
+      validation-query-timeout: 20000
+      test-on-borrow: false #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
+      test-on-return: false #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
+      test-while-idle: true #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
+      time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      min-evictable-idle-time-millis: 300000  #一个连接在池中最小生存的时间,单位是毫秒
+      #StatViewServlet配置。(因为暴露的监控信息比较敏感,支持密码加密和访问ip限定)
+      stat-view-servlet:
+        enabled: true
+        url-pattern: /druid/*
+        #可以增加访问账号密码【去掉注释就可以】
+        #login-username: admin
+        #login-password: admin
+      filter:
+        stat:
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: false
+        wall:
+          config:
+            multi-statement-allow: true
+
+#mysql 8.0
+
+#spring:
+#  datasource:
+#    type: com.alibaba.druid.pool.DruidDataSource
+#    driverClassName: com.mysql.cj.jdbc.Driver
+#    #druid连接池配置
+#    druid:
+#     # 主库数据源
+#     master:
+#        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT&autoReconnect=true&useSSL=false
+#        username: root
+#        password: root
+#        #树熊数据源
+#     slave:
+#        enabled : false
+#        url: jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT&autoReconnect=true&useSSL=false
+#        username: root
+#        password: root
+#        #配置初始化连接数大小
+#     initial-size: 10
+#     # 最大连接数
+#     max-active: 50
+#     #最小连接数
+#     min-idle: 10
+#     #获取连接等待超时时间
+#     max-wait: 5000
+#     pool-prepared-statements: true #是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
+#     max-pool-prepared-statement-per-connection-size: 20
+#     validation-query: SELECT 1 FROM DUAL
+#     validation-query-timeout: 20000
+#     test-on-borrow: false #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
+#     test-on-return: false #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
+#     test-while-idle: true #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
+#     time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+#     min-evictable-idle-time-millis: 300000  #一个连接在池中最小生存的时间,单位是毫秒
+#     #StatViewServlet配置。(因为暴露的监控信息比较敏感,支持密码加密和访问ip限定)
+#     stat-view-servlet:
+#      enabled: true
+#      url-pattern: /druid/*
+#      #可以增加访问账号密码【去掉注释就可以】
+#      #login-username: admin
+#      #login-password: admin
+#     filter:
+#      stat:
+#        log-slow-sql: true
+#        slow-sql-millis: 1000
+#        merge-sql: true
+#      wall:
+#        config:
+#          multi-statement-allow: true

+ 1 - 1
web/monitor-hb/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: hb
+    active: hbn
 #    active: jn
 asyncThreadPool:
   # 核心线程池大小

+ 443 - 443
web/monitor-hb/src/main/resources/mybatis/auto/Alertrule2Mapper.xml

@@ -1,481 +1,481 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.gyee.frame.mapper.auto.Alertrule2Mapper">
-  <resultMap id="BaseResultMap" type="com.gyee.frame.model.auto.Alertrule2">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    <id column="ID" jdbcType="VARCHAR" property="id" />
-    <result column="NAME" jdbcType="VARCHAR" property="name" />
-    <result column="DESCRIPTION" jdbcType="VARCHAR" property="description" />
-    <result column="EXPRESSION" jdbcType="VARCHAR" property="expression" />
-    <result column="TAG" jdbcType="VARCHAR" property="tag" />
-    <result column="RANK" jdbcType="VARCHAR" property="rank" />
-    <result column="ENABLED" jdbcType="DECIMAL" property="enabled" />
-    <result column="MODELID" jdbcType="VARCHAR" property="modelid" />
-    <result column="EDNAVALUE" jdbcType="DECIMAL" property="ednavalue" />
-    <result column="CATEGORY" jdbcType="VARCHAR" property="category" />
-    <result column="RANGE" jdbcType="VARCHAR" property="range" />
-    <result column="STATION" jdbcType="VARCHAR" property="station" />
-    <result column="WINDTURBINE" jdbcType="VARCHAR" property="windturbine" />
-    <result column="LINE" jdbcType="VARCHAR" property="line" />
-    <result column="PROJECT" jdbcType="VARCHAR" property="project" />
-    <result column="ELECTRICAL" jdbcType="VARCHAR" property="electrical" />
-    <result column="TASKSTART" jdbcType="VARCHAR" property="taskstart" />
-    <result column="RELATEDPARTS" jdbcType="VARCHAR" property="relatedparts" />
-  </resultMap>
-  <sql id="Example_Where_Clause">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    <where>
-      <foreach collection="oredCriteria" item="criteria" separator="or">
-        <if test="criteria.valid">
-          <trim prefix="(" prefixOverrides="and" suffix=")">
-            <foreach collection="criteria.criteria" item="criterion">
-              <choose>
-                <when test="criterion.noValue">
-                  and ${criterion.condition}
-                </when>
-                <when test="criterion.singleValue">
-                  and ${criterion.condition} #{criterion.value}
-                </when>
-                <when test="criterion.betweenValue">
-                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-                </when>
-                <when test="criterion.listValue">
-                  and ${criterion.condition}
-                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
-                    #{listItem}
-                  </foreach>
-                </when>
-              </choose>
+    <resultMap id="BaseResultMap" type="com.gyee.frame.model.auto.Alertrule2">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        <id column="ID" jdbcType="VARCHAR" property="id" />
+        <result column="NAME" jdbcType="VARCHAR" property="name" />
+        <result column="DESCRIPTION" jdbcType="VARCHAR" property="description" />
+        <result column="EXPRESSION" jdbcType="VARCHAR" property="expression" />
+        <result column="TAG" jdbcType="VARCHAR" property="tag" />
+        <result column="RANK" jdbcType="VARCHAR" property="rank" />
+        <result column="ENABLED" jdbcType="BOOLEAN" property="enabled" />
+        <result column="MODELID" jdbcType="VARCHAR" property="modelid" />
+        <result column="EDNAVALUE" jdbcType="DECIMAL" property="ednavalue" />
+        <result column="CATEGORY" jdbcType="VARCHAR" property="category" />
+        <result column="RANGE" jdbcType="VARCHAR" property="range" />
+        <result column="STATION" jdbcType="VARCHAR" property="station" />
+        <result column="WINDTURBINE" jdbcType="VARCHAR" property="windturbine" />
+        <result column="LINE" jdbcType="VARCHAR" property="line" />
+        <result column="PROJECT" jdbcType="VARCHAR" property="project" />
+        <result column="ELECTRICAL" jdbcType="VARCHAR" property="electrical" />
+        <result column="TASKSTART" jdbcType="VARCHAR" property="taskstart" />
+        <result column="RELATEDPARTS" jdbcType="VARCHAR" property="relatedparts" />
+    </resultMap>
+    <sql id="Example_Where_Clause">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        <where>
+            <foreach collection="oredCriteria" item="criteria" separator="or">
+                <if test="criteria.valid">
+                    <trim prefix="(" prefixOverrides="and" suffix=")">
+                        <foreach collection="criteria.criteria" item="criterion">
+                            <choose>
+                                <when test="criterion.noValue">
+                                    and ${criterion.condition}
+                                </when>
+                                <when test="criterion.singleValue">
+                                    and ${criterion.condition} #{criterion.value}
+                                </when>
+                                <when test="criterion.betweenValue">
+                                    and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                                </when>
+                                <when test="criterion.listValue">
+                                    and ${criterion.condition}
+                                    <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                                        #{listItem}
+                                    </foreach>
+                                </when>
+                            </choose>
+                        </foreach>
+                    </trim>
+                </if>
             </foreach>
-          </trim>
-        </if>
-      </foreach>
-    </where>
-  </sql>
-  <sql id="Update_By_Example_Where_Clause">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    <where>
-      <foreach collection="example.oredCriteria" item="criteria" separator="or">
-        <if test="criteria.valid">
-          <trim prefix="(" prefixOverrides="and" suffix=")">
-            <foreach collection="criteria.criteria" item="criterion">
-              <choose>
-                <when test="criterion.noValue">
-                  and ${criterion.condition}
-                </when>
-                <when test="criterion.singleValue">
-                  and ${criterion.condition} #{criterion.value}
-                </when>
-                <when test="criterion.betweenValue">
-                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-                </when>
-                <when test="criterion.listValue">
-                  and ${criterion.condition}
-                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
-                    #{listItem}
-                  </foreach>
-                </when>
-              </choose>
+        </where>
+    </sql>
+    <sql id="Update_By_Example_Where_Clause">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        <where>
+            <foreach collection="example.oredCriteria" item="criteria" separator="or">
+                <if test="criteria.valid">
+                    <trim prefix="(" prefixOverrides="and" suffix=")">
+                        <foreach collection="criteria.criteria" item="criterion">
+                            <choose>
+                                <when test="criterion.noValue">
+                                    and ${criterion.condition}
+                                </when>
+                                <when test="criterion.singleValue">
+                                    and ${criterion.condition} #{criterion.value}
+                                </when>
+                                <when test="criterion.betweenValue">
+                                    and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                                </when>
+                                <when test="criterion.listValue">
+                                    and ${criterion.condition}
+                                    <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                                        #{listItem}
+                                    </foreach>
+                                </when>
+                            </choose>
+                        </foreach>
+                    </trim>
+                </if>
             </foreach>
-          </trim>
+        </where>
+    </sql>
+    <sql id="Base_Column_List">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        ID, NAME, DESCRIPTION, EXPRESSION, TAG, RANK, ENABLED, MODELID, EDNAVALUE, CATEGORY,
+        RANGE, STATION, WINDTURBINE, LINE, PROJECT, ELECTRICAL, TASKSTART, RELATEDPARTS
+    </sql>
+    <select id="selectByExample" parameterType="com.gyee.frame.model.auto.Alertrule2Example" resultMap="BaseResultMap">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        select
+        <if test="distinct">
+            distinct
         </if>
-      </foreach>
-    </where>
-  </sql>
-  <sql id="Base_Column_List">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    ID, NAME, DESCRIPTION, EXPRESSION, TAG, RANK, ENABLED, MODELID, EDNAVALUE, CATEGORY,
-    RANGE, STATION, WINDTURBINE, LINE, PROJECT, ELECTRICAL, TASKSTART, RELATEDPARTS
-  </sql>
-  <select id="selectByExample" parameterType="com.gyee.frame.model.auto.Alertrule2Example" resultMap="BaseResultMap">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    select
-    <if test="distinct">
-      distinct
-    </if>
-    <include refid="Base_Column_List" />
-    from ALERTRULE2
-    <if test="_parameter != null">
-      <include refid="Example_Where_Clause" />
-    </if>
-    <if test="orderByClause != null">
-      order by ${orderByClause}
-    </if>
-  </select>
-  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    select 
-    <include refid="Base_Column_List" />
-    from ALERTRULE2
-    where ID = #{id,jdbcType=VARCHAR}
-  </select>
-  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    delete from ALERTRULE2
-    where ID = #{id,jdbcType=VARCHAR}
-  </delete>
-  <delete id="deleteByExample" parameterType="com.gyee.frame.model.auto.Alertrule2Example">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    delete from ALERTRULE2
-    <if test="_parameter != null">
-      <include refid="Example_Where_Clause" />
-    </if>
-  </delete>
-  <insert id="insert" parameterType="com.gyee.frame.model.auto.Alertrule2">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    insert into ALERTRULE2 (ID, NAME, DESCRIPTION, 
-      EXPRESSION, TAG, RANK, 
-      ENABLED, MODELID, EDNAVALUE, 
-      CATEGORY, RANGE, STATION,
-      WINDTURBINE, LINE, PROJECT, 
-      ELECTRICAL, TASKSTART, RELATEDPARTS
-      )
-    values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, 
-      #{expression,jdbcType=VARCHAR}, #{tag,jdbcType=VARCHAR}, #{rank,jdbcType=VARCHAR}, 
-      #{enabled,jdbcType=DECIMAL}, #{modelid,jdbcType=VARCHAR}, #{ednavalue,jdbcType=DECIMAL}, 
-      #{category,jdbcType=VARCHAR}, #{range,jdbcType=VARCHAR}, #{station,jdbcType=VARCHAR}, 
-      #{windturbine,jdbcType=VARCHAR}, #{line,jdbcType=VARCHAR}, #{project,jdbcType=VARCHAR}, 
-      #{electrical,jdbcType=VARCHAR}, #{taskstart,jdbcType=VARCHAR}, #{relatedparts,jdbcType=VARCHAR}
-      )
-  </insert>
-  <insert id="insertSelective" parameterType="com.gyee.frame.model.auto.Alertrule2">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    insert into ALERTRULE2
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        ID,
-      </if>
-      <if test="name != null">
-        NAME,
-      </if>
-      <if test="description != null">
-        DESCRIPTION,
-      </if>
-      <if test="expression != null">
-        EXPRESSION,
-      </if>
-      <if test="tag != null">
-        TAG,
-      </if>
-      <if test="rank != null">
-        RANK,
-      </if>
-      <if test="enabled != null">
-        ENABLED,
-      </if>
-      <if test="modelid != null">
-        MODELID,
-      </if>
-      <if test="ednavalue != null">
-        EDNAVALUE,
-      </if>
-      <if test="category != null">
-        CATEGORY,
-      </if>
-      <if test="range != null">
-        RANGE,
-      </if>
-      <if test="station != null">
-        STATION,
-      </if>
-      <if test="windturbine != null">
-        WINDTURBINE,
-      </if>
-      <if test="line != null">
-        LINE,
-      </if>
-      <if test="project != null">
-        PROJECT,
-      </if>
-      <if test="electrical != null">
-        ELECTRICAL,
-      </if>
-      <if test="taskstart != null">
-        TASKSTART,
-      </if>
-      <if test="relatedparts != null">
-        RELATEDPARTS,
-      </if>
-    </trim>
-    <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        #{id,jdbcType=VARCHAR},
-      </if>
-      <if test="name != null">
-        #{name,jdbcType=VARCHAR},
-      </if>
-      <if test="description != null">
-        #{description,jdbcType=VARCHAR},
-      </if>
-      <if test="expression != null">
-        #{expression,jdbcType=VARCHAR},
-      </if>
-      <if test="tag != null">
-        #{tag,jdbcType=VARCHAR},
-      </if>
-      <if test="rank != null">
-        #{rank,jdbcType=VARCHAR},
-      </if>
-      <if test="enabled != null">
-        #{enabled,jdbcType=DECIMAL},
-      </if>
-      <if test="modelid != null">
-        #{modelid,jdbcType=VARCHAR},
-      </if>
-      <if test="ednavalue != null">
-        #{ednavalue,jdbcType=DECIMAL},
-      </if>
-      <if test="category != null">
-        #{category,jdbcType=VARCHAR},
-      </if>
-      <if test="range != null">
-        #{range,jdbcType=VARCHAR},
-      </if>
-      <if test="station != null">
-        #{station,jdbcType=VARCHAR},
-      </if>
-      <if test="windturbine != null">
-        #{windturbine,jdbcType=VARCHAR},
-      </if>
-      <if test="line != null">
-        #{line,jdbcType=VARCHAR},
-      </if>
-      <if test="project != null">
-        #{project,jdbcType=VARCHAR},
-      </if>
-      <if test="electrical != null">
-        #{electrical,jdbcType=VARCHAR},
-      </if>
-      <if test="taskstart != null">
-        #{taskstart,jdbcType=VARCHAR},
-      </if>
-      <if test="relatedparts != null">
-        #{relatedparts,jdbcType=VARCHAR},
-      </if>
-    </trim>
-  </insert>
-  <select id="countByExample" parameterType="com.gyee.frame.model.auto.Alertrule2Example" resultType="java.lang.Long">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    select count(*) from ALERTRULE2
-    <if test="_parameter != null">
-      <include refid="Example_Where_Clause" />
-    </if>
-  </select>
-  <update id="updateByExampleSelective" parameterType="map">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    update ALERTRULE2
-    <set>
-      <if test="record.id != null">
-        ID = #{record.id,jdbcType=VARCHAR},
-      </if>
-      <if test="record.name != null">
+        <include refid="Base_Column_List" />
+        from ALERTRULE2
+        <if test="_parameter != null">
+            <include refid="Example_Where_Clause" />
+        </if>
+        <if test="orderByClause != null">
+            order by ${orderByClause}
+        </if>
+    </select>
+    <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        select
+        <include refid="Base_Column_List" />
+        from ALERTRULE2
+        where ID = #{id,jdbcType=VARCHAR}
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        delete from ALERTRULE2
+        where ID = #{id,jdbcType=VARCHAR}
+    </delete>
+    <delete id="deleteByExample" parameterType="com.gyee.frame.model.auto.Alertrule2Example">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        delete from ALERTRULE2
+        <if test="_parameter != null">
+            <include refid="Example_Where_Clause" />
+        </if>
+    </delete>
+    <insert id="insert" parameterType="com.gyee.frame.model.auto.Alertrule2">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        insert into ALERTRULE2 (ID, NAME, DESCRIPTION,
+        EXPRESSION, TAG, RANK,
+        ENABLED, MODELID, EDNAVALUE,
+        CATEGORY, RANGE, STATION,
+        WINDTURBINE, LINE, PROJECT,
+        ELECTRICAL, TASKSTART, RELATEDPARTS
+        )
+        values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR},
+        #{expression,jdbcType=VARCHAR}, #{tag,jdbcType=VARCHAR}, #{rank,jdbcType=VARCHAR},
+        #{enabled,jdbcType=BOOLEAN}, #{modelid,jdbcType=VARCHAR}, #{ednavalue,jdbcType=DECIMAL},
+        #{category,jdbcType=VARCHAR}, #{range,jdbcType=VARCHAR}, #{station,jdbcType=VARCHAR},
+        #{windturbine,jdbcType=VARCHAR}, #{line,jdbcType=VARCHAR}, #{project,jdbcType=VARCHAR},
+        #{electrical,jdbcType=VARCHAR}, #{taskstart,jdbcType=VARCHAR}, #{relatedparts,jdbcType=VARCHAR}
+        )
+    </insert>
+    <insert id="insertSelective" parameterType="com.gyee.frame.model.auto.Alertrule2">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        insert into ALERTRULE2
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                ID,
+            </if>
+            <if test="name != null">
+                NAME,
+            </if>
+            <if test="description != null">
+                DESCRIPTION,
+            </if>
+            <if test="expression != null">
+                EXPRESSION,
+            </if>
+            <if test="tag != null">
+                TAG,
+            </if>
+            <if test="rank != null">
+                RANK,
+            </if>
+            <if test="enabled != null">
+                ENABLED,
+            </if>
+            <if test="modelid != null">
+                MODELID,
+            </if>
+            <if test="ednavalue != null">
+                EDNAVALUE,
+            </if>
+            <if test="category != null">
+                CATEGORY,
+            </if>
+            <if test="range != null">
+                RANGE,
+            </if>
+            <if test="station != null">
+                STATION,
+            </if>
+            <if test="windturbine != null">
+                WINDTURBINE,
+            </if>
+            <if test="line != null">
+                LINE,
+            </if>
+            <if test="project != null">
+                PROJECT,
+            </if>
+            <if test="electrical != null">
+                ELECTRICAL,
+            </if>
+            <if test="taskstart != null">
+                TASKSTART,
+            </if>
+            <if test="relatedparts != null">
+                RELATEDPARTS,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                #{id,jdbcType=VARCHAR},
+            </if>
+            <if test="name != null">
+                #{name,jdbcType=VARCHAR},
+            </if>
+            <if test="description != null">
+                #{description,jdbcType=VARCHAR},
+            </if>
+            <if test="expression != null">
+                #{expression,jdbcType=VARCHAR},
+            </if>
+            <if test="tag != null">
+                #{tag,jdbcType=VARCHAR},
+            </if>
+            <if test="rank != null">
+                #{rank,jdbcType=VARCHAR},
+            </if>
+            <if test="enabled != null">
+                #{enabled,jdbcType=BOOLEAN},
+            </if>
+            <if test="modelid != null">
+                #{modelid,jdbcType=VARCHAR},
+            </if>
+            <if test="ednavalue != null">
+                #{ednavalue,jdbcType=DECIMAL},
+            </if>
+            <if test="category != null">
+                #{category,jdbcType=VARCHAR},
+            </if>
+            <if test="range != null">
+                #{range,jdbcType=VARCHAR},
+            </if>
+            <if test="station != null">
+                #{station,jdbcType=VARCHAR},
+            </if>
+            <if test="windturbine != null">
+                #{windturbine,jdbcType=VARCHAR},
+            </if>
+            <if test="line != null">
+                #{line,jdbcType=VARCHAR},
+            </if>
+            <if test="project != null">
+                #{project,jdbcType=VARCHAR},
+            </if>
+            <if test="electrical != null">
+                #{electrical,jdbcType=VARCHAR},
+            </if>
+            <if test="taskstart != null">
+                #{taskstart,jdbcType=VARCHAR},
+            </if>
+            <if test="relatedparts != null">
+                #{relatedparts,jdbcType=VARCHAR},
+            </if>
+        </trim>
+    </insert>
+    <select id="countByExample" parameterType="com.gyee.frame.model.auto.Alertrule2Example" resultType="java.lang.Long">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        select count(*) from ALERTRULE2
+        <if test="_parameter != null">
+            <include refid="Example_Where_Clause" />
+        </if>
+    </select>
+    <update id="updateByExampleSelective" parameterType="map">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        update ALERTRULE2
+        <set>
+            <if test="record.id != null">
+                ID = #{record.id,jdbcType=VARCHAR},
+            </if>
+            <if test="record.name != null">
+                NAME = #{record.name,jdbcType=VARCHAR},
+            </if>
+            <if test="record.description != null">
+                DESCRIPTION = #{record.description,jdbcType=VARCHAR},
+            </if>
+            <if test="record.expression != null">
+                EXPRESSION = #{record.expression,jdbcType=VARCHAR},
+            </if>
+            <if test="record.tag != null">
+                TAG = #{record.tag,jdbcType=VARCHAR},
+            </if>
+            <if test="record.rank != null">
+                RANK = #{record.rank,jdbcType=VARCHAR},
+            </if>
+            <if test="record.enabled != null">
+                ENABLED = #{record.enabled,jdbcType=BOOLEAN},
+            </if>
+            <if test="record.modelid != null">
+                MODELID = #{record.modelid,jdbcType=VARCHAR},
+            </if>
+            <if test="record.ednavalue != null">
+                EDNAVALUE = #{record.ednavalue,jdbcType=DECIMAL},
+            </if>
+            <if test="record.category != null">
+                CATEGORY = #{record.category,jdbcType=VARCHAR},
+            </if>
+            <if test="record.range != null">
+                RANGE = #{record.range,jdbcType=VARCHAR},
+            </if>
+            <if test="record.station != null">
+                STATION = #{record.station,jdbcType=VARCHAR},
+            </if>
+            <if test="record.windturbine != null">
+                WINDTURBINE = #{record.windturbine,jdbcType=VARCHAR},
+            </if>
+            <if test="record.line != null">
+                LINE = #{record.line,jdbcType=VARCHAR},
+            </if>
+            <if test="record.project != null">
+                PROJECT = #{record.project,jdbcType=VARCHAR},
+            </if>
+            <if test="record.electrical != null">
+                ELECTRICAL = #{record.electrical,jdbcType=VARCHAR},
+            </if>
+            <if test="record.taskstart != null">
+                TASKSTART = #{record.taskstart,jdbcType=VARCHAR},
+            </if>
+            <if test="record.relatedparts != null">
+                RELATEDPARTS = #{record.relatedparts,jdbcType=VARCHAR},
+            </if>
+        </set>
+        <if test="_parameter != null">
+            <include refid="Update_By_Example_Where_Clause" />
+        </if>
+    </update>
+    <update id="updateByExample" parameterType="map">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        update ALERTRULE2
+        set ID = #{record.id,jdbcType=VARCHAR},
         NAME = #{record.name,jdbcType=VARCHAR},
-      </if>
-      <if test="record.description != null">
         DESCRIPTION = #{record.description,jdbcType=VARCHAR},
-      </if>
-      <if test="record.expression != null">
         EXPRESSION = #{record.expression,jdbcType=VARCHAR},
-      </if>
-      <if test="record.tag != null">
         TAG = #{record.tag,jdbcType=VARCHAR},
-      </if>
-      <if test="record.rank != null">
         RANK = #{record.rank,jdbcType=VARCHAR},
-      </if>
-      <if test="record.enabled != null">
-        ENABLED = #{record.enabled,jdbcType=DECIMAL},
-      </if>
-      <if test="record.modelid != null">
+        ENABLED = #{record.enabled,jdbcType=BOOLEAN},
         MODELID = #{record.modelid,jdbcType=VARCHAR},
-      </if>
-      <if test="record.ednavalue != null">
         EDNAVALUE = #{record.ednavalue,jdbcType=DECIMAL},
-      </if>
-      <if test="record.category != null">
         CATEGORY = #{record.category,jdbcType=VARCHAR},
-      </if>
-      <if test="record.range != null">
         RANGE = #{record.range,jdbcType=VARCHAR},
-      </if>
-      <if test="record.station != null">
         STATION = #{record.station,jdbcType=VARCHAR},
-      </if>
-      <if test="record.windturbine != null">
         WINDTURBINE = #{record.windturbine,jdbcType=VARCHAR},
-      </if>
-      <if test="record.line != null">
         LINE = #{record.line,jdbcType=VARCHAR},
-      </if>
-      <if test="record.project != null">
         PROJECT = #{record.project,jdbcType=VARCHAR},
-      </if>
-      <if test="record.electrical != null">
         ELECTRICAL = #{record.electrical,jdbcType=VARCHAR},
-      </if>
-      <if test="record.taskstart != null">
         TASKSTART = #{record.taskstart,jdbcType=VARCHAR},
-      </if>
-      <if test="record.relatedparts != null">
-        RELATEDPARTS = #{record.relatedparts,jdbcType=VARCHAR},
-      </if>
-    </set>
-    <if test="_parameter != null">
-      <include refid="Update_By_Example_Where_Clause" />
-    </if>
-  </update>
-  <update id="updateByExample" parameterType="map">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    update ALERTRULE2
-    set ID = #{record.id,jdbcType=VARCHAR},
-      NAME = #{record.name,jdbcType=VARCHAR},
-      DESCRIPTION = #{record.description,jdbcType=VARCHAR},
-      EXPRESSION = #{record.expression,jdbcType=VARCHAR},
-      TAG = #{record.tag,jdbcType=VARCHAR},
-      RANK = #{record.rank,jdbcType=VARCHAR},
-      ENABLED = #{record.enabled,jdbcType=DECIMAL},
-      MODELID = #{record.modelid,jdbcType=VARCHAR},
-      EDNAVALUE = #{record.ednavalue,jdbcType=DECIMAL},
-      CATEGORY = #{record.category,jdbcType=VARCHAR},
-    RANGE = #{record.range,jdbcType=VARCHAR},
-      STATION = #{record.station,jdbcType=VARCHAR},
-      WINDTURBINE = #{record.windturbine,jdbcType=VARCHAR},
-      LINE = #{record.line,jdbcType=VARCHAR},
-      PROJECT = #{record.project,jdbcType=VARCHAR},
-      ELECTRICAL = #{record.electrical,jdbcType=VARCHAR},
-      TASKSTART = #{record.taskstart,jdbcType=VARCHAR},
-      RELATEDPARTS = #{record.relatedparts,jdbcType=VARCHAR}
-    <if test="_parameter != null">
-      <include refid="Update_By_Example_Where_Clause" />
-    </if>
-  </update>
-  <update id="updateByPrimaryKeySelective" parameterType="com.gyee.frame.model.auto.Alertrule2">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    update ALERTRULE2
-    <set>
-      <if test="name != null">
-        NAME = #{name,jdbcType=VARCHAR},
-      </if>
-      <if test="description != null">
+        RELATEDPARTS = #{record.relatedparts,jdbcType=VARCHAR}
+        <if test="_parameter != null">
+            <include refid="Update_By_Example_Where_Clause" />
+        </if>
+    </update>
+    <update id="updateByPrimaryKeySelective" parameterType="com.gyee.frame.model.auto.Alertrule2">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        update ALERTRULE2
+        <set>
+            <if test="name != null">
+                NAME = #{name,jdbcType=VARCHAR},
+            </if>
+            <if test="description != null">
+                DESCRIPTION = #{description,jdbcType=VARCHAR},
+            </if>
+            <if test="expression != null">
+                EXPRESSION = #{expression,jdbcType=VARCHAR},
+            </if>
+            <if test="tag != null">
+                TAG = #{tag,jdbcType=VARCHAR},
+            </if>
+            <if test="rank != null">
+                RANK = #{rank,jdbcType=VARCHAR},
+            </if>
+            <if test="enabled != null">
+                ENABLED = #{enabled,jdbcType=BOOLEAN},
+            </if>
+            <if test="modelid != null">
+                MODELID = #{modelid,jdbcType=VARCHAR},
+            </if>
+            <if test="ednavalue != null">
+                EDNAVALUE = #{ednavalue,jdbcType=DECIMAL},
+            </if>
+            <if test="category != null">
+                CATEGORY = #{category,jdbcType=VARCHAR},
+            </if>
+            <if test="range != null">
+                RANGE = #{range,jdbcType=VARCHAR},
+            </if>
+            <if test="station != null">
+                STATION = #{station,jdbcType=VARCHAR},
+            </if>
+            <if test="windturbine != null">
+                WINDTURBINE = #{windturbine,jdbcType=VARCHAR},
+            </if>
+            <if test="line != null">
+                LINE = #{line,jdbcType=VARCHAR},
+            </if>
+            <if test="project != null">
+                PROJECT = #{project,jdbcType=VARCHAR},
+            </if>
+            <if test="electrical != null">
+                ELECTRICAL = #{electrical,jdbcType=VARCHAR},
+            </if>
+            <if test="taskstart != null">
+                TASKSTART = #{taskstart,jdbcType=VARCHAR},
+            </if>
+            <if test="relatedparts != null">
+                RELATEDPARTS = #{relatedparts,jdbcType=VARCHAR},
+            </if>
+        </set>
+        where ID = #{id,jdbcType=VARCHAR}
+    </update>
+    <update id="updateByPrimaryKey" parameterType="com.gyee.frame.model.auto.Alertrule2">
+        <!--
+          WARNING - @mbg.generated
+          This element is automatically generated by MyBatis Generator, do not modify.
+        -->
+        update ALERTRULE2
+        set NAME = #{name,jdbcType=VARCHAR},
         DESCRIPTION = #{description,jdbcType=VARCHAR},
-      </if>
-      <if test="expression != null">
         EXPRESSION = #{expression,jdbcType=VARCHAR},
-      </if>
-      <if test="tag != null">
         TAG = #{tag,jdbcType=VARCHAR},
-      </if>
-      <if test="rank != null">
         RANK = #{rank,jdbcType=VARCHAR},
-      </if>
-      <if test="enabled != null">
-        ENABLED = #{enabled,jdbcType=DECIMAL},
-      </if>
-      <if test="modelid != null">
+        ENABLED = #{enabled,jdbcType=BOOLEAN},
         MODELID = #{modelid,jdbcType=VARCHAR},
-      </if>
-      <if test="ednavalue != null">
         EDNAVALUE = #{ednavalue,jdbcType=DECIMAL},
-      </if>
-      <if test="category != null">
         CATEGORY = #{category,jdbcType=VARCHAR},
-      </if>
-      <if test="range != null">
         RANGE = #{range,jdbcType=VARCHAR},
-      </if>
-      <if test="station != null">
         STATION = #{station,jdbcType=VARCHAR},
-      </if>
-      <if test="windturbine != null">
         WINDTURBINE = #{windturbine,jdbcType=VARCHAR},
-      </if>
-      <if test="line != null">
         LINE = #{line,jdbcType=VARCHAR},
-      </if>
-      <if test="project != null">
         PROJECT = #{project,jdbcType=VARCHAR},
-      </if>
-      <if test="electrical != null">
         ELECTRICAL = #{electrical,jdbcType=VARCHAR},
-      </if>
-      <if test="taskstart != null">
         TASKSTART = #{taskstart,jdbcType=VARCHAR},
-      </if>
-      <if test="relatedparts != null">
-        RELATEDPARTS = #{relatedparts,jdbcType=VARCHAR},
-      </if>
-    </set>
-    where ID = #{id,jdbcType=VARCHAR}
-  </update>
-  <update id="updateByPrimaryKey" parameterType="com.gyee.frame.model.auto.Alertrule2">
-    <!--
-      WARNING - @mbg.generated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
-    update ALERTRULE2
-    set NAME = #{name,jdbcType=VARCHAR},
-      DESCRIPTION = #{description,jdbcType=VARCHAR},
-      EXPRESSION = #{expression,jdbcType=VARCHAR},
-      TAG = #{tag,jdbcType=VARCHAR},
-      RANK = #{rank,jdbcType=VARCHAR},
-      ENABLED = #{enabled,jdbcType=DECIMAL},
-      MODELID = #{modelid,jdbcType=VARCHAR},
-      EDNAVALUE = #{ednavalue,jdbcType=DECIMAL},
-      CATEGORY = #{category,jdbcType=VARCHAR},
-    RANGE = #{range,jdbcType=VARCHAR},
-      STATION = #{station,jdbcType=VARCHAR},
-      WINDTURBINE = #{windturbine,jdbcType=VARCHAR},
-      LINE = #{line,jdbcType=VARCHAR},
-      PROJECT = #{project,jdbcType=VARCHAR},
-      ELECTRICAL = #{electrical,jdbcType=VARCHAR},
-      TASKSTART = #{taskstart,jdbcType=VARCHAR},
-      RELATEDPARTS = #{relatedparts,jdbcType=VARCHAR}
-    where ID = #{id,jdbcType=VARCHAR}
-  </update>
+        RELATEDPARTS = #{relatedparts,jdbcType=VARCHAR}
+        where ID = #{id,jdbcType=VARCHAR}
+    </update>
 
-  <select id="getAlarmTotal"  resultType="com.gyee.frame.model.custom.AlarmTotalVo">
+    <select id="getAlarmTotal"  resultType="com.gyee.frame.model.custom.AlarmTotalVo">
     select s.stationid wpId, s.windturbineid wtId, s.alerttext name from ( select snapid, sum(count) as count,sum(time) time from alarmcount
     a left join alarmsnap ss on a.snapid = ss.id
     where
@@ -489,7 +489,7 @@
 
   </select>
 
-  <select id="getAlarmTypenum"  resultType="com.gyee.frame.model.custom.SimpleVo">
+    <select id="getAlarmTypenum"  resultType="com.gyee.frame.model.custom.SimpleVo">
      select count(*) value,w.name name from alertrule2 t,windturbine_parts w where t.relatedparts=w.id group by w.name
   </select>
 

+ 236 - 0
web/monitor-hb/src/main/resources/mybatis/auto/SysInterUrlMapper.xml

@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.frame.mapper.auto.SysInterUrlMapper">
+  <resultMap id="BaseResultMap" type="com.gyee.frame.model.auto.SysInterUrl">
+    <result column="id" jdbcType="VARCHAR" property="id" />
+    <result column="inter_name" jdbcType="VARCHAR" property="interName" />
+    <result column="url" jdbcType="VARCHAR" property="url" />
+    <result column="type" jdbcType="INTEGER" property="type" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+<sql id="Base_Column_List">
+	  	  	      	id,
+       	  	      	inter_name,
+       	  	      	url,
+       	  	    	  	type
+       	</sql>
+  <select id="selectByExample" parameterType="com.gyee.frame.model.auto.SysInterUrlExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from t_sys_inter_url
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from t_sys_inter_url
+    where id = #{id,jdbcType=VARCHAR}
+  </select>
+
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    delete from t_sys_inter_url
+    where id = #{id,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.gyee.frame.model.auto.SysInterUrlExample">
+    delete from t_sys_inter_url
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  
+  <insert id="insert" parameterType="com.gyee.frame.model.auto.SysInterUrl">
+    insert into t_sys_inter_url (
+      	  	       id,
+       	  	       inter_name,
+       	  	       url,
+       	  	    	  type
+       	    )
+    values (
+	  	  	      	#{id,jdbcType=VARCHAR},
+       	  	      	#{interName,jdbcType=VARCHAR},
+       	  	      	#{url,jdbcType=VARCHAR},
+       	  	    	  #{type,jdbcType=INTEGER}
+       	    )
+  </insert>
+  
+  <insert id="insertSelective" parameterType="com.gyee.frame.model.auto.SysInterUrl">
+    insert into t_sys_inter_url
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+          
+      <if test="id != null">
+        id,
+      </if>
+      
+         
+      <if test="interName != null">
+        inter_name,
+      </if>
+      
+         
+      <if test="url != null">
+        url,
+      </if>
+      
+         
+      <if test="type != null">
+        type,
+      </if>
+      
+         </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+          <if test="id != null">
+        #{id,jdbcType=VARCHAR},
+      </if>
+          <if test="interName != null">
+        #{interName,jdbcType=VARCHAR},
+      </if>
+          <if test="url != null">
+        #{url,jdbcType=VARCHAR},
+      </if>
+          <if test="type != null">
+        #{type,jdbcType=INTEGER},
+      </if>
+        </trim>
+  </insert>
+  
+  <select id="countByExample" parameterType="com.gyee.frame.model.auto.SysInterUrlExample" resultType="java.lang.Long">
+    select count(*) from t_sys_inter_url
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  
+  <update id="updateByExampleSelective" parameterType="map">
+    update t_sys_inter_url
+    <set>
+          <if test="record.id != null">
+        id = #{record.id,jdbcType=VARCHAR},
+      </if>
+          <if test="record.interName != null">
+        inter_name = #{record.interName,jdbcType=VARCHAR},
+      </if>
+          <if test="record.url != null">
+        url = #{record.url,jdbcType=VARCHAR},
+      </if>
+          <if test="record.type != null">
+        type = #{record.type,jdbcType=INTEGER},
+      </if>
+         
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  
+  
+  <update id="updateByExample" parameterType="map">
+    update t_sys_inter_url
+    set
+            	     	 id = #{record.id,jdbcType=VARCHAR},
+    	         	     	 inter_name = #{record.interName,jdbcType=VARCHAR},
+    	         	     	 url = #{record.url,jdbcType=VARCHAR},
+    	         	     	 type = #{record.type,jdbcType=INTEGER}
+    	         <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  
+  
+      <update id="updateByPrimaryKeySelective" parameterType="com.gyee.frame.model.auto.SysInterUrl">
+    update t_sys_inter_url
+    <set>
+                          <if test="interName != null">
+        inter_name = #{interName,jdbcType=VARCHAR},
+      </if>
+                      <if test="url != null">
+        url = #{url,jdbcType=VARCHAR},
+      </if>
+                      <if test="type != null">
+        type = #{type,jdbcType=INTEGER},
+      </if>
+              </set>
+    where 
+            id = #{id,jdbcType=VARCHAR}
+                                  
+  </update>
+
+      	      	   	      	   	      	   	      	
+
+  <update id="updateByPrimaryKey" parameterType="com.gyee.frame.model.auto.SysInterUrl">
+    update t_sys_inter_url
+    set 
+             	        	    	 			inter_name = #{interName,jdbcType=VARCHAR},
+		     	        	    	 			url = #{url,jdbcType=VARCHAR},
+		     	        	    	 			type = #{type,jdbcType=INTEGER}
+		     	        where 
+            id = #{id,jdbcType=VARCHAR}
+                                    
+  </update>
+  
+                        
+</mapper>

BIN
web/monitor-hb/src/main/resources/resources.7z


+ 251 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/Checkboxes/awesome-bootstrap-checkbox.css

@@ -0,0 +1,251 @@
+.checkbox {
+  padding-left: 20px;
+}
+.checkbox label {
+  display: inline-block;
+  vertical-align: middle;
+  position: relative;
+  padding-left: 5px;
+}
+.checkbox label::before {
+  content: "";
+  display: inline-block;
+  position: absolute;
+  width: 17px;
+  height: 17px;
+  left: 0;
+  margin-left: -20px;
+  border: 1px solid #cccccc;
+  border-radius: 3px;
+  background-color: #fff;
+  -webkit-transition: border 0.15s ease-in-out, color 0.15s ease-in-out;
+  -o-transition: border 0.15s ease-in-out, color 0.15s ease-in-out;
+  transition: border 0.15s ease-in-out, color 0.15s ease-in-out;
+}
+.checkbox label::after {
+  display: inline-block;
+  position: absolute;
+  width: 16px;
+  height: 16px;
+  left: 0;
+  top: 0;
+  margin-left: -20px;
+  padding-left: 3px;
+  padding-top: 1px;
+  font-size: 11px;
+  color: #555555;
+}
+.checkbox input[type="checkbox"],
+.checkbox input[type="radio"] {
+  opacity: 0;
+  z-index: 1;
+}
+.checkbox input[type="checkbox"]:focus + label::before,
+.checkbox input[type="radio"]:focus + label::before {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+.checkbox input[type="checkbox"]:checked + label::after,
+.checkbox input[type="radio"]:checked + label::after {
+  font-family: "FontAwesome";
+  content: "\f00c";
+}
+.checkbox input[type="checkbox"]:disabled + label,
+.checkbox input[type="radio"]:disabled + label {
+  opacity: 0.65;
+}
+.checkbox input[type="checkbox"]:disabled + label::before,
+.checkbox input[type="radio"]:disabled + label::before {
+  background-color: #eeeeee;
+  cursor: not-allowed;
+}
+.checkbox.checkbox-circle label::before {
+  border-radius: 50%;
+}
+.checkbox.checkbox-inline {
+  margin-top: 0;
+}
+
+.checkbox-primary input[type="checkbox"]:checked + label::before,
+.checkbox-primary input[type="radio"]:checked + label::before {
+  background-color: #337ab7;
+  border-color: #337ab7;
+}
+.checkbox-primary input[type="checkbox"]:checked + label::after,
+.checkbox-primary input[type="radio"]:checked + label::after {
+  color: #fff;
+}
+
+.checkbox-danger input[type="checkbox"]:checked + label::before,
+.checkbox-danger input[type="radio"]:checked + label::before {
+  background-color: #d9534f;
+  border-color: #d9534f;
+}
+.checkbox-danger input[type="checkbox"]:checked + label::after,
+.checkbox-danger input[type="radio"]:checked + label::after {
+  color: #fff;
+}
+
+.checkbox-info input[type="checkbox"]:checked + label::before,
+.checkbox-info input[type="radio"]:checked + label::before {
+  background-color: #5bc0de;
+  border-color: #5bc0de;
+}
+.checkbox-info input[type="checkbox"]:checked + label::after,
+.checkbox-info input[type="radio"]:checked + label::after {
+  color: #fff;
+}
+
+.checkbox-warning input[type="checkbox"]:checked + label::before,
+.checkbox-warning input[type="radio"]:checked + label::before {
+  background-color: #f0ad4e;
+  border-color: #f0ad4e;
+}
+.checkbox-warning input[type="checkbox"]:checked + label::after,
+.checkbox-warning input[type="radio"]:checked + label::after {
+  color: #fff;
+}
+
+.checkbox-success input[type="checkbox"]:checked + label::before,
+.checkbox-success input[type="radio"]:checked + label::before {
+  background-color: #5cb85c;
+  border-color: #5cb85c;
+}
+.checkbox-success input[type="checkbox"]:checked + label::after,
+.checkbox-success input[type="radio"]:checked + label::after {
+  color: #fff;
+}
+
+.radio {
+  padding-left: 20px;
+}
+.radio label {
+  display: inline-block;
+  vertical-align: middle;
+  position: relative;
+  padding-left: 5px;
+}
+.radio label::before {
+  content: "";
+  display: inline-block;
+  position: absolute;
+  width: 17px;
+  height: 17px;
+  left: 0;
+  margin-left: -20px;
+  border: 1px solid #cccccc;
+  border-radius: 50%;
+  background-color: #fff;
+  -webkit-transition: border 0.15s ease-in-out;
+  -o-transition: border 0.15s ease-in-out;
+  transition: border 0.15s ease-in-out;
+}
+.radio label::after {
+  display: inline-block;
+  position: absolute;
+  content: " ";
+  width: 11px;
+  height: 11px;
+  left: 3px;
+  top: 3px;
+  margin-left: -20px;
+  border-radius: 50%;
+  background-color: #555555;
+  -webkit-transform: scale(0, 0);
+  -ms-transform: scale(0, 0);
+  -o-transform: scale(0, 0);
+  transform: scale(0, 0);
+  -webkit-transition: -webkit-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);
+  -moz-transition: -moz-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);
+  -o-transition: -o-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);
+  transition: transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);
+}
+.radio input[type="radio"] {
+  opacity: 0;
+  z-index: 1;
+}
+.radio input[type="radio"]:focus + label::before {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+.radio input[type="radio"]:checked + label::after {
+  -webkit-transform: scale(1, 1);
+  -ms-transform: scale(1, 1);
+  -o-transform: scale(1, 1);
+  transform: scale(1, 1);
+}
+.radio input[type="radio"]:disabled + label {
+  opacity: 0.65;
+}
+.radio input[type="radio"]:disabled + label::before {
+  cursor: not-allowed;
+}
+.radio.radio-inline {
+  margin-top: 0;
+}
+
+.radio-primary input[type="radio"] + label::after {
+  background-color: #337ab7;
+}
+.radio-primary input[type="radio"]:checked + label::before {
+  border-color: #337ab7;
+}
+.radio-primary input[type="radio"]:checked + label::after {
+  background-color: #337ab7;
+}
+
+.radio-danger input[type="radio"] + label::after {
+  background-color: #d9534f;
+}
+.radio-danger input[type="radio"]:checked + label::before {
+  border-color: #d9534f;
+}
+.radio-danger input[type="radio"]:checked + label::after {
+  background-color: #d9534f;
+}
+
+.radio-info input[type="radio"] + label::after {
+  background-color: #5bc0de;
+}
+.radio-info input[type="radio"]:checked + label::before {
+  border-color: #5bc0de;
+}
+.radio-info input[type="radio"]:checked + label::after {
+  background-color: #5bc0de;
+}
+
+.radio-warning input[type="radio"] + label::after {
+  background-color: #f0ad4e;
+}
+.radio-warning input[type="radio"]:checked + label::before {
+  border-color: #f0ad4e;
+}
+.radio-warning input[type="radio"]:checked + label::after {
+  background-color: #f0ad4e;
+}
+
+.radio-success input[type="radio"] + label::after {
+  background-color: #5cb85c;
+}
+.radio-success input[type="radio"]:checked + label::before {
+  border-color: #5cb85c;
+}
+.radio-success input[type="radio"]:checked + label::after {
+  background-color: #5cb85c;
+}
+
+input[type="checkbox"].styled:checked + label:after,
+input[type="radio"].styled:checked + label:after {
+  font-family: 'FontAwesome';
+  content: "\f00c";
+}
+input[type="checkbox"] .styled:checked + label::before,
+input[type="radio"] .styled:checked + label::before {
+  color: #fff;
+}
+input[type="checkbox"] .styled:checked + label::after,
+input[type="radio"] .styled:checked + label::after {
+  color: #fff;
+}

+ 268 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/Checkboxes/build.css

@@ -0,0 +1,268 @@
+.checkbox {
+  padding-left: 20px; }
+.checkbox label {
+  display: inline-block;
+  vertical-align: middle;
+  position: relative;
+  padding-left: 5px; }
+.checkbox label::before {
+  content: "";
+  display: inline-block;
+  position: absolute;
+  width: 17px;
+  height: 17px;
+  left: 0;
+  margin-left: -20px;
+  border: 1px solid #cccccc;
+  border-radius: 3px;
+  background-color: #fff;
+  -webkit-transition: border 0.15s ease-in-out, color 0.15s ease-in-out;
+  -o-transition: border 0.15s ease-in-out, color 0.15s ease-in-out;
+  transition: border 0.15s ease-in-out, color 0.15s ease-in-out; }
+.checkbox label::after {
+  display: inline-block;
+  position: absolute;
+  width: 16px;
+  height: 16px;
+  left: 0;
+  top: 0;
+  margin-left: -20px;
+  padding-left: 3px;
+  padding-top: 1px;
+  font-size: 11px;
+  color: #555555; }
+.checkbox input[type="checkbox"],
+.checkbox input[type="radio"] {
+  opacity: 0;
+  z-index: 1; }
+.checkbox input[type="checkbox"]:focus + label::before,
+.checkbox input[type="radio"]:focus + label::before {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px; }
+.checkbox input[type="checkbox"]:checked + label::after,
+.checkbox input[type="radio"]:checked + label::after {
+  font-family: "FontAwesome";
+  content: "\f00c";}
+.checkbox input[type="checkbox"]:indeterminate + label::after,
+.checkbox input[type="radio"]:indeterminate + label::after {
+  display: block;
+  content: "";
+  width: 10px;
+  height: 3px;
+  background-color: #555555;
+  border-radius: 2px;
+  margin-left: -16.5px;
+  margin-top: 7px;
+}
+.checkbox input[type="checkbox"]:disabled + label,
+.checkbox input[type="radio"]:disabled + label {
+      opacity: 0.65; }
+.checkbox input[type="checkbox"]:disabled + label::before,
+.checkbox input[type="radio"]:disabled + label::before {
+  background-color: #eeeeee;
+        cursor: not-allowed; }
+.checkbox.checkbox-circle label::before {
+    border-radius: 50%; }
+.checkbox.checkbox-inline {
+    margin-top: 0; }
+
+.checkbox-primary input[type="checkbox"]:checked + label::before,
+.checkbox-primary input[type="radio"]:checked + label::before {
+  background-color: #337ab7;
+  border-color: #337ab7; }
+.checkbox-primary input[type="checkbox"]:checked + label::after,
+.checkbox-primary input[type="radio"]:checked + label::after {
+  color: #fff; }
+
+.checkbox-danger input[type="checkbox"]:checked + label::before,
+.checkbox-danger input[type="radio"]:checked + label::before {
+  background-color: #d9534f;
+  border-color: #d9534f; }
+.checkbox-danger input[type="checkbox"]:checked + label::after,
+.checkbox-danger input[type="radio"]:checked + label::after {
+  color: #fff; }
+
+.checkbox-info input[type="checkbox"]:checked + label::before,
+.checkbox-info input[type="radio"]:checked + label::before {
+  background-color: #5bc0de;
+  border-color: #5bc0de; }
+.checkbox-info input[type="checkbox"]:checked + label::after,
+.checkbox-info input[type="radio"]:checked + label::after {
+  color: #fff; }
+
+.checkbox-warning input[type="checkbox"]:checked + label::before,
+.checkbox-warning input[type="radio"]:checked + label::before {
+  background-color: #f0ad4e;
+  border-color: #f0ad4e; }
+.checkbox-warning input[type="checkbox"]:checked + label::after,
+.checkbox-warning input[type="radio"]:checked + label::after {
+  color: #fff; }
+
+.checkbox-success input[type="checkbox"]:checked + label::before,
+.checkbox-success input[type="radio"]:checked + label::before {
+  background-color: #5cb85c;
+  border-color: #5cb85c; }
+.checkbox-success input[type="checkbox"]:checked + label::after,
+.checkbox-success input[type="radio"]:checked + label::after {
+  color: #fff;}
+
+.checkbox-primary input[type="checkbox"]:indeterminate + label::before,
+.checkbox-primary input[type="radio"]:indeterminate + label::before {
+  background-color: #337ab7;
+  border-color: #337ab7;
+}
+
+.checkbox-primary input[type="checkbox"]:indeterminate + label::after,
+.checkbox-primary input[type="radio"]:indeterminate + label::after {
+  background-color: #fff;
+}
+
+.checkbox-danger input[type="checkbox"]:indeterminate + label::before,
+.checkbox-danger input[type="radio"]:indeterminate + label::before {
+  background-color: #d9534f;
+  border-color: #d9534f;
+}
+
+.checkbox-danger input[type="checkbox"]:indeterminate + label::after,
+.checkbox-danger input[type="radio"]:indeterminate + label::after {
+  background-color: #fff;
+}
+
+.checkbox-info input[type="checkbox"]:indeterminate + label::before,
+.checkbox-info input[type="radio"]:indeterminate + label::before {
+  background-color: #5bc0de;
+  border-color: #5bc0de;
+}
+
+.checkbox-info input[type="checkbox"]:indeterminate + label::after,
+.checkbox-info input[type="radio"]:indeterminate + label::after {
+  background-color: #fff;
+}
+
+.checkbox-warning input[type="checkbox"]:indeterminate + label::before,
+.checkbox-warning input[type="radio"]:indeterminate + label::before {
+  background-color: #f0ad4e;
+  border-color: #f0ad4e;
+}
+
+.checkbox-warning input[type="checkbox"]:indeterminate + label::after,
+.checkbox-warning input[type="radio"]:indeterminate + label::after {
+  background-color: #fff;
+}
+
+.checkbox-success input[type="checkbox"]:indeterminate + label::before,
+.checkbox-success input[type="radio"]:indeterminate + label::before {
+  background-color: #5cb85c;
+  border-color: #5cb85c;
+}
+
+.checkbox-success input[type="checkbox"]:indeterminate + label::after,
+.checkbox-success input[type="radio"]:indeterminate + label::after {
+  background-color: #fff;
+}
+
+.radio {
+  padding-left: 20px; }
+.radio label {
+  display: inline-block;
+  vertical-align: middle;
+  position: relative;
+    padding-left: 5px; }
+.radio label::before {
+  content: "";
+  display: inline-block;
+  position: absolute;
+  width: 17px;
+  height: 17px;
+  left: 0;
+  margin-left: -20px;
+  border: 1px solid #cccccc;
+  border-radius: 50%;
+  background-color: #fff;
+  -webkit-transition: border 0.15s ease-in-out;
+  -o-transition: border 0.15s ease-in-out;
+      transition: border 0.15s ease-in-out; }
+.radio label::after {
+  display: inline-block;
+  position: absolute;
+  content: " ";
+  width: 11px;
+  height: 11px;
+  left: 3px;
+  top: 3px;
+  margin-left: -20px;
+  border-radius: 50%;
+  background-color: #555555;
+  -webkit-transform: scale(0, 0);
+  -ms-transform: scale(0, 0);
+  -o-transform: scale(0, 0);
+  transform: scale(0, 0);
+  -webkit-transition: -webkit-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);
+  -moz-transition: -moz-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);
+  -o-transition: -o-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);
+      transition: transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); }
+.radio input[type="radio"] {
+  opacity: 0;
+    z-index: 1; }
+.radio input[type="radio"]:focus + label::before {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+      outline-offset: -2px; }
+.radio input[type="radio"]:checked + label::after {
+  -webkit-transform: scale(1, 1);
+  -ms-transform: scale(1, 1);
+  -o-transform: scale(1, 1);
+      transform: scale(1, 1); }
+.radio input[type="radio"]:disabled + label {
+      opacity: 0.65; }
+.radio input[type="radio"]:disabled + label::before {
+        cursor: not-allowed; }
+.radio.radio-inline {
+    margin-top: 0; }
+
+.radio-primary input[type="radio"] + label::after {
+  background-color: #337ab7; }
+.radio-primary input[type="radio"]:checked + label::before {
+  border-color: #337ab7; }
+.radio-primary input[type="radio"]:checked + label::after {
+  background-color: #337ab7; }
+
+.radio-danger input[type="radio"] + label::after {
+  background-color: #d9534f; }
+.radio-danger input[type="radio"]:checked + label::before {
+  border-color: #d9534f; }
+.radio-danger input[type="radio"]:checked + label::after {
+  background-color: #d9534f; }
+
+.radio-info input[type="radio"] + label::after {
+  background-color: #5bc0de; }
+.radio-info input[type="radio"]:checked + label::before {
+  border-color: #5bc0de; }
+.radio-info input[type="radio"]:checked + label::after {
+  background-color: #5bc0de; }
+
+.radio-warning input[type="radio"] + label::after {
+  background-color: #f0ad4e; }
+.radio-warning input[type="radio"]:checked + label::before {
+  border-color: #f0ad4e; }
+.radio-warning input[type="radio"]:checked + label::after {
+  background-color: #f0ad4e; }
+
+.radio-success input[type="radio"] + label::after {
+  background-color: #5cb85c; }
+.radio-success input[type="radio"]:checked + label::before {
+  border-color: #5cb85c; }
+.radio-success input[type="radio"]:checked + label::after {
+  background-color: #5cb85c; }
+
+input[type="checkbox"].styled:checked + label:after,
+input[type="radio"].styled:checked + label:after {
+  font-family: 'FontAwesome';
+  content: "\f00c"; }
+input[type="checkbox"] .styled:checked + label::before,
+input[type="radio"] .styled:checked + label::before {
+  color: #fff; }
+input[type="checkbox"] .styled:checked + label::after,
+input[type="radio"] .styled:checked + label::after {
+  color: #fff; }

+ 121 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/awwwards.css

@@ -0,0 +1,121 @@
+/* --- Awwwards Ribbons --- */
+
+/* Base */
+
+#awwwards {
+	position:fixed;
+	top:30%;
+	z-index:9999;
+}
+
+/* Left */
+
+#awwwards.left {
+	left:0;
+}
+
+/* Right */
+
+#awwwards.right {
+	right:0;
+}
+
+/* Link */
+
+#awwwards a {
+	display:block;
+	width:70px;
+	height:105px;
+	text-indent:-8000px;
+	background-repeat:no-repeat;
+	background-position: 0 0;
+	overflow:hidden;
+}
+
+/* Black */
+
+#awwwards.left.black a {
+	background-image:url('ribbons/awwwards_honorable_black_left.png');
+}
+#awwwards.right.black a {
+	background-image:url('ribbons/awwwards_honorable_black_right.png');
+}
+
+/* White */
+
+#awwwards.left.white a {
+	background-image:url('ribbons/awwwards_honorable_white_left.png');
+}
+#awwwards.right.white a {
+	background-image:url('ribbons/awwwards_honorable_white_right.png');
+}
+
+/* Green */
+
+#awwwards.left.green a {
+	background-image:url('ribbons/awwwards_honorable_green_left.png');
+}
+#awwwards.right.green a {
+	background-image:url('ribbons/awwwards_honorable_green_right.png');
+}
+
+
+/* MEDIA QUERIES */
+
+/* Landscape phone to portrait tablet */
+
+@media (max-width: 767px) {
+
+	/* hidden */
+	#awwwards {
+		display: none;
+	}
+
+}
+
+/* Retina Displays */
+
+/* Target any device with retina display (ie iPad 3 and MacBook Pro) */
+
+@media 
+only screen and (-Webkit-min-device-pixel-ratio: 1.5),
+only screen and (-moz-min-device-pixel-ratio: 1.5),
+only screen and (-o-min-device-pixel-ratio: 3/2),
+only screen and (min-device-pixel-ratio: 1.5) {
+
+	#awwwards a {
+		-moz-background-size: 70px 105px;
+		-ie-background-size:70px 105px;
+		-o-background-size:70px 105px;
+		-webkit-background-size:70px 105px;
+		background-size:70px 105px;
+	}
+
+	/* Gray */
+
+	#awwwards.left.black a {
+		background-image:url('ribbons/awwwards_honorable_black_left2x.png');
+	}
+	#awwwards.right.black a {
+		background-image:url('ribbons/awwwards_honorable_black_right2x.png');
+	}
+
+	/* White */
+
+	#awwwards.left.white a {
+		background-image:url('ribbons/awwwards_honorable_white_left2x.png');
+	}
+	#awwwards.right.white a {
+		background-image:url('ribbons/awwwards_honorable_white_right2x.png');
+	}
+
+	/* Green */
+
+	#awwwards.left.green a {
+		background-image:url('ribbons/awwwards_honorable_green_left2x.png');
+	}
+	#awwwards.right.green a {
+		background-image:url('ribbons/awwwards_honorable_green_right2x.png');
+	}
+	
+}

File diff suppressed because it is too large
+ 5832 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/bootstrap.css


File diff suppressed because it is too large
+ 5831 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/bootstrap.css.map


+ 427 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/dripicon.css

@@ -0,0 +1,427 @@
+
+@charset "UTF-8";
+
+@font-face {
+  font-family: "dripicons";
+  src:url("../font/dripicons.eot");
+  src:url("../font/dripiconsd41d.eot?#iefix") format("embedded-opentype"),
+    url("../font/dripicons.ttf") format("truetype"),
+    url("../font/dripicons.svg#dripicons") format("svg"),
+    url("../font/dripicons.woff") format("woff");
+  font-weight: normal;
+  font-style: normal;
+
+}
+
+[data-icon]:before {
+  font-family: "dripicons";
+  content: attr(data-icon);
+  font-style: normal;
+  font-weight: normal;
+  font-variant: normal;
+  text-transform: none !important;
+  speak: none;
+  display: inline-block;
+  text-decoration: none;
+  width: 1em;
+  line-height: 1em;
+  -webkit-font-smoothing: antialiased;
+}
+
+[class^="icon-"]:before,
+[class*=" icon-"]:before {
+  font-family: "dripicons";
+  font-style: normal;
+  font-weight: normal;
+  font-variant: normal;
+  text-transform: none !important;
+  speak: none;
+  display: inline-block;
+  text-decoration: none;
+  width: 1em;
+  line-height: 1em;
+  -webkit-font-smoothing: antialiased;
+ 
+}
+
+
+.icon-align-center:before {
+  content: "\e000";
+}
+
+.icon-align-justify:before {
+  content: "\e001";
+}
+
+.icon-align-left:before {
+  content: "\e002";
+}
+
+.icon-align-right:before {
+  content: "\e003";
+}
+
+.icon-arrow-down:before {
+  content: "\e004";
+}
+
+.icon-arrow-left:before {
+  content: "\e005";
+}
+
+.icon-arrow-thin-down:before {
+  content: "\e006";
+}
+
+.icon-arrow-right:before {
+  content: "\e007";
+}
+
+.icon-arrow-thin-left:before {
+  content: "\e008";
+}
+
+.icon-arrow-thin-up:before {
+  content: "\e009";
+}
+
+.icon-arrow-up:before {
+  content: "\e010";
+}
+
+.icon-attachment:before {
+  content: "\e011";
+}
+
+.icon-arrow-thin-right:before {
+  content: "\e012";
+}
+
+.icon-code:before {
+  content: "\e013";
+}
+
+.icon-cloud:before {
+  content: "\e014";
+}
+
+.icon-chevron-right:before {
+  content: "\e015";
+}
+
+.icon-chevron-up:before {
+  content: "\e016";
+}
+
+.icon-chevron-down:before {
+  content: "\e017";
+}
+
+.icon-chevron-left:before {
+  content: "\e018";
+}
+
+.icon-camera:before {
+  content: "\e019";
+}
+
+.icon-checkmark:before {
+  content: "\e020";
+}
+
+.icon-calendar:before {
+  content: "\e021";
+}
+
+.icon-clockwise:before {
+  content: "\e022";
+}
+
+.icon-conversation:before {
+  content: "\e023";
+}
+
+.icon-direction:before {
+  content: "\e024";
+}
+
+.icon-cross:before {
+  content: "\e025";
+}
+
+.icon-graph-line:before {
+  content: "\e026";
+}
+
+.icon-gear:before {
+  content: "\e027";
+}
+
+.icon-graph-bar:before {
+  content: "\e028";
+}
+
+.icon-export:before {
+  content: "\e029";
+}
+
+.icon-feed:before {
+  content: "\e030";
+}
+
+.icon-folder:before {
+  content: "\e031";
+}
+
+.icon-forward:before {
+  content: "\e032";
+}
+
+.icon-folder-open:before {
+  content: "\e033";
+}
+
+.icon-download:before {
+  content: "\e034";
+}
+
+.icon-document-new:before {
+  content: "\e035";
+}
+
+.icon-document-edit:before {
+  content: "\e036";
+}
+
+.icon-document:before {
+  content: "\e037";
+}
+
+.icon-gaming:before {
+  content: "\e038";
+}
+
+.icon-graph-pie:before {
+  content: "\e039";
+}
+
+.icon-heart:before {
+  content: "\e040";
+}
+
+.icon-headset:before {
+  content: "\e041";
+}
+
+.icon-help:before {
+  content: "\e042";
+}
+
+.icon-information:before {
+  content: "\e043";
+}
+
+.icon-loading:before {
+  content: "\e044";
+}
+
+.icon-lock:before {
+  content: "\e045";
+}
+
+.icon-location:before {
+  content: "\e046";
+}
+
+.icon-lock-open:before {
+  content: "\e047";
+}
+
+.icon-mail:before {
+  content: "\e048";
+}
+
+.icon-map:before {
+  content: "\e049";
+}
+
+.icon-media-loop:before {
+  content: "\e050";
+}
+
+.icon-mobile-portrait:before {
+  content: "\e051";
+}
+
+.icon-mobile-landscape:before {
+  content: "\e052";
+}
+
+.icon-microphone:before {
+  content: "\e053";
+}
+
+.icon-minus:before {
+  content: "\e054";
+}
+
+.icon-message:before {
+  content: "\e055";
+}
+
+.icon-menu:before {
+  content: "\e056";
+}
+
+.icon-media-stop:before {
+  content: "\e057";
+}
+
+.icon-media-shuffle:before {
+  content: "\e058";
+}
+
+.icon-media-previous:before {
+  content: "\e059";
+}
+
+.icon-media-play:before {
+  content: "\e060";
+}
+
+.icon-media-next:before {
+  content: "\e061";
+}
+
+.icon-media-pause:before {
+  content: "\e062";
+}
+
+.icon-monitor:before {
+  content: "\e063";
+}
+
+.icon-move:before {
+  content: "\e064";
+}
+
+.icon-plus:before {
+  content: "\e065";
+}
+
+.icon-phone:before {
+  content: "\e066";
+}
+
+.icon-preview:before {
+  content: "\e067";
+}
+
+.icon-print:before {
+  content: "\e068";
+}
+
+.icon-media-record:before {
+  content: "\e069";
+}
+
+.icon-music:before {
+  content: "\e070";
+}
+
+.icon-home:before {
+  content: "\e071";
+}
+
+.icon-question:before {
+  content: "\e072";
+}
+
+.icon-reply:before {
+  content: "\e073";
+}
+
+.icon-reply-all:before {
+  content: "\e074";
+}
+
+.icon-return:before {
+  content: "\e075";
+}
+
+.icon-retweet:before {
+  content: "\e076";
+}
+
+.icon-search:before {
+  content: "\e077";
+}
+
+.icon-view-thumb:before {
+  content: "\e078";
+}
+
+.icon-view-list-large:before {
+  content: "\e079";
+}
+
+.icon-view-list:before {
+  content: "\e080";
+}
+
+.icon-upload:before {
+  content: "\e081";
+}
+
+.icon-user-group:before {
+  content: "\e082";
+}
+
+.icon-trash:before {
+  content: "\e083";
+}
+
+.icon-user:before {
+  content: "\e084";
+}
+
+.icon-thumbs-up:before {
+  content: "\e085";
+}
+
+.icon-thumbs-down:before {
+  content: "\e086";
+}
+
+.icon-tablet-portrait:before {
+  content: "\e087";
+}
+
+.icon-tablet-landscape:before {
+  content: "\e088";
+}
+
+.icon-tag:before {
+  content: "\e089";
+}
+
+.icon-star:before {
+  content: "\e090";
+}
+
+.icon-volume-full:before {
+  content: "\e091";
+}
+
+.icon-volume-off:before {
+  content: "\e092";
+}
+
+.icon-warning:before {
+  content: "\e093";
+}
+
+.icon-window:before {
+  content: "\e094";
+}
+

web/health-hb/target/classes/static/admin/assets/css/entypo-icon.css → web/monitor-hb/src/main/resources/static/admin/assets/css/entypo-icon.css


web/health-hb/target/classes/static/admin/bootstarp/ndesaintheme.com/themes/apricot/assets/css/extra-pages.css → web/monitor-hb/src/main/resources/static/admin/assets/css/extra-pages.css


File diff suppressed because it is too large
+ 2337 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/font-awesome.css


+ 22 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/icons-style.css

@@ -0,0 +1,22 @@
+.entypo li, .entypo-tooltip li {
+    float: left;
+    height: 10%;
+    padding: 0.5em;
+    position: relative;
+    text-align: center;
+      -webkit-transition: all 0.5s ease;
+     -moz-transition: all 0.5s ease;
+       -o-transition: all 0.5s ease;
+      -ms-transition: all 0.5s ease;
+          transition: all 0.5s ease;
+    width: 10%;
+    list-style: none;
+    font-size: 20px;
+    color: #363E49;
+}
+.entypo li:hover, .entypo-tooltip li:hover{
+    color:#000;
+    cursor: pointer;
+
+}
+

web/health-hb/target/classes/static/admin/assets/css/loader-style.css → web/monitor-hb/src/main/resources/static/admin/assets/css/loader-style.css


+ 48 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/mail.css

@@ -0,0 +1,48 @@
+.side-mail{
+/* 	background:#fff;
+	padding:10px; */
+	margin-top:20px;
+}
+.button-mail{
+	margin: 0 0 15px;
+    text-align: left;
+    width: 100%;
+}
+.list-btn-mail{
+	margin-bottom: 15px;
+}
+.list-btn-mail > span {
+	float: left;
+    font-size: 18px;
+    font-style: normal;
+    width: 33px;
+}
+.list-btn-mail > i{	
+	  background: none repeat scroll 0 0 #39B3D7;
+    border-radius: 12px;
+    color: #FFFFFF;
+    float: right;
+    font-style: normal;
+    padding: 0 5px;
+	
+}
+.list-btn-mail > a{
+	color:#666;	
+}
+.list-btn-mail.active {
+    border-bottom: 1px solid #39B3D7;
+    padding: 0 0 14px;
+}
+#content-mail{
+	 background: none repeat scroll 0 0 #FFFFFF;
+    border-radius: 4px;
+    margin-top: 20px;
+    min-height: 500px;
+    padding: 10px 11px;
+    width: 100%;
+}
+.mail_header{
+    border-radius: 4px;
+    margin-top: 20px;
+    width: 100%;
+}

File diff suppressed because it is too large
+ 12 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/maki-icons.css


web/health-hb/target/classes/static/admin/bootstarp/ndesaintheme.com/themes/apricot/assets/css/media.css → web/monitor-hb/src/main/resources/static/admin/assets/css/media.css


web/health-hb/target/classes/static/admin/bootstarp/ndesaintheme.com/themes/apricot/assets/css/open-sans.css → web/monitor-hb/src/main/resources/static/admin/assets/css/open-sans.css


+ 138 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/profile.css

@@ -0,0 +1,138 @@
+.img-profile {
+    margin:0 auto;
+    text-align:left;
+    width:13em;
+    height:13em;
+}
+.profile {
+    min-height: 355px;
+    display: inline-block;
+    margin-top: 40px;
+    background: rgba(255, 255, 255, 0.5)!important;
+}
+.profile-edit {
+    min-height: 355px;
+    display: inline-block;
+    margin: 40px 20px 0 20px;
+    background: rgba(255, 255, 255, 0.5)!important;
+    width: 100%!important;
+}
+.ratings {
+    margin: 0;
+    text-align: right;
+}
+.ratings a {
+    color: #F1C40F;
+    font-size: 13px;
+}
+.ratings a:hover {
+    color:#f39c12;
+    text-decoration:none;
+}
+.divider {
+    border-top:1px solid rgba(0, 0, 0, 0.1);
+}
+.emphasis {
+    border-top: 4px solid transparent;
+}
+.emphasis:hover {
+    border-top: 4px solid #1abc9c;
+}
+.emphasis h2 {
+    margin-bottom:0;
+}
+span.tags {
+    background: #1abc9c;
+    border-radius: 2px;
+    color: #f5f5f5;
+    font-weight: bold;
+    padding: 2px 4px;
+}
+.dropdown-menu {
+/*    background-color: #34495e;
+    box-shadow: none;
+    -webkit-box-shadow: none;
+    width: 250px;
+    margin-left: -125px;
+    left: 50%;*/
+}
+.dropdown-menu .divider {
+    background:none;
+}
+.dropdown-menu>li>a {
+    color:#f5f5f5;
+}
+.dropup .dropdown-menu {
+    margin-bottom:10px;
+}
+.dropup .dropdown-menu:before {
+    content:"";
+    border-top: 10px solid #34495e;
+    border-right: 10px solid transparent;
+    border-left: 10px solid transparent;
+    position: absolute;
+    bottom: -10px;
+    left: 50%;
+    margin-left: -10px;
+    z-index: 10;
+}
+.btn-file {
+    position: relative;
+    overflow: hidden;
+}
+.btn-file input[type=file] {
+    position: absolute;
+    top: 0;
+    right: 0;
+    min-width: 100%;
+    min-height: 100%;
+    font-size: 999px;
+    text-align: right;
+    filter: alpha(opacity=0);
+    opacity: 0;
+    outline: none;
+    background: white;
+    cursor: inherit;
+    display: block;
+}
+.profile-name{
+    background-color: rgba(255, 255, 255, 0.1) !important;
+    border: 1px solid #EEEEEE !important;
+    border-radius: 4px;
+    margin-bottom: 20px;
+}
+.social-profile i{
+    font-style: normal;
+    cursor: pointer;
+}
+.profile-content{
+    border-bottom: 1px dashed #eee;
+    width: 100%;
+    padding: 5px 0;
+}
+..profile-content > span{
+    width: 100px;
+}
+.profile-content > i {
+    font-style: normal;
+    padding: 0 30px;
+}
+.dl-horizontal-profile dt {
+    clear: left;
+    float: left;
+    overflow: hidden;
+    padding: 8px 0;
+    text-align: left;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    width: 160px;
+}
+.dl-horizontal-profile dd{
+     padding: 8px 0;
+  
+
+}
+.dl-horizontal-profile dd:before{
+    content: ":";
+    padding-right: 20px;
+

BIN
web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_black_left.png


web/health-hb/target/classes/static/admin/assets/css/ribbons/awwwards_honorable_black_left2x.png → web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_black_left2x.png


BIN
web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_black_right.png


web/health-hb/target/classes/static/admin/assets/css/ribbons/awwwards_honorable_black_right2x.png → web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_black_right2x.png


BIN
web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_green_left.png


BIN
web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_green_left2x.png


BIN
web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_green_right.png


BIN
web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_green_right2x.png


BIN
web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_white_left.png


BIN
web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_white_left2x.png


BIN
web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_white_right.png


BIN
web/monitor-hb/src/main/resources/static/admin/assets/css/ribbons/awwwards_honorable_white_right2x.png


+ 226 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/signin.css

@@ -0,0 +1,226 @@
+/* maki */
+[class*="maki-"]:before {
+    font-family:'maki', sans-serif;
+}
+/* entypo */
+[class*="entypo-"]:before {
+    font-family:'entypo', sans-serif;
+}
+/* fontawesome */
+[class*="fontawesome-"]:before {
+    font-family:'FontAwesome', sans-serif;
+}
+body {
+    color: #9ea7b3!important;
+    font-family:"Open Sans", Arial, sans-serif!important;
+    font-size: 13px!important;
+    line-height: 20px;
+    overflow-x: hidden!important;
+    min-height: 100%;
+    z-index: -2;
+    margin: 0px !important;
+    background: url('../img/bg.jpg') no-repeat top center fixed;
+    -moz-background-size: cover;
+    -webkit-background-size: cover;
+    -o-background-size: cover;
+    background-size: cover;
+}
+#login-wrapper {
+    margin: 50px auto 0;
+    position: relative;
+    z-index: 5;
+}
+#logo-login {
+    background: rgba(48, 65, 96, 0.8);
+    border-radius: 3px 3px 0 0;
+    color: #FFFFFF;
+    padding: 1px 0 14px 25px;
+    ;
+}
+#logo-login h1 {
+    color: #FFFFFF;
+    font-size: 30px;
+    font-weight: 200;
+    letter-spacing: -1px;
+    text-decoration: inherit;
+    
+}
+#logo-login h1 span {
+    background: none repeat scroll 0 0 rgba(0, 0, 0, 0.2);
+    border-radius: 3px;
+    font-size: 11px;
+    margin-left: 0;
+    padding: 0 5px;
+    position: relative;
+    top: -3px;
+}
+#login-wrapper3 {
+    background: none repeat scroll 0 0 #FFFFFF;
+    border-radius: 4px;
+    margin: 0 auto;
+    padding: 10px;
+    width: 60%;
+    position:relative;
+    top:0px;
+    left:0;
+    z-index:200;
+}
+.form-signin {
+    margin: 0 auto;
+    padding: 15px;
+}
+.form-signin .form-signin-heading, .form-signin .checkbox {
+    margin-bottom: 10px;
+}
+.form-signin .checkbox {
+    font-weight: normal;
+}
+.form-signin .form-control {
+    -moz-box-sizing: border-box;
+    font-size: 13px;
+    height: auto;
+    padding: 10px;
+    position: relative;
+}
+.form-signin .form-control:focus {
+    z-index: 2;
+}
+.form-signin input[type="email"] {
+    border-bottom-left-radius: 0;
+    border-bottom-right-radius: 0;
+    margin-bottom: -1px;
+}
+.form-signin input[type="password"] {
+    border-top-left-radius: 0;
+    border-top-right-radius: 0;
+    margin-bottom: 10px;
+}
+.input-group-addon, .btn-fltees:hover {
+    background: none repeat scroll 0 0 #10ABCE !important;
+    border: 1px solid #10ABCE !important;
+    color: #FFFFFF;
+}
+.btn-fltees {
+    background: none repeat scroll 0 0 #0DB8DF !important;
+    border: 1px solid #0DB8DF!important;
+}
+.form-control:focus {
+    border-color: #0DB8DF !important;
+    box-shadow: none!important;
+    outline: 0 none;
+}
+.gmap3 {
+    height: 150%;
+    margin: 0;
+    position: fixed!important;
+    top: 0;
+    width: 100%;
+    z-index: 0;
+    left:0;
+    opacity:0.3;
+    background: url(/static/admin/images/baidu.png);
+}
+#logo-wrapper {
+    width: 100%;
+    height:60px;
+}
+#logo-wrapper > img {
+    height:30px;
+}
+/*
+    Login  Coustom
+*/
+ .account-box {
+  
+    -moz-border-radius: 0 0 4px 4px
+    -webkit-border-radius: 0 0 4px 4px;
+    -khtml-border-radius: 0 0 4px 4px;
+    border-radius: 0 0 4px 4px;
+    z-index: 3;
+    font-size: 13px !important;
+    font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
+    background-color: #ffffff;
+    padding: 20px;
+}
+.logo {
+    width: 138px;
+    height: 30px;
+    text-align: center;
+    margin: 10px 0px 27px 40px;
+    background-position: 0px -4px;
+    position: relative;
+}
+.forgotLnk {
+    margin-top: 10px;
+    display: block;
+}
+.purple-bg {
+    background-color: #6E329D;
+    color: #fff;
+}
+.or-box {
+     border-top: 1px solid #DFDFDF;
+    margin-bottom: 0;
+    margin-top: 80px;
+    padding-top: 20px;
+    position: relative;
+}
+.or {
+    background-color: #FFFFFF;
+    color: #666666;
+    position: relative;
+    text-align: center;
+    top: -30px;
+    width: 60px;
+    padding:0 10px;
+}
+.account-box .btn:hover {
+    color: #fff;
+}
+.btn-facebook {
+    background-color: #3B5998;
+    color: #fff;
+    font-weight:bold;
+}
+.btn-google {
+    background-color: #C32F10;
+    color: #fff;
+    font-weight:bold;
+}
+.btn-twitter {
+    background-color: #00ACED;
+    color: #fff;
+    font-weight:bold;
+}
+.btn-instagram {
+    background-color: #316698;
+    color: #fff;
+    font-weight:bold;
+}
+.label-forgot {
+    font-size: 11px;
+    color: #3276B1;
+}
+.label-forgot:hover {
+    text-decoration: none;
+}
+.space-icon {
+    border-right: 1px solid rgba(0, 0, 0, 0.1);
+    box-shadow: 1px 0 0 rgba(255, 255, 255, 0.1);
+    margin-right: 10px;
+    padding-right: 10px;
+}
+.login-with {
+    background: none repeat scroll 0 0 #FFFFFF;
+    font-size: 14px;
+    font-weight: bold;
+    margin: 0 auto;
+    padding: 0 10px;
+    position: relative;
+    text-align: center;
+    top: -33px;
+}
+.login-with b{
+    color: #00ACED;
+    cursor: pointer;
+}

+ 362 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/social.css

@@ -0,0 +1,362 @@
+.social-wrap {
+    padding: 0 15px;
+    margin-top: 40px;
+}
+.wrapper, .row {
+    margin-left:0;
+    margin-right:0;
+}
+.wrapper:before, .wrapper:after, .column:before, .column:after {
+    content:"";
+    display: table;
+}
+.wrapper:after, .column:after {
+    clear: both;
+}
+.column {
+    height: 100%;
+    overflow: auto;
+    *zoom:1;
+}
+.column .padding {
+    padding: 20px;
+}
+.full {
+    padding-top:70px;
+}
+.box {
+    bottom: 0;
+    /* increase for footer use */
+    left: 0;
+    position: absolute;
+    right: 0;
+    top: 0;
+    background-color:#444444;
+    /*
+    background-image:url('/assets/example/bg_suburb.jpg');
+    background-size:cover;
+    background-attachment:fixed;
+  */
+}
+.divider {
+    margin-top:32px;
+}
+.navbar-blue {
+    border-width:0;
+    background-color:#3B5999;
+    color:#ffffff;
+    font-family:arial, sans-serif;
+    top:0;
+    position:fixed;
+    width:inherit;
+}
+.navbar-blue li > a, .navbar-toggle {
+    color:#efefef;
+}
+.navbar-blue .dropdown-menu li a {
+    color:#2A4888;
+}
+.navbar-blue .dropdown-menu li > a {
+    padding-left:30px;
+}
+.navbar-blue li>a:hover, .navbar-blue li>a:focus, .navbar-blue .open, .navbar-blue .open>a, .navbar-blue .open>a:hover, .navbar-blue .open>a:focus {
+    background-color:#2A4888;
+    color:#fff;
+}
+
+.logo {
+    display:block;
+    padding:3px;
+    background-color:#fff;
+    color:#3B5999;
+    height:28px;
+    width:28px;
+    margin:9px;
+    margin-right:2px;
+    margin-left:15px;
+    font-size:20px;
+    font-weight:700;
+    text-align:center;
+    text-decoration:none;
+    text-shadow:0 0 1px;
+    border-radius:2px;
+}
+#sidebar-footer {
+    background-color:#444;
+    position:absolute;
+    bottom:5px;
+    padding:5px;
+}
+
+/* bootstrap overrides */
+ h1, h2, h3 {
+    font-weight:800;
+}
+.navbar-toggle, .close {
+    outline:0;
+}
+.navbar-toggle .icon-bar {
+    background-color: #fff;
+}
+.btn-primary, .label-primary, .list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {
+    background-color:#3B5999;
+    color:#fffffe;
+}
+.btn-default {
+    color:#666666;
+    text-shadow:0 0 1px rgba(0, 0, 0, .3);
+}
+.form-control {
+}
+.panel textarea, .well textarea, textarea.form-control {
+    resize: none;
+}
+.badge {
+    color:#3B5999;
+    background-color:#fff;
+}
+.badge:hover, .badge-inverse {
+    background-color:#3B5999;
+    color:#fff;
+}
+.jumbotron {
+    background-color:transparent;
+}
+.label-default {
+    background-color:#dddddd;
+}
+.page-header {
+    margin-top: 55px;
+    padding-top: 9px;
+    border-top:1px solid #eeeeee;
+    font-weight:700;
+    text-transform:uppercase;
+    letter-spacing:2px;
+}
+.panel-default .panel-heading {
+    background-color:#f9fafb;
+    color:#555555;
+}
+.panel-default .panel-fb {
+    background-color: #0090D9;
+    border-radius: 4px 4px 0 0;
+    color: #FFFFFF;
+    height: 60px;
+    line-height: 60px;
+    padding: 10px 0 10px 15px;
+}
+.panel-default .panel-fb h4 span {
+    font-weight: 300;
+    text-transform: uppercase;
+    font-size: 30px;
+    line-height: 14px;
+}
+.col-sm-9.full {
+    width: 100%;
+}
+.modal-header, .modal-footer {
+    background-color:#f2f2f2;
+    font-weight:800;
+    font-size:12px;
+}
+.modal-footer i, .well i {
+    font-size:20px;
+    color:#c0c0c0;
+}
+.modal-body {
+    padding:0px;
+}
+.modal-body textarea.form-control {
+    resize: none;
+    border:0;
+    box-shadow:0 0 0;
+}
+small.text-muted {
+    font-family:courier, courier-new, monospace;
+}
+/* adjust the contents on smaller devices */
+ @media (max-width: 768px) {
+    .column .padding {
+        padding: 7px;
+    }
+    .full {
+        padding-top:20px;
+    }
+    .navbar-blue {
+        background-color:#3B5999;
+        top:0;
+        width:100%;
+        position:relative;
+    }
+}
+/*
+ * off canvas sidebar
+ * --------------------------------------------------
+ */
+ @media screen and (max-width: 768px) {
+    .row-offcanvas {
+        position: relative;
+        -webkit-transition: all 0.25s ease-out;
+        -moz-transition: all 0.25s ease-out;
+        transition: all 0.25s ease-out;
+    }
+    .row-offcanvas-left.active {
+        left: 33%;
+    }
+    .row-offcanvas-left.active .sidebar-offcanvas {
+        left: -33%;
+        position: absolute;
+        top: 0;
+        width: 33%;
+        margin-left: 5px;
+    }
+    #sidebar, #sidebar a, #sidebar-footer a {
+        padding-left:3px;
+    }
+}
+.panel-facebook {
+    border-radius: 4px 4px 0 0;
+    height: 150px;
+    text-align: center;
+    width: 100%;
+    background: #0090D9;
+}
+.panel-twitter {
+    border-radius: 4px 4px 0 0;
+    height: 150px;
+    text-align: center;
+    width: 100%;
+    background: #0AA699;
+}
+.panel-instagram {
+    border-radius: 4px 4px 0 0;
+    height: 150px;
+    text-align: center;
+    width: 100%;
+    background: #3E739D;
+}
+.panel-google {
+    border-radius: 4px 4px 0 0;
+    height: 150px;
+    text-align: center;
+    width: 100%;
+    background: #FF6B6B;
+}
+.middle-social {
+    color: #ffffff;
+    font-size: 8em;
+}
+.social-pic {
+    border: 2px solid rgba(0, 0, 0, 0.1);
+    display: inline-block;
+    float: left;
+    margin-right: 5px;
+    width: 35px;
+}
+.link-social {
+    background: none repeat scroll 0 0 #eee;
+    border-radius: 50%;
+    color: #FFFFFF;
+    float: right;
+    font-size: 18px;
+    height: 32px;
+    line-height: 31px;
+    text-align: center;
+    width: 32px;
+    margin-left:3px;
+}
+.link-social:hover {
+    background: none repeat scroll 0 0 #9EA7B3 ;
+    color: #FFFFFF;
+}
+.link-post {
+    border-radius: 50%;
+    color: #FFFFFF;
+    float: right;
+    font-size: 14px;
+    height: 32px;
+    line-height: 31px;
+    margin-left: 3px;
+    margin-right: 15px;
+    margin-top: 5px;
+    text-align: center;
+}
+.social-header {
+    border-bottom: 1px solid #EEEEEE;
+    height: 35px;
+    margin: -5px 0 20px;
+}
+.social-header > a {
+    margin-left: 0;
+    padding-right: 6px;
+}
+.social-header > a > span{
+    padding-right: 6px;
+}
+.social-profile > h3 {
+    font-size: 15px;
+    position: relative;
+    right: -20px;
+    margin: 0;
+}
+.social-profile > h3 > span {
+    font-weight: 300;
+    font-size: 12px;
+}
+.social-profile > h3 > span > i {
+    font-style: normal;
+    margin: 0 0 0 8px;
+}
+.social-profile > p {
+    margin-top: 5px;
+    position: relative;
+    right: -20px;
+}
+.img-social-content {
+    height:40px;
+    width: 40px;
+    margin-right: 10px;
+}
+.social-content ul li span b {
+    font-weight: 300;
+}
+.social-content li {
+    display: inline-block;
+    margin-bottom: 15px;
+    width: 100%;
+}
+.img-responsive-social{
+     display: block;
+    height: auto;
+    width: 100%;
+
+}
+.instagram-color{
+    background:#3E739D!important;
+}
+.insta-color{
+color:#3E739D!important;
+}
+.lead > i {
+    color: #3E739D;
+    cursor: pointer;
+    font-size: 13px;
+    font-style: normal;
+    margin-right: 6px;
+}
+.tweet-bgcolor{
+    background:#0AA699!important;
+}
+.tweet-link{
+    color:#0AA699!important;
+}
+.gplus-color{
+    background:#FF6B6B!important;
+}
+.gplus-textcolor{
+    color: #FF6B6B!important;
+}
+
+
+
+

File diff suppressed because it is too large
+ 3070 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/style.css


File diff suppressed because it is too large
+ 28 - 0
web/monitor-hb/src/main/resources/static/admin/assets/css/weather-icons.min.css


+ 370 - 0
web/monitor-hb/src/main/resources/static/admin/assets/font-ali/demo.css

@@ -0,0 +1,370 @@
+*{margin: 0;padding: 0;list-style: none;}
+/*
+KISSY CSS Reset
+理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。
+2. reset 的目的不是让默认样式在所有浏览器下一致,而是减少默认样式有可能带来的问题。
+3. reset 期望提供一套普适通用的基础样式。但没有银弹,推荐根据具体需求,裁剪和修改后再使用。
+特色:1. 适应中文;2. 基于最新主流浏览器。
+维护:玉伯<lifesinger@gmail.com>, 正淳<ragecarrier@gmail.com>
+ */
+
+/** 清除内外边距 **/
+body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */
+dl, dt, dd, ul, ol, li, /* list elements 列表元素 */
+pre, /* text formatting elements 文本格式元素 */
+form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */
+th, td /* table elements 表格元素 */ {
+  margin: 0;
+  padding: 0;
+}
+
+/** 设置默认字体 **/
+body,
+button, input, select, textarea /* for ie */ {
+  font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif;
+}
+h1, h2, h3, h4, h5, h6 { font-size: 100%; }
+address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */
+code, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */
+small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */
+
+/** 重置列表元素 **/
+ul, ol { list-style: none; }
+
+/** 重置文本格式元素 **/
+a { text-decoration: none; }
+a:hover { text-decoration: underline; }
+
+
+/** 重置表单元素 **/
+legend { color: #000; } /* for ie6 */
+fieldset, img { border: 0; } /* img 搭车:让链接里的 img 无边框 */
+button, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */
+/* 注:optgroup 无法扶正 */
+
+/** 重置表格元素 **/
+table { border-collapse: collapse; border-spacing: 0; }
+
+/* 清除浮动 */
+.ks-clear:after, .clear:after {
+  content: '\20';
+  display: block;
+  height: 0;
+  clear: both;
+}
+.ks-clear, .clear {
+  *zoom: 1;
+}
+
+.main {
+  padding: 30px 100px;
+width: 960px;
+margin: 0 auto;
+}
+.main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;}
+
+.helps{margin-top:40px;}
+.helps pre{
+  padding:20px;
+  margin:10px 0;
+  border:solid 1px #e7e1cd;
+  background-color: #fffdef;
+  overflow: auto;
+}
+
+.icon_lists{
+  width: 100% !important;
+
+}
+
+.icon_lists li{
+  float:left;
+  width: 100px;
+  height:180px;
+  text-align: center;
+  list-style: none !important;
+}
+.icon_lists .icon{
+  font-size: 42px;
+  line-height: 100px;
+  margin: 10px 0;
+  color:#333;
+  -webkit-transition: font-size 0.25s ease-out 0s;
+  -moz-transition: font-size 0.25s ease-out 0s;
+  transition: font-size 0.25s ease-out 0s;
+
+}
+.icon_lists .icon:hover{
+  font-size: 100px;
+}
+
+
+
+.markdown {
+  color: #666;
+  font-size: 14px;
+  line-height: 1.8;
+}
+
+.highlight {
+  line-height: 1.5;
+}
+
+.markdown img {
+  vertical-align: middle;
+  max-width: 100%;
+}
+
+.markdown h1 {
+  color: #404040;
+  font-weight: 500;
+  line-height: 40px;
+  margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+  color: #404040;
+  margin: 1.6em 0 0.6em 0;
+  font-weight: 500;
+  clear: both;
+}
+
+.markdown h1 {
+  font-size: 28px;
+}
+
+.markdown h2 {
+  font-size: 22px;
+}
+
+.markdown h3 {
+  font-size: 16px;
+}
+
+.markdown h4 {
+  font-size: 14px;
+}
+
+.markdown h5 {
+  font-size: 12px;
+}
+
+.markdown h6 {
+  font-size: 12px;
+}
+
+.markdown hr {
+  height: 1px;
+  border: 0;
+  background: #e9e9e9;
+  margin: 16px 0;
+  clear: both;
+}
+
+.markdown p,
+.markdown pre {
+  margin: 1em 0;
+}
+
+.markdown > p,
+.markdown > blockquote,
+.markdown > .highlight,
+.markdown > ol,
+.markdown > ul {
+  width: 80%;
+}
+
+.markdown ul > li {
+  list-style: circle;
+}
+
+.markdown > ul li,
+.markdown blockquote ul > li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown > ul li p,
+.markdown > ol li p {
+  margin: 0.6em 0;
+}
+
+.markdown ol > li {
+  list-style: decimal;
+}
+
+.markdown > ol li,
+.markdown blockquote ol > li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown code {
+  margin: 0 3px;
+  padding: 0 5px;
+  background: #eee;
+  border-radius: 3px;
+}
+
+.markdown pre {
+  border-radius: 6px;
+  background: #f7f7f7;
+  padding: 20px;
+}
+
+.markdown pre code {
+  border: none;
+  background: #f7f7f7;
+  margin: 0;
+}
+
+.markdown strong,
+.markdown b {
+  font-weight: 600;
+}
+
+.markdown > table {
+  border-collapse: collapse;
+  border-spacing: 0px;
+  empty-cells: show;
+  border: 1px solid #e9e9e9;
+  width: 95%;
+  margin-bottom: 24px;
+}
+
+.markdown > table th {
+  white-space: nowrap;
+  color: #333;
+  font-weight: 600;
+
+}
+
+.markdown > table th,
+.markdown > table td {
+  border: 1px solid #e9e9e9;
+  padding: 8px 16px;
+  text-align: left;
+}
+
+.markdown > table th {
+  background: #F7F7F7;
+}
+
+.markdown blockquote {
+  font-size: 90%;
+  color: #999;
+  border-left: 4px solid #e9e9e9;
+  padding-left: 0.8em;
+  margin: 1em 0;
+  font-style: italic;
+}
+
+.markdown blockquote p {
+  margin: 0;
+}
+
+.markdown .anchor {
+  opacity: 0;
+  transition: opacity 0.3s ease;
+  margin-left: 8px;
+}
+
+.markdown .waiting {
+  color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+  opacity: 1;
+  display: inline-block;
+}
+
+.markdown > br,
+.markdown > p > br {
+  clear: both;
+}
+
+
+.hljs {
+  display: block;
+  background: white;
+  padding: 0.5em;
+  color: #333333;
+  overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+  color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+  color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+  color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+  color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+  color: #63a35c;
+}
+
+.hljs-tag {
+  color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #795da3;
+}
+
+.hljs-addition {
+  color: #55a532;
+  background-color: #eaffea;
+}
+
+.hljs-deletion {
+  color: #bd2c00;
+  background-color: #ffecec;
+}
+
+.hljs-link {
+  text-decoration: underline;
+}
+
+pre{
+  background: #fff;
+}
+
+
+
+
+

+ 142 - 0
web/monitor-hb/src/main/resources/static/admin/assets/font-ali/demo_fontclass.html

@@ -0,0 +1,142 @@
+
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8"/>
+    <title>IconFont</title>
+    <link rel="stylesheet" href="demo.css">
+    <link rel="stylesheet" href="iconfont.css">
+</head>
+<body>
+    <div class="main markdown">
+        <h1>IconFont 图标</h1>
+        <ul class="icon_lists clear">
+            
+                <li>
+                <i class="icon iconfont icon-sousuo"></i>
+                    <div class="name">搜索</div>
+                    <div class="fontclass">.icon-sousuo</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-xiaoxi"></i>
+                    <div class="name">消息</div>
+                    <div class="fontclass">.icon-xiaoxi</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-quanxian"></i>
+                    <div class="name">权限</div>
+                    <div class="fontclass">.icon-quanxian</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-rili"></i>
+                    <div class="name">日历</div>
+                    <div class="fontclass">.icon-rili</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-icon_help"></i>
+                    <div class="name">帮助</div>
+                    <div class="fontclass">.icon-icon_help</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-calender-office-date-schedule-manage--cfdfcadc"></i>
+                    <div class="name">日历</div>
+                    <div class="fontclass">.icon-calender-office-date-schedule-manage--cfdfcadc</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-yibiaopan"></i>
+                    <div class="name">图表-仪表盘</div>
+                    <div class="fontclass">.icon-yibiaopan</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-web-icon-"></i>
+                    <div class="name">时间</div>
+                    <div class="fontclass">.icon-web-icon-</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-xinxi"></i>
+                    <div class="name">信息</div>
+                    <div class="fontclass">.icon-xinxi</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-bangzhu"></i>
+                    <div class="name">帮助</div>
+                    <div class="fontclass">.icon-bangzhu</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-xiaoxi1"></i>
+                    <div class="name">消息</div>
+                    <div class="fontclass">.icon-xiaoxi1</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-shijian"></i>
+                    <div class="name">时间</div>
+                    <div class="fontclass">.icon-shijian</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-rili1"></i>
+                    <div class="name">日历</div>
+                    <div class="fontclass">.icon-rili1</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-icon-"></i>
+                    <div class="name">设置</div>
+                    <div class="fontclass">.icon-icon-</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-tianqi-"></i>
+                    <div class="name">天气-6</div>
+                    <div class="fontclass">.icon-tianqi-</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-tianqi-1"></i>
+                    <div class="name">天气-16</div>
+                    <div class="fontclass">.icon-tianqi-1</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-tianqi-2"></i>
+                    <div class="name">天气-27</div>
+                    <div class="fontclass">.icon-tianqi-2</div>
+                </li>
+            
+        </ul>
+
+        <h2 id="font-class-">font-class引用</h2>
+        <hr>
+
+        <p>font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题。</p>
+        <p>与unicode使用方式相比,具有如下特点:</p>
+        <ul>
+        <li>兼容性良好,支持ie8+,及所有现代浏览器。</li>
+        <li>相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。</li>
+        <li>因为使用class来定义图标,所以当要替换图标时,只需要修改class里面的unicode引用。</li>
+        <li>不过因为本质上还是使用的字体,所以多色图标还是不支持的。</li>
+        </ul>
+        <p>使用步骤如下:</p>
+        <h3 id="-fontclass-">第一步:引入项目下面生成的fontclass代码:</h3>
+
+
+        <pre><code class="lang-js hljs javascript"><span class="hljs-comment">&lt;link rel="stylesheet" type="text/css" href="./iconfont.css"&gt;</span></code></pre>
+        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
+        <pre><code class="lang-css hljs">&lt;<span class="hljs-selector-tag">i</span> <span class="hljs-selector-tag">class</span>="<span class="hljs-selector-tag">iconfont</span> <span class="hljs-selector-tag">icon-xxx</span>"&gt;&lt;/<span class="hljs-selector-tag">i</span>&gt;</code></pre>
+        <blockquote>
+        <p>"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。</p>
+        </blockquote>
+    </div>
+</body>
+</html>

+ 199 - 0
web/monitor-hb/src/main/resources/static/admin/assets/font-ali/demo_symbol.html

@@ -0,0 +1,199 @@
+
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8"/>
+    <title>IconFont</title>
+    <link rel="stylesheet" href="demo.css">
+    <script src="iconfont.js"></script>
+
+    <style type="text/css">
+        .icon {
+          /* 通过设置 font-size 来改变图标大小 */
+          width: 1em; height: 1em;
+          /* 图标和文字相邻时,垂直对齐 */
+          vertical-align: -0.15em;
+          /* 通过设置 color 来改变 SVG 的颜色/fill */
+          fill: currentColor;
+          /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+             normalize.css 中也包含这行 */
+          overflow: hidden;
+        }
+
+    </style>
+</head>
+<body>
+    <div class="main markdown">
+        <h1>IconFont 图标</h1>
+        <ul class="icon_lists clear">
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-sousuo"></use>
+                    </svg>
+                    <div class="name">搜索</div>
+                    <div class="fontclass">#icon-sousuo</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-xiaoxi"></use>
+                    </svg>
+                    <div class="name">消息</div>
+                    <div class="fontclass">#icon-xiaoxi</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-quanxian"></use>
+                    </svg>
+                    <div class="name">权限</div>
+                    <div class="fontclass">#icon-quanxian</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-rili"></use>
+                    </svg>
+                    <div class="name">日历</div>
+                    <div class="fontclass">#icon-rili</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-icon_help"></use>
+                    </svg>
+                    <div class="name">帮助</div>
+                    <div class="fontclass">#icon-icon_help</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-calender-office-date-schedule-manage--cfdfcadc"></use>
+                    </svg>
+                    <div class="name">日历</div>
+                    <div class="fontclass">#icon-calender-office-date-schedule-manage--cfdfcadc</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-yibiaopan"></use>
+                    </svg>
+                    <div class="name">图表-仪表盘</div>
+                    <div class="fontclass">#icon-yibiaopan</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-web-icon-"></use>
+                    </svg>
+                    <div class="name">时间</div>
+                    <div class="fontclass">#icon-web-icon-</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-xinxi"></use>
+                    </svg>
+                    <div class="name">信息</div>
+                    <div class="fontclass">#icon-xinxi</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-bangzhu"></use>
+                    </svg>
+                    <div class="name">帮助</div>
+                    <div class="fontclass">#icon-bangzhu</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-xiaoxi1"></use>
+                    </svg>
+                    <div class="name">消息</div>
+                    <div class="fontclass">#icon-xiaoxi1</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-shijian"></use>
+                    </svg>
+                    <div class="name">时间</div>
+                    <div class="fontclass">#icon-shijian</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-rili1"></use>
+                    </svg>
+                    <div class="name">日历</div>
+                    <div class="fontclass">#icon-rili1</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-icon-"></use>
+                    </svg>
+                    <div class="name">设置</div>
+                    <div class="fontclass">#icon-icon-</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-tianqi-"></use>
+                    </svg>
+                    <div class="name">天气-6</div>
+                    <div class="fontclass">#icon-tianqi-</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-tianqi-1"></use>
+                    </svg>
+                    <div class="name">天气-16</div>
+                    <div class="fontclass">#icon-tianqi-1</div>
+                </li>
+            
+                <li>
+                    <svg class="icon" aria-hidden="true">
+                        <use xlink:href="#icon-tianqi-2"></use>
+                    </svg>
+                    <div class="name">天气-27</div>
+                    <div class="fontclass">#icon-tianqi-2</div>
+                </li>
+            
+        </ul>
+
+
+        <h2 id="symbol-">symbol引用</h2>
+        <hr>
+
+        <p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
+        这种用法其实是做了一个svg的集合,与另外两种相比具有如下特点:</p>
+        <ul>
+          <li>支持多色图标了,不再受单色限制。</li>
+          <li>通过一些技巧,支持像字体那样,通过<code>font-size</code>,<code>color</code>来调整样式。</li>
+          <li>兼容性较差,支持 ie9+,及现代浏览器。</li>
+          <li>浏览器渲染svg的性能一般,还不如png。</li>
+        </ul>
+        <p>使用步骤如下:</p>
+        <h3 id="-symbol-">第一步:引入项目下面生成的symbol代码:</h3>
+        <pre><code class="lang-js hljs javascript"><span class="hljs-comment">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;</span></code></pre>
+        <h3 id="-css-">第二步:加入通用css代码(引入一次就行):</h3>
+        <pre><code class="lang-js hljs javascript">&lt;style type=<span class="hljs-string">"text/css"</span>&gt;
+.icon {
+   width: <span class="hljs-number">1</span>em; height: <span class="hljs-number">1</span>em;
+   vertical-align: <span class="hljs-number">-0.15</span>em;
+   fill: currentColor;
+   overflow: hidden;
+}
+&lt;<span class="hljs-regexp">/style&gt;</span></code></pre>
+        <h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
+        <pre><code class="lang-js hljs javascript">&lt;svg <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"icon"</span> aria-hidden=<span class="hljs-string">"true"</span>&gt;<span class="xml"><span class="hljs-tag">
+  &lt;<span class="hljs-name">use</span> <span class="hljs-attr">xlink:href</span>=<span class="hljs-string">"#icon-xxx"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">use</span>&gt;</span>
+</span>&lt;<span class="hljs-regexp">/svg&gt;
+        </span></code></pre>
+    </div>
+</body>
+</html>

+ 180 - 0
web/monitor-hb/src/main/resources/static/admin/assets/font-ali/demo_unicode.html

@@ -0,0 +1,180 @@
+
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8"/>
+    <title>IconFont</title>
+    <link rel="stylesheet" href="demo.css">
+
+    <style type="text/css">
+
+        @font-face {font-family: "iconfont";
+          src: url('iconfont.eot'); /* IE9*/
+          src: url('iconfont.eot#iefix') format('embedded-opentype'), /* IE6-IE8 */
+          url('iconfont.woff') format('woff'), /* chrome, firefox */
+          url('iconfont.ttf') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
+          url('iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
+        }
+
+        .iconfont {
+          font-family:"iconfont" !important;
+          font-size:16px;
+          font-style:normal;
+          -webkit-font-smoothing: antialiased;
+          -webkit-text-stroke-width: 0.2px;
+          -moz-osx-font-smoothing: grayscale;
+        }
+
+    </style>
+</head>
+<body>
+    <div class="main markdown">
+        <h1>IconFont 图标</h1>
+        <ul class="icon_lists clear">
+            
+                <li>
+                <i class="icon iconfont">&#xe649;</i>
+                    <div class="name">搜索</div>
+                    <div class="code">&amp;#xe649;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe62f;</i>
+                    <div class="name">消息</div>
+                    <div class="code">&amp;#xe62f;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe612;</i>
+                    <div class="name">权限</div>
+                    <div class="code">&amp;#xe612;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe68a;</i>
+                    <div class="name">日历</div>
+                    <div class="code">&amp;#xe68a;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe619;</i>
+                    <div class="name">帮助</div>
+                    <div class="code">&amp;#xe619;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe77a;</i>
+                    <div class="name">日历</div>
+                    <div class="code">&amp;#xe77a;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe67a;</i>
+                    <div class="name">图表-仪表盘</div>
+                    <div class="code">&amp;#xe67a;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe6ed;</i>
+                    <div class="name">时间</div>
+                    <div class="code">&amp;#xe6ed;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe63b;</i>
+                    <div class="name">信息</div>
+                    <div class="code">&amp;#xe63b;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe676;</i>
+                    <div class="name">帮助</div>
+                    <div class="code">&amp;#xe676;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe779;</i>
+                    <div class="name">消息</div>
+                    <div class="code">&amp;#xe779;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe6c2;</i>
+                    <div class="name">时间</div>
+                    <div class="code">&amp;#xe6c2;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe630;</i>
+                    <div class="name">日历</div>
+                    <div class="code">&amp;#xe630;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xe614;</i>
+                    <div class="name">设置</div>
+                    <div class="code">&amp;#xe614;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xec65;</i>
+                    <div class="name">天气-6</div>
+                    <div class="code">&amp;#xec65;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xec68;</i>
+                    <div class="name">天气-16</div>
+                    <div class="code">&amp;#xec68;</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont">&#xec6c;</i>
+                    <div class="name">天气-27</div>
+                    <div class="code">&amp;#xec6c;</div>
+                </li>
+            
+        </ul>
+        <h2 id="unicode-">unicode引用</h2>
+        <hr>
+
+        <p>unicode是字体在网页端最原始的应用方式,特点是:</p>
+        <ul>
+        <li>兼容性最好,支持ie6+,及所有现代浏览器。</li>
+        <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
+        <li>但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。</li>
+        </ul>
+        <blockquote>
+        <p>注意:新版iconfont支持多色图标,这些多色图标在unicode模式下将不能使用,如果有需求建议使用symbol的引用方式</p>
+        </blockquote>
+        <p>unicode使用步骤如下:</p>
+        <h3 id="-font-face">第一步:拷贝项目下面生成的font-face</h3>
+        <pre><code class="lang-js hljs javascript">@font-face {
+  font-family: <span class="hljs-string">'iconfont'</span>;
+  src: url(<span class="hljs-string">'iconfont.eot'</span>);
+  src: url(<span class="hljs-string">'iconfont.eot?#iefix'</span>) format(<span class="hljs-string">'embedded-opentype'</span>),
+  url(<span class="hljs-string">'iconfont.woff'</span>) format(<span class="hljs-string">'woff'</span>),
+  url(<span class="hljs-string">'iconfont.ttf'</span>) format(<span class="hljs-string">'truetype'</span>),
+  url(<span class="hljs-string">'iconfont.svg#iconfont'</span>) format(<span class="hljs-string">'svg'</span>);
+}
+</code></pre>
+        <h3 id="-iconfont-">第二步:定义使用iconfont的样式</h3>
+        <pre><code class="lang-js hljs javascript">.iconfont{
+  font-family:<span class="hljs-string">"iconfont"</span> !important;
+  font-size:<span class="hljs-number">16</span>px;font-style:normal;
+  -webkit-font-smoothing: antialiased;
+  -webkit-text-stroke-width: <span class="hljs-number">0.2</span>px;
+  -moz-osx-font-smoothing: grayscale;
+}
+</code></pre>
+        <h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
+        <pre><code class="lang-js hljs javascript">&lt;i <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"iconfont"</span>&gt;&amp;#x33;<span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">i</span>&gt;</span></span></code></pre>
+
+        <blockquote>
+        <p>"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。</p>
+        </blockquote>
+    </div>
+
+
+</body>
+</html>

File diff suppressed because it is too large
+ 51 - 0
web/monitor-hb/src/main/resources/static/admin/assets/font-ali/iconfont.css


BIN
web/monitor-hb/src/main/resources/static/admin/assets/font-ali/iconfont.eot


+ 0 - 0
web/monitor-hb/src/main/resources/static/admin/assets/font-ali/iconfont.js


Some files were not shown because too many files changed in this diff