Explorar el Código

风机绩效表明细风能利用率修改

shilin hace 4 años
padre
commit
544e554252
Se han modificado 73 ficheros con 15595 adiciones y 739 borrados
  1. 1 1
      pom.xml
  2. 0 80
      src/docs/asciidoc/generated/all.adoc
  3. 13 4
      src/main/java/com/gyee/frame/common/base/BaseController.java
  4. 1 1
      src/main/java/com/gyee/frame/common/conf/Swagger.java
  5. 21 27
      src/main/java/com/gyee/frame/common/quartz/AbstractQuartzJob.java
  6. 2 2
      src/main/java/com/gyee/frame/common/quartz/task/WtTestTask.java
  7. 90 17
      src/main/java/com/gyee/frame/common/websocket/ClientInboundChannelInterceptor.java
  8. 24 0
      src/main/java/com/gyee/frame/common/websocket/WebSocketCache.java
  9. 4 0
      src/main/java/com/gyee/frame/common/websocket/WebSocketConfig.java
  10. 1 0
      src/main/java/com/gyee/frame/common/websocket/WebsocketMessageService.java
  11. 9 11
      src/main/java/com/gyee/frame/controller/AdminController.java
  12. 23 3
      src/main/java/com/gyee/frame/controller/IndexController.java
  13. 261 0
      src/main/java/com/gyee/frame/controller/admin/PermissionVueController.java
  14. 170 0
      src/main/java/com/gyee/frame/controller/admin/RoleVueController.java
  15. 28 0
      src/main/java/com/gyee/frame/controller/recommen/RecommenController.java
  16. 64 0
      src/main/java/com/gyee/frame/mapper/auto/AlarmcountMapper.java
  17. 97 0
      src/main/java/com/gyee/frame/mapper/auto/AlarmsnapMapper.java
  18. 96 0
      src/main/java/com/gyee/frame/mapper/auto/Alertrule2Mapper.java
  19. 32 0
      src/main/java/com/gyee/frame/mapper/auto/TvuePermissionMapper.java
  20. 96 0
      src/main/java/com/gyee/frame/mapper/auto/TvuePermissionRoleMapper.java
  21. 96 0
      src/main/java/com/gyee/frame/mapper/auto/TvueRoleMapper.java
  22. 96 0
      src/main/java/com/gyee/frame/mapper/auto/TvueRoleUserMapper.java
  23. 31 0
      src/main/java/com/gyee/frame/mapper/custom/PermissionVueDao.java
  24. 22 0
      src/main/java/com/gyee/frame/mapper/custom/RoleVueDao.java
  25. 179 0
      src/main/java/com/gyee/frame/model/auto/Alarmcount.java
  26. 603 0
      src/main/java/com/gyee/frame/model/auto/AlarmcountExample.java
  27. 674 0
      src/main/java/com/gyee/frame/model/auto/Alarmsnap.java
  28. 1663 0
      src/main/java/com/gyee/frame/model/auto/AlarmsnapExample.java
  29. 607 0
      src/main/java/com/gyee/frame/model/auto/Alertrule2.java
  30. 1542 0
      src/main/java/com/gyee/frame/model/auto/Alertrule2Example.java
  31. 147 0
      src/main/java/com/gyee/frame/model/auto/TvuePermission.java
  32. 930 0
      src/main/java/com/gyee/frame/model/auto/TvuePermissionExample.java
  33. 48 0
      src/main/java/com/gyee/frame/model/auto/TvuePermissionRole.java
  34. 512 0
      src/main/java/com/gyee/frame/model/auto/TvuePermissionRoleExample.java
  35. 37 0
      src/main/java/com/gyee/frame/model/auto/TvueRole.java
  36. 442 0
      src/main/java/com/gyee/frame/model/auto/TvueRoleExample.java
  37. 48 0
      src/main/java/com/gyee/frame/model/auto/TvueRoleUser.java
  38. 512 0
      src/main/java/com/gyee/frame/model/auto/TvueRoleUserExample.java
  39. 92 0
      src/main/java/com/gyee/frame/service/AlarmcountService.java
  40. 92 0
      src/main/java/com/gyee/frame/service/AlarmsnapService.java
  41. 95 0
      src/main/java/com/gyee/frame/service/Alertrule2ervice.java
  42. 360 0
      src/main/java/com/gyee/frame/service/VuePermissionService.java
  43. 200 0
      src/main/java/com/gyee/frame/service/VueRoleService.java
  44. 31 0
      src/main/java/com/gyee/frame/service/recommen/RecommenService.java
  45. 30 236
      src/main/java/com/gyee/frame/service/websocket/BraceletService.java
  46. 1 1
      src/main/java/com/gyee/frame/shiro/config/ShiroConfig.java
  47. 3 0
      src/main/java/com/gyee/frame/shiro/config/ShiroFilterMapFactory.java
  48. 59 68
      src/main/resources/META-INF/MANIFEST.MF
  49. 4 4
      src/main/resources/application.yml
  50. 4 1
      src/main/resources/mybatis-generator.xml
  51. 219 0
      src/main/resources/mybatis/auto/AlarmcountMapper.xml
  52. 508 0
      src/main/resources/mybatis/auto/AlarmsnapMapper.xml
  53. 477 0
      src/main/resources/mybatis/auto/Alertrule2Mapper.xml
  54. 308 0
      src/main/resources/mybatis/auto/TvuePermissionMapper.xml
  55. 241 0
      src/main/resources/mybatis/auto/TvuePermissionRoleMapper.xml
  56. 224 0
      src/main/resources/mybatis/auto/TvueRoleMapper.xml
  57. 241 0
      src/main/resources/mybatis/auto/TvueRoleUserMapper.xml
  58. 43 0
      src/main/resources/mybatis/custom/TvuePremissionMapper.xml
  59. 17 0
      src/main/resources/mybatis/custom/TvueRoleMapper.xml
  60. 1 1
      src/main/resources/templates/admin/common/html/leftMenu.html
  61. 4 112
      src/main/resources/templates/admin/common/html/topMenu.html
  62. 2 9
      src/main/resources/templates/admin/index.html
  63. 0 129
      src/main/resources/templates/admin/main.html
  64. 315 0
      src/main/resources/templates/admin/permissionvue/add.html
  65. 331 0
      src/main/resources/templates/admin/permissionvue/edit.html
  66. 796 0
      src/main/resources/templates/admin/permissionvue/icon.html
  67. 371 0
      src/main/resources/templates/admin/permissionvue/list.html
  68. 255 0
      src/main/resources/templates/admin/permissionvue/list_old.html
  69. 190 0
      src/main/resources/templates/admin/permissionvue/tree.html
  70. 319 0
      src/main/resources/templates/admin/rolevue/add.html
  71. 330 0
      src/main/resources/templates/admin/rolevue/edit.html
  72. 204 0
      src/main/resources/templates/admin/rolevue/list.html
  73. 6 32
      src/main/resources/templates/login.html

+ 1 - 1
pom.xml

@@ -5,7 +5,7 @@
 
 	<groupId>com.example</groupId>
 	<artifactId>Gyee_Frame_NX</artifactId>
-	<packaging>war</packaging>
+	<packaging>jar</packaging>
 	<name>Gyee_Frame_NX</name>
 	<description>Gyee_Frame_NX系统</description>
 

+ 0 - 80
src/docs/asciidoc/generated/all.adoc

@@ -1,80 +0,0 @@
-= Gyee_Frame_NX API文档
-
-
-[[_overview]]
-== 概览
-Gyee_Frame_NX项目
-
-
-=== 版本信息
-[%hardbreaks]
-__版本__ : 版本号:3.9
-
-
-=== URI scheme
-[%hardbreaks]
-__域名__ : 192.168.10.14:8082
-__基础路径__ : /
-
-
-=== 标签
-
-* admin-controller : Admin Controller
-* api-controller : Api Controller
-* api-controller-2 : Api Controller 2
-* auto-code-controller : Auto Code Controller
-* benchmarking-controller : Benchmarking Controller
-* captcha-controller : Captcha Controller
-* compare-controller : Compare Controller
-* contrast-controller : Contrast Controller
-* dict-data-controller : Dict Data Controller
-* dict-type-controller : Dict Type Controller
-* email-controller : Email Controller
-* fan-status-query-export-controller : Fan Status Query Export Controller
-* file-controller : File Controller
-* index-controller : Index Controller
-* json-controller : Json Controller
-* leaderboard-controller : Leaderboard Controller
-* log-controller : Log Controller
-* output-speed-controller : Output Speed Controller
-* permission-controller : Permission Controller
-* power-compare-controller : Power Compare Controller
-* power-compare-detail-controller : Power Compare Detail Controller
-* power-saturation-amonut-controller : Power Saturation Amonut Controller
-* power-saturation-controller : Power Saturation Controller
-* power-saturation-month-controller : Power Saturation Month Controller
-* project-plan-controller : Project Plan Controller
-* province-linkage-controller : Province Linkage Controller
-* qi-niu-cloud-controller : Qi Niu Cloud Controller
-* quartz-controller : Quartz Controller
-* quartz-job-controller : Quartz Job Controller
-* quartz-job-log-controller : Quartz Job Log Controller
-* recommen-controller : Recommen Controller
-* role-controller : Role Controller
-* scatter-controller : Scatter Controller
-* service-controller : Service Controller
-* single-analysis-controller : Single Analysis Controller
-* standard-point-table-controller : Standard Point Table Controller
-* swagger-controller : Swagger Controller
-* sys-area-controller : Sys Area Controller
-* sys-city-controller : Sys City Controller
-* sys-department-controller : Sys Department Controller
-* sys-notice-controller : Sys Notice Controller
-* sys-position-controller : Sys Position Controller
-* sys-province-controller : Sys Province Controller
-* sys-street-controller : Sys Street Controller
-* test-controller : Test Controller
-* tool-controller : Tool Controller
-* ueditor-controller : Ueditor Controller
-* user-controller : User Controller
-* windpower-detail-chart-controller : Windpower Detail Chart Controller
-* windturbine-detail-chart-controller : Windturbine Detail Chart Controller
-* windturbine-detail-line-chart-controller : Windturbine Detail Line Chart Controller
-* windturbine-detail-pie-chart-a-controller : Windturbine Detail Pie Chart A Controller
-* windturbine-goodness-detail-controller : Windturbine Goodness Detail Controller
-* windturbinegoodness-controller : Windturbinegoodness Controller
-* wt-health-report-controller : Wt Health Report Controller
-* wt-health-report-month-controller : Wt Health Report Month Controller
-
-
-

+ 13 - 4
src/main/java/com/gyee/frame/common/base/BaseController.java

@@ -1,11 +1,9 @@
 package com.gyee.frame.common.base;
 
-import java.text.SimpleDateFormat;
-import java.util.Date;
+import cn.hutool.core.util.StrUtil;
 import com.gyee.frame.common.domain.AjaxResult;
 import com.gyee.frame.model.custom.TitleVo;
 import com.gyee.frame.service.*;
-import cn.hutool.core.util.StrUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.propertyeditors.CustomDateEditor;
 import org.springframework.stereotype.Controller;
@@ -13,6 +11,9 @@ import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.WebDataBinder;
 import org.springframework.web.bind.annotation.InitBinder;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
 /**
  * web层通用数据处理
 * @ClassName: BaseController
@@ -34,7 +35,15 @@ public class BaseController
 	//权限
 	@Autowired
 	public SysPermissionService sysPermissionService;
-	
+
+
+    //VUE系统角色
+    @Autowired
+    public VueRoleService vueRoleService;
+
+    //VUE权限
+    @Autowired
+    public VuePermissionService vuePermissionService;
 	//文件上传
 	@Autowired
 	public SysFileService sysFileService;

+ 1 - 1
src/main/java/com/gyee/frame/common/conf/Swagger.java

@@ -32,7 +32,7 @@ public class Swagger  implements WebMvcConfigurer {
 	@Bean
 	public Docket createRestApi() {
 		return new Docket(DocumentationType.SWAGGER_2)
-				.host("192.168.10.14:8082")
+				.host(v2Config.getSwaggerip())
 				// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
 				.apiInfo(apiInfo())
 				// 设置哪些接口暴露给Swagger展示

+ 21 - 27
src/main/java/com/gyee/frame/common/quartz/AbstractQuartzJob.java

@@ -1,19 +1,13 @@
 package com.gyee.frame.common.quartz;
 
-import cn.hutool.core.exceptions.ExceptionUtil;
-
-import com.gyee.frame.common.spring.SpringUtils;
 import com.gyee.frame.model.auto.SysQuartzJob;
-import com.gyee.frame.model.auto.SysQuartzJobLog;
-import com.gyee.frame.service.SysQuartzJobLogService;
-import com.gyee.frame.util.StringUtils;
-
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
+
 import java.util.Date;
 
 /**
@@ -75,26 +69,26 @@ public abstract class AbstractQuartzJob implements Job {
         Date startTime = threadLocal.get();
         threadLocal.remove();
 
-        final SysQuartzJobLog sysJobLog = new SysQuartzJobLog();
-        sysJobLog.setJobName(sysJob.getJobName());
-        sysJobLog.setJobGroup(sysJob.getJobGroup());
-        sysJobLog.setInvokeTarget(sysJob.getInvokeTarget());
-        sysJobLog.setStartTime(startTime);
-        sysJobLog.setEndTime(new Date());
-        long runMs = sysJobLog.getEndTime().getTime() - sysJobLog.getStartTime().getTime();
-        sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒");
-        if (e != null)
-        {
-            sysJobLog.setStatus(ScheduleConstants.FAIL_STATUS);
-            String errorMsg = StringUtils.substring(ExceptionUtil.getMessage(e), 0, 2000);
-            sysJobLog.setExceptionInfo(errorMsg);
-        }
-        else
-        {
-            sysJobLog.setStatus(ScheduleConstants.SUCCESS_STATUS);
-        }
-        //  这里获取service然后插入库中
-        SpringUtils.getBean(SysQuartzJobLogService.class).insertSelective(sysJobLog);
+//        final SysQuartzJobLog sysJobLog = new SysQuartzJobLog();
+//        sysJobLog.setJobName(sysJob.getJobName());
+//        sysJobLog.setJobGroup(sysJob.getJobGroup());
+//        sysJobLog.setInvokeTarget(sysJob.getInvokeTarget());
+//        sysJobLog.setStartTime(startTime);
+//        sysJobLog.setEndTime(new Date());
+//        long runMs = sysJobLog.getEndTime().getTime() - sysJobLog.getStartTime().getTime();
+//        sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒");
+//        if (e != null)
+//        {
+//            sysJobLog.setStatus(ScheduleConstants.FAIL_STATUS);
+//            String errorMsg = StringUtils.substring(ExceptionUtil.getMessage(e), 0, 2000);
+//            sysJobLog.setExceptionInfo(errorMsg);
+//        }
+//        else
+//        {
+//            sysJobLog.setStatus(ScheduleConstants.SUCCESS_STATUS);
+//        }
+//        //  这里获取service然后插入库中
+//        SpringUtils.getBean(SysQuartzJobLogService.class).insertSelective(sysJobLog);
     }
 
     /**

+ 2 - 2
src/main/java/com/gyee/frame/common/quartz/task/WtTestTask.java

@@ -11,8 +11,8 @@ public class WtTestTask {
     private BraceletService braceletService;
 
 
-    public void braceletPushTask(String destination,String wtId) throws Exception {
+    public void braceletPushTask(String destination) throws Exception {
 
-        braceletService.braceletPushTask(destination,wtId);
+        braceletService.testPoints(destination);
     }
 }

+ 90 - 17
src/main/java/com/gyee/frame/common/websocket/ClientInboundChannelInterceptor.java

@@ -21,6 +21,8 @@ import java.util.concurrent.CopyOnWriteArraySet;
 @Component
 public class ClientInboundChannelInterceptor extends SocketTaskUtil implements ChannelInterceptor {
 
+
+
     @Override
     public Message<?> preSend(Message<?> message, MessageChannel channel) {
         StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
@@ -36,32 +38,103 @@ public class ClientInboundChannelInterceptor extends SocketTaskUtil implements C
             String sessionId =String.valueOf(message.getHeaders().get(SimpMessageHeaderAccessor.SESSION_ID_HEADER));
 
             if(StringUtils.notEmp(topic) && !topic.equals("undefined")) {
-                if (WebSocketConfig.websocketcacheMap.containsKey(topic)) {
-                    CopyOnWriteArraySet<String> set = WebSocketConfig.websocketcacheMap.get(topic);
-                    set.add(sessionId);
-                    WebSocketConfig.websocketcacheMap.put(topic, set);
-                } else {
-                    CopyOnWriteArraySet<String> set = new CopyOnWriteArraySet<String>();
-                    set.add(sessionId);
-                    WebSocketConfig.websocketcacheMap.put(topic, set);
-                }
 
 
-                if (StringUtils.notEmp(sessionId)) {
-                    if (WebSocketConfig.sessioncacheMap.containsKey(sessionId)) {
-                        CopyOnWriteArraySet<String> set = WebSocketConfig.websocketcacheMap.get(sessionId);
-                        set.add(topic);
-                        WebSocketConfig.sessioncacheMap.put(sessionId, set);
+                //判断是否为带参操作
+                if(topic.indexOf(WebSocketConfig.PARAM)!=-1)
+                {
+                    if (StringUtils.notEmp(sessionId)) {
+                        //判断带参sessionMAP中是否包含sessionId
+                        if (WebSocketConfig.sessionparamcacheMap.containsKey(sessionId)) {
+                            //通过sessionId获得topicSET集合
+                            CopyOnWriteArraySet<String> set = WebSocketConfig.sessionparamcacheMap.get(sessionId);
+                            //截取topic/****/中的功能描述
+                            String temptoptic=topic.substring(topic.indexOf("/")+1);
+                            temptoptic=temptoptic.substring(0,temptoptic.indexOf("/"));
+                            //遍历SET中的主体
+                            for(String str:set)
+                            {
+                                //截取str/****/中的功能描述
+                                String tempstr=str.substring(str.indexOf("/")+1);
+                                tempstr=tempstr.substring(0,tempstr.indexOf("/"));
+                                //判断str的功能描述和topic的功能描述是否一致
+                                if(temptoptic.equals(tempstr))
+                                {
+                                    //功能描述一致,移除相同功能的主题,保证每个sessionid相同功能只能通过传参订阅一个主题
+                                    set.remove(str);
+                                    //提供过str主题获得sessionidSET集合
+                                    CopyOnWriteArraySet<String> sessionIdset = WebSocketConfig.websocketparamcacheMap.get(str);
+                                    //移除主题中的sessionId
+                                    sessionIdset.remove(sessionId);
+                                    //如果sessionIdset记录为空,移除websocketparamcacheMap的主题
+                                    if(sessionIdset.size()==0)
+                                    {
+                                        WebSocketConfig.websocketparamcacheMap.remove(str);
+                                    }
+
+                                }
+                            }
+                            //添加新的主题
+                            set.add(topic);
+                            WebSocketConfig.sessionparamcacheMap.put(sessionId, set);
+                        } else {
+                            CopyOnWriteArraySet<String> set = new CopyOnWriteArraySet<String>();
+                            set.add(topic);
+                            WebSocketConfig.sessionparamcacheMap.put(sessionId, set);
+                        }
+
+
+                    }
+
+                    if (WebSocketConfig.websocketparamcacheMap.containsKey(topic)) {
+                        CopyOnWriteArraySet<String> set = WebSocketConfig.websocketparamcacheMap.get(topic);
+                        set.add(sessionId);
+                        WebSocketConfig.websocketparamcacheMap.put(topic, set);
+                    } else {
+                        CopyOnWriteArraySet<String> set = new CopyOnWriteArraySet<String>();
+                        set.add(sessionId);
+                        WebSocketConfig.websocketparamcacheMap.put(topic, set);
+                    }
+                }else
+                {
+                    if (WebSocketConfig.websocketcacheMap.containsKey(topic)) {
+                        CopyOnWriteArraySet<String> set = WebSocketConfig.websocketcacheMap.get(topic);
+                        set.add(sessionId);
+                        WebSocketConfig.websocketcacheMap.put(topic, set);
                     } else {
                         CopyOnWriteArraySet<String> set = new CopyOnWriteArraySet<String>();
-                        set.add(topic);
-                        WebSocketConfig.sessioncacheMap.put(sessionId, set);
+                        set.add(sessionId);
+                        WebSocketConfig.websocketcacheMap.put(topic, set);
                     }
 
 
+                    if (StringUtils.notEmp(sessionId)) {
+                        if (WebSocketConfig.sessioncacheMap.containsKey(sessionId)) {
+                            CopyOnWriteArraySet<String> set = WebSocketConfig.websocketcacheMap.get(sessionId);
+                            set.add(topic);
+                            WebSocketConfig.sessioncacheMap.put(sessionId, set);
+                        } else {
+                            CopyOnWriteArraySet<String> set = new CopyOnWriteArraySet<String>();
+                            set.add(topic);
+                            WebSocketConfig.sessioncacheMap.put(sessionId, set);
+                        }
+
+
+                    }
+                }
+
+
+                if(topic.indexOf(WebSocketConfig.PARAM)!=-1)
+                {
+
+//                    String wtid=topic.substring(topic.indexOf(PARAM)+6);
+                    topic=topic.substring(0,topic.indexOf("_"));
+                    this.restartJob(topic);
+                }else
+                {
+                    this.restartJob(topic);
                 }
 
-                this.restartJob(topic);
             }
 
         }

+ 24 - 0
src/main/java/com/gyee/frame/common/websocket/WebSocketCache.java

@@ -84,6 +84,30 @@ public class WebSocketCache  extends SocketTaskUtil {
         }
 
 
+        if(WebSocketConfig.sessionparamcacheMap.containsKey(sessionId))
+        {
+            CopyOnWriteArraySet<String> sessionIdset=WebSocketConfig.sessionparamcacheMap.get(sessionId);
+
+            for(String topic:sessionIdset)
+            {
+                if(WebSocketConfig.websocketparamcacheMap.containsKey(topic))
+                {
+                    CopyOnWriteArraySet<String> set=WebSocketConfig.websocketparamcacheMap.get(topic);
+                    set.remove(sessionId);
+                    WebSocketConfig.websocketparamcacheMap.put(topic,set);
+
+                    if(set.size()==0)
+                    {
+                        this.deleteJob(topic);
+                    }
+                }
+
+                sessionIdset.remove(topic);
+            }
+            WebSocketConfig.sessionparamcacheMap.remove(sessionId);
+        }
+
+
     }
 
 }

+ 4 - 0
src/main/java/com/gyee/frame/common/websocket/WebSocketConfig.java

@@ -19,8 +19,12 @@ import java.util.concurrent.CopyOnWriteArraySet;
 @EnableWebSocketMessageBroker
 public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
 
+    public static final String PARAM="param_";
     public static ConcurrentHashMap<String, CopyOnWriteArraySet<String>> websocketcacheMap = new ConcurrentHashMap();
     public static ConcurrentHashMap<String, CopyOnWriteArraySet<String>> sessioncacheMap = new ConcurrentHashMap();
+
+    public static ConcurrentHashMap<String, CopyOnWriteArraySet<String>> websocketparamcacheMap = new ConcurrentHashMap();
+    public static ConcurrentHashMap<String, CopyOnWriteArraySet<String>> sessionparamcacheMap = new ConcurrentHashMap();
     //
     @Resource
     private ClientInboundChannelInterceptor clientInboundChannelInterceptor;

+ 1 - 0
src/main/java/com/gyee/frame/common/websocket/WebsocketMessageService.java

@@ -19,5 +19,6 @@ public class WebsocketMessageService
         String s = JSON.toJSONString(sendData);
 //        System.out.println(s);
         simpMessagingTemplate.convertAndSend(destination, s);
+
     }
 }

+ 9 - 11
src/main/java/com/gyee/frame/controller/AdminController.java

@@ -1,8 +1,6 @@
 package com.gyee.frame.controller;
 
-import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import com.google.code.kaptcha.Constants;
 import com.gyee.frame.common.base.BaseController;
 import com.gyee.frame.common.conf.V2Config;
 import com.gyee.frame.common.domain.AjaxResult;
@@ -12,15 +10,9 @@ import com.gyee.frame.model.custom.BootstrapTree;
 import com.gyee.frame.model.custom.TitleVo;
 import com.gyee.frame.shiro.util.ShiroUtils;
 import com.gyee.frame.util.StringUtils;
-import com.google.code.kaptcha.Constants;
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.AuthenticationException;
-import org.apache.shiro.authc.ExcessiveAttemptsException;
-import org.apache.shiro.authc.IncorrectCredentialsException;
-import org.apache.shiro.authc.LockedAccountException;
-import org.apache.shiro.authc.UnknownAccountException;
-import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.authc.*;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.apache.shiro.subject.Subject;
 import org.slf4j.Logger;
@@ -33,6 +25,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
 /**
  * 后台方法
  * 
@@ -122,11 +118,13 @@ public class AdminController extends BaseController {
 		if (yz) {
 			String userName = user.getUsername();
 			Subject currentUser = SecurityUtils.getSubject();
+
 			// 是否验证通过
 			if (!currentUser.isAuthenticated()) {
 				UsernamePasswordToken token = new UsernamePasswordToken(userName, user.getPassword());
 				try {
-					if (rememberMe) {
+//					if (rememberMe) {
+					if (true) {
 						token.setRememberMe(true);
 					}
 					// 存入用户

+ 23 - 3
src/main/java/com/gyee/frame/controller/IndexController.java

@@ -1,8 +1,11 @@
 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;
@@ -25,10 +28,27 @@ public class IndexController extends BaseController{
 	 */
 	@ApiOperation(value="前台",notes="前台")
 	@GetMapping("/")
-	public String index(ModelMap map) {
+	public String index(ModelMap modelMap) {
 		String str="前台";
-		setTitle(map, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false));
-    	return "index";
+		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请求

+ 261 - 0
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));
+    }
+    
+    
+}

+ 170 - 0
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);
+    }
+}

+ 28 - 0
src/main/java/com/gyee/frame/controller/recommen/RecommenController.java

@@ -492,4 +492,32 @@ public class RecommenController {
     }
 
 
+    /**
+     * 获得对应风机的1个月健康推荐检修记录
+     * @return
+     */
+    @PostMapping("/getRecommenmainMonth")
+    @ResponseBody
+    @ApiOperation(value = "获得对应风机的1个月健康推荐检修记录", notes = "获得对应风机的1个月健康推荐检修记录")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "wtId", value = "风机编号", required = true, dataType = "string", paramType = "query")
+    })
+
+    public AjaxResult getRecommenmainMonth(String wtId) throws Exception {
+
+        List<Recommenmain> result=new ArrayList<>();
+
+        if(StringUtils.notEmp(wtId))
+        {
+
+            result=recommenService.getRecommenmainMonth(wtId);
+        }
+
+        if (null!=result) {
+            return AjaxResult.successData(AjaxStatus.success.code, result);
+        } else {
+            return AjaxResult.successData(AjaxStatus.emptyresultset.code, result);
+        }
+
+    }
 }

+ 64 - 0
src/main/java/com/gyee/frame/mapper/auto/AlarmcountMapper.java

@@ -0,0 +1,64 @@
+package com.gyee.frame.mapper.auto;
+
+import com.gyee.frame.model.auto.Alarmcount;
+import com.gyee.frame.model.auto.AlarmcountExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface AlarmcountMapper {
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    long countByExample(AlarmcountExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    int deleteByExample(AlarmcountExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    int insert(Alarmcount record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    int insertSelective(Alarmcount record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    List<Alarmcount> selectByExample(AlarmcountExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    int updateByExampleSelective(@Param("record") Alarmcount record, @Param("example") AlarmcountExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    int updateByExample(@Param("record") Alarmcount record, @Param("example") AlarmcountExample example);
+}

+ 97 - 0
src/main/java/com/gyee/frame/mapper/auto/AlarmsnapMapper.java

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

+ 96 - 0
src/main/java/com/gyee/frame/mapper/auto/Alertrule2Mapper.java

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

+ 32 - 0
src/main/java/com/gyee/frame/mapper/auto/TvuePermissionMapper.java

@@ -0,0 +1,32 @@
+package com.gyee.frame.mapper.auto;
+
+import com.gyee.frame.model.auto.TvuePermission;
+import com.gyee.frame.model.auto.TvuePermissionExample;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface TvuePermissionMapper {
+
+        long countByExample(TvuePermissionExample example);
+
+        int deleteByExample(TvuePermissionExample example);
+
+        int deleteByPrimaryKey(String id);
+
+        int insert(TvuePermission record);
+
+        int insertSelective(TvuePermission record);
+
+        List<TvuePermission> selectByExample(TvuePermissionExample example);
+
+        TvuePermission selectByPrimaryKey(String id);
+
+        int updateByExampleSelective(@Param("record") TvuePermission record, @Param("example") TvuePermissionExample example);
+
+        int updateByExample(@Param("record") TvuePermission record, @Param("example") TvuePermissionExample example);
+
+        int updateByPrimaryKeySelective(TvuePermission record);
+
+        int updateByPrimaryKey(TvuePermission record);
+    }

+ 96 - 0
src/main/java/com/gyee/frame/mapper/auto/TvuePermissionRoleMapper.java

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

+ 96 - 0
src/main/java/com/gyee/frame/mapper/auto/TvueRoleMapper.java

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

+ 96 - 0
src/main/java/com/gyee/frame/mapper/auto/TvueRoleUserMapper.java

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

+ 31 - 0
src/main/java/com/gyee/frame/mapper/custom/PermissionVueDao.java

@@ -0,0 +1,31 @@
+package com.gyee.frame.mapper.custom;
+
+import com.gyee.frame.model.auto.TvuePermission;
+
+import java.util.List;
+
+public interface PermissionVueDao {
+	/**
+	 * 查询全部VUE权限
+	 * @return
+	 */
+	List<TvuePermission> findAll();
+	 
+	 /**
+	  * 根据用户id查询出用户的所有权限
+	  * @param userId
+	  * @return
+	  */
+	 List<TvuePermission> findByAdminUserId(String userId);
+	 
+	 /**
+	  * 根据角色id查询权限
+	  * @param roleid
+	  * @return
+	  */
+	 List<TvuePermission> queryRoleId(String roleid);
+	 
+	 
+	 
+	 
+}

+ 22 - 0
src/main/java/com/gyee/frame/mapper/custom/RoleVueDao.java

@@ -0,0 +1,22 @@
+
+package com.gyee.frame.mapper.custom;
+
+import com.gyee.frame.model.auto.TvueRole;
+
+import java.util.List;
+
+/**
+ * Vue角色Dao
+ * @ClassName: RoleVueDao
+ * @author gyee
+ * @date 2018年8月25日
+ *
+ */
+public interface RoleVueDao {
+	/**
+	 * 根据用户id查询Vue角色
+	 * @param userid
+	 * @return
+	 */
+	public List<TvueRole> queryUserRole(String userid);
+}

+ 179 - 0
src/main/java/com/gyee/frame/model/auto/Alarmcount.java

@@ -0,0 +1,179 @@
+package com.gyee.frame.model.auto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class Alarmcount implements Serializable {
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMCOUNT.ID
+     *
+     * @mbg.generated
+     */
+    private Integer id;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMCOUNT.ALARMDATE
+     *
+     * @mbg.generated
+     */
+    private Date alarmdate;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMCOUNT.SNAPID
+     *
+     * @mbg.generated
+     */
+    private Integer snapid;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMCOUNT.COUNT
+     *
+     * @mbg.generated
+     */
+    private Integer count;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMCOUNT.TIME
+     *
+     * @mbg.generated
+     */
+    private Double time;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMCOUNT.ID
+     *
+     * @return the value of ALARMCOUNT.ID
+     *
+     * @mbg.generated
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMCOUNT.ID
+     *
+     * @param id the value for ALARMCOUNT.ID
+     *
+     * @mbg.generated
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMCOUNT.ALARMDATE
+     *
+     * @return the value of ALARMCOUNT.ALARMDATE
+     *
+     * @mbg.generated
+     */
+    public Date getAlarmdate() {
+        return alarmdate;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMCOUNT.ALARMDATE
+     *
+     * @param alarmdate the value for ALARMCOUNT.ALARMDATE
+     *
+     * @mbg.generated
+     */
+    public void setAlarmdate(Date alarmdate) {
+        this.alarmdate = alarmdate;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMCOUNT.SNAPID
+     *
+     * @return the value of ALARMCOUNT.SNAPID
+     *
+     * @mbg.generated
+     */
+    public Integer getSnapid() {
+        return snapid;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMCOUNT.SNAPID
+     *
+     * @param snapid the value for ALARMCOUNT.SNAPID
+     *
+     * @mbg.generated
+     */
+    public void setSnapid(Integer snapid) {
+        this.snapid = snapid;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMCOUNT.COUNT
+     *
+     * @return the value of ALARMCOUNT.COUNT
+     *
+     * @mbg.generated
+     */
+    public Integer getCount() {
+        return count;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMCOUNT.COUNT
+     *
+     * @param count the value for ALARMCOUNT.COUNT
+     *
+     * @mbg.generated
+     */
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMCOUNT.TIME
+     *
+     * @return the value of ALARMCOUNT.TIME
+     *
+     * @mbg.generated
+     */
+    public Double getTime() {
+        return time;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMCOUNT.TIME
+     *
+     * @param time the value for ALARMCOUNT.TIME
+     *
+     * @mbg.generated
+     */
+    public void setTime(Double time) {
+        this.time = time;
+    }
+}

+ 603 - 0
src/main/java/com/gyee/frame/model/auto/AlarmcountExample.java

@@ -0,0 +1,603 @@
+package com.gyee.frame.model.auto;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class AlarmcountExample {
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    protected String orderByClause;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    protected boolean distinct;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    protected List<Criteria> oredCriteria;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    public AlarmcountExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    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(Integer value) {
+            addCriterion("ID =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("ID <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("ID >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("ID >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("ID <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("ID <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("ID in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("ID not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("ID between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("ID not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andAlarmdateIsNull() {
+            addCriterion("ALARMDATE is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAlarmdateIsNotNull() {
+            addCriterion("ALARMDATE is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAlarmdateEqualTo(Date value) {
+            addCriterion("ALARMDATE =", value, "alarmdate");
+            return (Criteria) this;
+        }
+
+        public Criteria andAlarmdateNotEqualTo(Date value) {
+            addCriterion("ALARMDATE <>", value, "alarmdate");
+            return (Criteria) this;
+        }
+
+        public Criteria andAlarmdateGreaterThan(Date value) {
+            addCriterion("ALARMDATE >", value, "alarmdate");
+            return (Criteria) this;
+        }
+
+        public Criteria andAlarmdateGreaterThanOrEqualTo(Date value) {
+            addCriterion("ALARMDATE >=", value, "alarmdate");
+            return (Criteria) this;
+        }
+
+        public Criteria andAlarmdateLessThan(Date value) {
+            addCriterion("ALARMDATE <", value, "alarmdate");
+            return (Criteria) this;
+        }
+
+        public Criteria andAlarmdateLessThanOrEqualTo(Date value) {
+            addCriterion("ALARMDATE <=", value, "alarmdate");
+            return (Criteria) this;
+        }
+
+        public Criteria andAlarmdateIn(List<Date> values) {
+            addCriterion("ALARMDATE in", values, "alarmdate");
+            return (Criteria) this;
+        }
+
+        public Criteria andAlarmdateNotIn(List<Date> values) {
+            addCriterion("ALARMDATE not in", values, "alarmdate");
+            return (Criteria) this;
+        }
+
+        public Criteria andAlarmdateBetween(Date value1, Date value2) {
+            addCriterion("ALARMDATE between", value1, value2, "alarmdate");
+            return (Criteria) this;
+        }
+
+        public Criteria andAlarmdateNotBetween(Date value1, Date value2) {
+            addCriterion("ALARMDATE not between", value1, value2, "alarmdate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSnapidIsNull() {
+            addCriterion("SNAPID is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSnapidIsNotNull() {
+            addCriterion("SNAPID is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSnapidEqualTo(Integer value) {
+            addCriterion("SNAPID =", value, "snapid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSnapidNotEqualTo(Integer value) {
+            addCriterion("SNAPID <>", value, "snapid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSnapidGreaterThan(Integer value) {
+            addCriterion("SNAPID >", value, "snapid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSnapidGreaterThanOrEqualTo(Integer value) {
+            addCriterion("SNAPID >=", value, "snapid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSnapidLessThan(Integer value) {
+            addCriterion("SNAPID <", value, "snapid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSnapidLessThanOrEqualTo(Integer value) {
+            addCriterion("SNAPID <=", value, "snapid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSnapidIn(List<Integer> values) {
+            addCriterion("SNAPID in", values, "snapid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSnapidNotIn(List<Integer> values) {
+            addCriterion("SNAPID not in", values, "snapid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSnapidBetween(Integer value1, Integer value2) {
+            addCriterion("SNAPID between", value1, value2, "snapid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSnapidNotBetween(Integer value1, Integer value2) {
+            addCriterion("SNAPID not between", value1, value2, "snapid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCountIsNull() {
+            addCriterion("COUNT is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCountIsNotNull() {
+            addCriterion("COUNT is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCountEqualTo(Integer value) {
+            addCriterion("COUNT =", value, "count");
+            return (Criteria) this;
+        }
+
+        public Criteria andCountNotEqualTo(Integer value) {
+            addCriterion("COUNT <>", value, "count");
+            return (Criteria) this;
+        }
+
+        public Criteria andCountGreaterThan(Integer value) {
+            addCriterion("COUNT >", value, "count");
+            return (Criteria) this;
+        }
+
+        public Criteria andCountGreaterThanOrEqualTo(Integer value) {
+            addCriterion("COUNT >=", value, "count");
+            return (Criteria) this;
+        }
+
+        public Criteria andCountLessThan(Integer value) {
+            addCriterion("COUNT <", value, "count");
+            return (Criteria) this;
+        }
+
+        public Criteria andCountLessThanOrEqualTo(Integer value) {
+            addCriterion("COUNT <=", value, "count");
+            return (Criteria) this;
+        }
+
+        public Criteria andCountIn(List<Integer> values) {
+            addCriterion("COUNT in", values, "count");
+            return (Criteria) this;
+        }
+
+        public Criteria andCountNotIn(List<Integer> values) {
+            addCriterion("COUNT not in", values, "count");
+            return (Criteria) this;
+        }
+
+        public Criteria andCountBetween(Integer value1, Integer value2) {
+            addCriterion("COUNT between", value1, value2, "count");
+            return (Criteria) this;
+        }
+
+        public Criteria andCountNotBetween(Integer value1, Integer value2) {
+            addCriterion("COUNT not between", value1, value2, "count");
+            return (Criteria) this;
+        }
+
+        public Criteria andTimeIsNull() {
+            addCriterion("TIME is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTimeIsNotNull() {
+            addCriterion("TIME is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTimeEqualTo(Double value) {
+            addCriterion("TIME =", value, "time");
+            return (Criteria) this;
+        }
+
+        public Criteria andTimeNotEqualTo(Double value) {
+            addCriterion("TIME <>", value, "time");
+            return (Criteria) this;
+        }
+
+        public Criteria andTimeGreaterThan(Double value) {
+            addCriterion("TIME >", value, "time");
+            return (Criteria) this;
+        }
+
+        public Criteria andTimeGreaterThanOrEqualTo(Double value) {
+            addCriterion("TIME >=", value, "time");
+            return (Criteria) this;
+        }
+
+        public Criteria andTimeLessThan(Double value) {
+            addCriterion("TIME <", value, "time");
+            return (Criteria) this;
+        }
+
+        public Criteria andTimeLessThanOrEqualTo(Double value) {
+            addCriterion("TIME <=", value, "time");
+            return (Criteria) this;
+        }
+
+        public Criteria andTimeIn(List<Double> values) {
+            addCriterion("TIME in", values, "time");
+            return (Criteria) this;
+        }
+
+        public Criteria andTimeNotIn(List<Double> values) {
+            addCriterion("TIME not in", values, "time");
+            return (Criteria) this;
+        }
+
+        public Criteria andTimeBetween(Double value1, Double value2) {
+            addCriterion("TIME between", value1, value2, "time");
+            return (Criteria) this;
+        }
+
+        public Criteria andTimeNotBetween(Double value1, Double value2) {
+            addCriterion("TIME not between", value1, value2, "time");
+            return (Criteria) this;
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated do_not_delete_during_merge
+     */
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table ALARMCOUNT
+     *
+     * @mbg.generated
+     */
+    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);
+        }
+    }
+}

+ 674 - 0
src/main/java/com/gyee/frame/model/auto/Alarmsnap.java

@@ -0,0 +1,674 @@
+package com.gyee.frame.model.auto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class Alarmsnap implements Serializable {
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.ID
+     *
+     * @mbg.generated
+     */
+    private Integer id;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.STATIONID
+     *
+     * @mbg.generated
+     */
+    private String stationid;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.PROJECTID
+     *
+     * @mbg.generated
+     */
+    private String projectid;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.LINEID
+     *
+     * @mbg.generated
+     */
+    private String lineid;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.WINDTURBINEID
+     *
+     * @mbg.generated
+     */
+    private String windturbineid;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.ALERTVALUE
+     *
+     * @mbg.generated
+     */
+    private Integer alertvalue;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.CATEGORY1
+     *
+     * @mbg.generated
+     */
+    private String category1;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.CATEGORY2
+     *
+     * @mbg.generated
+     */
+    private String category2;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.CATEGORY3
+     *
+     * @mbg.generated
+     */
+    private String category3;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.RANK
+     *
+     * @mbg.generated
+     */
+    private String rank;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.ISOPENED
+     *
+     * @mbg.generated
+     */
+    private Integer isopened;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.STATIONNAME
+     *
+     * @mbg.generated
+     */
+    private String stationname;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.PROJECTNAME
+     *
+     * @mbg.generated
+     */
+    private String projectname;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.LINENAME
+     *
+     * @mbg.generated
+     */
+    private String linename;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.WINDTURBINENAME
+     *
+     * @mbg.generated
+     */
+    private String windturbinename;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.ALERTTEXT
+     *
+     * @mbg.generated
+     */
+    private String alerttext;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.MODELID
+     *
+     * @mbg.generated
+     */
+    private String modelid;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.TESTINGPOINTKEY
+     *
+     * @mbg.generated
+     */
+    private String testingpointkey;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.LASTUPDATETIME
+     *
+     * @mbg.generated
+     */
+    private Date lastupdatetime;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALARMSNAP.DATAINFO
+     *
+     * @mbg.generated
+     */
+    private String datainfo;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table ALARMSNAP
+     *
+     * @mbg.generated
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.ID
+     *
+     * @return the value of ALARMSNAP.ID
+     *
+     * @mbg.generated
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.ID
+     *
+     * @param id the value for ALARMSNAP.ID
+     *
+     * @mbg.generated
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.STATIONID
+     *
+     * @return the value of ALARMSNAP.STATIONID
+     *
+     * @mbg.generated
+     */
+    public String getStationid() {
+        return stationid;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.STATIONID
+     *
+     * @param stationid the value for ALARMSNAP.STATIONID
+     *
+     * @mbg.generated
+     */
+    public void setStationid(String stationid) {
+        this.stationid = stationid == null ? null : stationid.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.PROJECTID
+     *
+     * @return the value of ALARMSNAP.PROJECTID
+     *
+     * @mbg.generated
+     */
+    public String getProjectid() {
+        return projectid;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.PROJECTID
+     *
+     * @param projectid the value for ALARMSNAP.PROJECTID
+     *
+     * @mbg.generated
+     */
+    public void setProjectid(String projectid) {
+        this.projectid = projectid == null ? null : projectid.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.LINEID
+     *
+     * @return the value of ALARMSNAP.LINEID
+     *
+     * @mbg.generated
+     */
+    public String getLineid() {
+        return lineid;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.LINEID
+     *
+     * @param lineid the value for ALARMSNAP.LINEID
+     *
+     * @mbg.generated
+     */
+    public void setLineid(String lineid) {
+        this.lineid = lineid == null ? null : lineid.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.WINDTURBINEID
+     *
+     * @return the value of ALARMSNAP.WINDTURBINEID
+     *
+     * @mbg.generated
+     */
+    public String getWindturbineid() {
+        return windturbineid;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.WINDTURBINEID
+     *
+     * @param windturbineid the value for ALARMSNAP.WINDTURBINEID
+     *
+     * @mbg.generated
+     */
+    public void setWindturbineid(String windturbineid) {
+        this.windturbineid = windturbineid == null ? null : windturbineid.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.ALERTVALUE
+     *
+     * @return the value of ALARMSNAP.ALERTVALUE
+     *
+     * @mbg.generated
+     */
+    public Integer getAlertvalue() {
+        return alertvalue;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.ALERTVALUE
+     *
+     * @param alertvalue the value for ALARMSNAP.ALERTVALUE
+     *
+     * @mbg.generated
+     */
+    public void setAlertvalue(Integer alertvalue) {
+        this.alertvalue = alertvalue;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.CATEGORY1
+     *
+     * @return the value of ALARMSNAP.CATEGORY1
+     *
+     * @mbg.generated
+     */
+    public String getCategory1() {
+        return category1;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.CATEGORY1
+     *
+     * @param category1 the value for ALARMSNAP.CATEGORY1
+     *
+     * @mbg.generated
+     */
+    public void setCategory1(String category1) {
+        this.category1 = category1 == null ? null : category1.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.CATEGORY2
+     *
+     * @return the value of ALARMSNAP.CATEGORY2
+     *
+     * @mbg.generated
+     */
+    public String getCategory2() {
+        return category2;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.CATEGORY2
+     *
+     * @param category2 the value for ALARMSNAP.CATEGORY2
+     *
+     * @mbg.generated
+     */
+    public void setCategory2(String category2) {
+        this.category2 = category2 == null ? null : category2.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.CATEGORY3
+     *
+     * @return the value of ALARMSNAP.CATEGORY3
+     *
+     * @mbg.generated
+     */
+    public String getCategory3() {
+        return category3;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.CATEGORY3
+     *
+     * @param category3 the value for ALARMSNAP.CATEGORY3
+     *
+     * @mbg.generated
+     */
+    public void setCategory3(String category3) {
+        this.category3 = category3 == null ? null : category3.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.RANK
+     *
+     * @return the value of ALARMSNAP.RANK
+     *
+     * @mbg.generated
+     */
+    public String getRank() {
+        return rank;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.RANK
+     *
+     * @param rank the value for ALARMSNAP.RANK
+     *
+     * @mbg.generated
+     */
+    public void setRank(String rank) {
+        this.rank = rank == null ? null : rank.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.ISOPENED
+     *
+     * @return the value of ALARMSNAP.ISOPENED
+     *
+     * @mbg.generated
+     */
+    public Integer getIsopened() {
+        return isopened;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.ISOPENED
+     *
+     * @param isopened the value for ALARMSNAP.ISOPENED
+     *
+     * @mbg.generated
+     */
+    public void setIsopened(Integer isopened) {
+        this.isopened = isopened;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.STATIONNAME
+     *
+     * @return the value of ALARMSNAP.STATIONNAME
+     *
+     * @mbg.generated
+     */
+    public String getStationname() {
+        return stationname;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.STATIONNAME
+     *
+     * @param stationname the value for ALARMSNAP.STATIONNAME
+     *
+     * @mbg.generated
+     */
+    public void setStationname(String stationname) {
+        this.stationname = stationname == null ? null : stationname.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.PROJECTNAME
+     *
+     * @return the value of ALARMSNAP.PROJECTNAME
+     *
+     * @mbg.generated
+     */
+    public String getProjectname() {
+        return projectname;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.PROJECTNAME
+     *
+     * @param projectname the value for ALARMSNAP.PROJECTNAME
+     *
+     * @mbg.generated
+     */
+    public void setProjectname(String projectname) {
+        this.projectname = projectname == null ? null : projectname.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.LINENAME
+     *
+     * @return the value of ALARMSNAP.LINENAME
+     *
+     * @mbg.generated
+     */
+    public String getLinename() {
+        return linename;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.LINENAME
+     *
+     * @param linename the value for ALARMSNAP.LINENAME
+     *
+     * @mbg.generated
+     */
+    public void setLinename(String linename) {
+        this.linename = linename == null ? null : linename.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.WINDTURBINENAME
+     *
+     * @return the value of ALARMSNAP.WINDTURBINENAME
+     *
+     * @mbg.generated
+     */
+    public String getWindturbinename() {
+        return windturbinename;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.WINDTURBINENAME
+     *
+     * @param windturbinename the value for ALARMSNAP.WINDTURBINENAME
+     *
+     * @mbg.generated
+     */
+    public void setWindturbinename(String windturbinename) {
+        this.windturbinename = windturbinename == null ? null : windturbinename.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.ALERTTEXT
+     *
+     * @return the value of ALARMSNAP.ALERTTEXT
+     *
+     * @mbg.generated
+     */
+    public String getAlerttext() {
+        return alerttext;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.ALERTTEXT
+     *
+     * @param alerttext the value for ALARMSNAP.ALERTTEXT
+     *
+     * @mbg.generated
+     */
+    public void setAlerttext(String alerttext) {
+        this.alerttext = alerttext == null ? null : alerttext.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.MODELID
+     *
+     * @return the value of ALARMSNAP.MODELID
+     *
+     * @mbg.generated
+     */
+    public String getModelid() {
+        return modelid;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.MODELID
+     *
+     * @param modelid the value for ALARMSNAP.MODELID
+     *
+     * @mbg.generated
+     */
+    public void setModelid(String modelid) {
+        this.modelid = modelid == null ? null : modelid.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.TESTINGPOINTKEY
+     *
+     * @return the value of ALARMSNAP.TESTINGPOINTKEY
+     *
+     * @mbg.generated
+     */
+    public String getTestingpointkey() {
+        return testingpointkey;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.TESTINGPOINTKEY
+     *
+     * @param testingpointkey the value for ALARMSNAP.TESTINGPOINTKEY
+     *
+     * @mbg.generated
+     */
+    public void setTestingpointkey(String testingpointkey) {
+        this.testingpointkey = testingpointkey == null ? null : testingpointkey.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.LASTUPDATETIME
+     *
+     * @return the value of ALARMSNAP.LASTUPDATETIME
+     *
+     * @mbg.generated
+     */
+    public Date getLastupdatetime() {
+        return lastupdatetime;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.LASTUPDATETIME
+     *
+     * @param lastupdatetime the value for ALARMSNAP.LASTUPDATETIME
+     *
+     * @mbg.generated
+     */
+    public void setLastupdatetime(Date lastupdatetime) {
+        this.lastupdatetime = lastupdatetime;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALARMSNAP.DATAINFO
+     *
+     * @return the value of ALARMSNAP.DATAINFO
+     *
+     * @mbg.generated
+     */
+    public String getDatainfo() {
+        return datainfo;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALARMSNAP.DATAINFO
+     *
+     * @param datainfo the value for ALARMSNAP.DATAINFO
+     *
+     * @mbg.generated
+     */
+    public void setDatainfo(String datainfo) {
+        this.datainfo = datainfo == null ? null : datainfo.trim();
+    }
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1663 - 0
src/main/java/com/gyee/frame/model/auto/AlarmsnapExample.java


+ 607 - 0
src/main/java/com/gyee/frame/model/auto/Alertrule2.java

@@ -0,0 +1,607 @@
+package com.gyee.frame.model.auto;
+
+import java.io.Serializable;
+
+public class Alertrule2 implements Serializable {
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.ID
+     *
+     * @mbg.generated
+     */
+    private String id;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.NAME
+     *
+     * @mbg.generated
+     */
+    private String name;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.DESCRIPTION
+     *
+     * @mbg.generated
+     */
+    private String description;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.EXPRESSION
+     *
+     * @mbg.generated
+     */
+    private String expression;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.TAG
+     *
+     * @mbg.generated
+     */
+    private String tag;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.RANK
+     *
+     * @mbg.generated
+     */
+    private String rank;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.ENABLED
+     *
+     * @mbg.generated
+     */
+    private Integer enabled;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.MODELID
+     *
+     * @mbg.generated
+     */
+    private String modelid;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.EDNAVALUE
+     *
+     * @mbg.generated
+     */
+    private Long ednavalue;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.CATEGORY
+     *
+     * @mbg.generated
+     */
+    private String category;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.RANGE
+     *
+     * @mbg.generated
+     */
+    private String range;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.STATION
+     *
+     * @mbg.generated
+     */
+    private String station;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.WINDTURBINE
+     *
+     * @mbg.generated
+     */
+    private String windturbine;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.LINE
+     *
+     * @mbg.generated
+     */
+    private String line;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.PROJECT
+     *
+     * @mbg.generated
+     */
+    private String project;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.ELECTRICAL
+     *
+     * @mbg.generated
+     */
+    private String electrical;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.TASKSTART
+     *
+     * @mbg.generated
+     */
+    private String taskstart;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column ALERTRULE2.RELATEDPARTS
+     *
+     * @mbg.generated
+     */
+    private String relatedparts;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table ALERTRULE2
+     *
+     * @mbg.generated
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.ID
+     *
+     * @return the value of ALERTRULE2.ID
+     *
+     * @mbg.generated
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.ID
+     *
+     * @param id the value for ALERTRULE2.ID
+     *
+     * @mbg.generated
+     */
+    public void setId(String id) {
+        this.id = id == null ? null : id.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.NAME
+     *
+     * @return the value of ALERTRULE2.NAME
+     *
+     * @mbg.generated
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.NAME
+     *
+     * @param name the value for ALERTRULE2.NAME
+     *
+     * @mbg.generated
+     */
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.DESCRIPTION
+     *
+     * @return the value of ALERTRULE2.DESCRIPTION
+     *
+     * @mbg.generated
+     */
+    public String getDescription() {
+        return description;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.DESCRIPTION
+     *
+     * @param description the value for ALERTRULE2.DESCRIPTION
+     *
+     * @mbg.generated
+     */
+    public void setDescription(String description) {
+        this.description = description == null ? null : description.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.EXPRESSION
+     *
+     * @return the value of ALERTRULE2.EXPRESSION
+     *
+     * @mbg.generated
+     */
+    public String getExpression() {
+        return expression;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.EXPRESSION
+     *
+     * @param expression the value for ALERTRULE2.EXPRESSION
+     *
+     * @mbg.generated
+     */
+    public void setExpression(String expression) {
+        this.expression = expression == null ? null : expression.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.TAG
+     *
+     * @return the value of ALERTRULE2.TAG
+     *
+     * @mbg.generated
+     */
+    public String getTag() {
+        return tag;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.TAG
+     *
+     * @param tag the value for ALERTRULE2.TAG
+     *
+     * @mbg.generated
+     */
+    public void setTag(String tag) {
+        this.tag = tag == null ? null : tag.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.RANK
+     *
+     * @return the value of ALERTRULE2.RANK
+     *
+     * @mbg.generated
+     */
+    public String getRank() {
+        return rank;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.RANK
+     *
+     * @param rank the value for ALERTRULE2.RANK
+     *
+     * @mbg.generated
+     */
+    public void setRank(String rank) {
+        this.rank = rank == null ? null : rank.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.ENABLED
+     *
+     * @return the value of ALERTRULE2.ENABLED
+     *
+     * @mbg.generated
+     */
+    public Integer getEnabled() {
+        return enabled;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.ENABLED
+     *
+     * @param enabled the value for ALERTRULE2.ENABLED
+     *
+     * @mbg.generated
+     */
+    public void setEnabled(Integer enabled) {
+        this.enabled = enabled;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.MODELID
+     *
+     * @return the value of ALERTRULE2.MODELID
+     *
+     * @mbg.generated
+     */
+    public String getModelid() {
+        return modelid;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.MODELID
+     *
+     * @param modelid the value for ALERTRULE2.MODELID
+     *
+     * @mbg.generated
+     */
+    public void setModelid(String modelid) {
+        this.modelid = modelid == null ? null : modelid.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.EDNAVALUE
+     *
+     * @return the value of ALERTRULE2.EDNAVALUE
+     *
+     * @mbg.generated
+     */
+    public Long getEdnavalue() {
+        return ednavalue;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.EDNAVALUE
+     *
+     * @param ednavalue the value for ALERTRULE2.EDNAVALUE
+     *
+     * @mbg.generated
+     */
+    public void setEdnavalue(Long ednavalue) {
+        this.ednavalue = ednavalue;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.CATEGORY
+     *
+     * @return the value of ALERTRULE2.CATEGORY
+     *
+     * @mbg.generated
+     */
+    public String getCategory() {
+        return category;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.CATEGORY
+     *
+     * @param category the value for ALERTRULE2.CATEGORY
+     *
+     * @mbg.generated
+     */
+    public void setCategory(String category) {
+        this.category = category == null ? null : category.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.RANGE
+     *
+     * @return the value of ALERTRULE2.RANGE
+     *
+     * @mbg.generated
+     */
+    public String getRange() {
+        return range;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.RANGE
+     *
+     * @param range the value for ALERTRULE2.RANGE
+     *
+     * @mbg.generated
+     */
+    public void setRange(String range) {
+        this.range = range == null ? null : range.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.STATION
+     *
+     * @return the value of ALERTRULE2.STATION
+     *
+     * @mbg.generated
+     */
+    public String getStation() {
+        return station;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.STATION
+     *
+     * @param station the value for ALERTRULE2.STATION
+     *
+     * @mbg.generated
+     */
+    public void setStation(String station) {
+        this.station = station == null ? null : station.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.WINDTURBINE
+     *
+     * @return the value of ALERTRULE2.WINDTURBINE
+     *
+     * @mbg.generated
+     */
+    public String getWindturbine() {
+        return windturbine;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.WINDTURBINE
+     *
+     * @param windturbine the value for ALERTRULE2.WINDTURBINE
+     *
+     * @mbg.generated
+     */
+    public void setWindturbine(String windturbine) {
+        this.windturbine = windturbine == null ? null : windturbine.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.LINE
+     *
+     * @return the value of ALERTRULE2.LINE
+     *
+     * @mbg.generated
+     */
+    public String getLine() {
+        return line;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.LINE
+     *
+     * @param line the value for ALERTRULE2.LINE
+     *
+     * @mbg.generated
+     */
+    public void setLine(String line) {
+        this.line = line == null ? null : line.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.PROJECT
+     *
+     * @return the value of ALERTRULE2.PROJECT
+     *
+     * @mbg.generated
+     */
+    public String getProject() {
+        return project;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.PROJECT
+     *
+     * @param project the value for ALERTRULE2.PROJECT
+     *
+     * @mbg.generated
+     */
+    public void setProject(String project) {
+        this.project = project == null ? null : project.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.ELECTRICAL
+     *
+     * @return the value of ALERTRULE2.ELECTRICAL
+     *
+     * @mbg.generated
+     */
+    public String getElectrical() {
+        return electrical;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.ELECTRICAL
+     *
+     * @param electrical the value for ALERTRULE2.ELECTRICAL
+     *
+     * @mbg.generated
+     */
+    public void setElectrical(String electrical) {
+        this.electrical = electrical == null ? null : electrical.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.TASKSTART
+     *
+     * @return the value of ALERTRULE2.TASKSTART
+     *
+     * @mbg.generated
+     */
+    public String getTaskstart() {
+        return taskstart;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.TASKSTART
+     *
+     * @param taskstart the value for ALERTRULE2.TASKSTART
+     *
+     * @mbg.generated
+     */
+    public void setTaskstart(String taskstart) {
+        this.taskstart = taskstart == null ? null : taskstart.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column ALERTRULE2.RELATEDPARTS
+     *
+     * @return the value of ALERTRULE2.RELATEDPARTS
+     *
+     * @mbg.generated
+     */
+    public String getRelatedparts() {
+        return relatedparts;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column ALERTRULE2.RELATEDPARTS
+     *
+     * @param relatedparts the value for ALERTRULE2.RELATEDPARTS
+     *
+     * @mbg.generated
+     */
+    public void setRelatedparts(String relatedparts) {
+        this.relatedparts = relatedparts == null ? null : relatedparts.trim();
+    }
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1542 - 0
src/main/java/com/gyee/frame/model/auto/Alertrule2Example.java


+ 147 - 0
src/main/java/com/gyee/frame/model/auto/TvuePermission.java

@@ -0,0 +1,147 @@
+package com.gyee.frame.model.auto;
+
+import java.io.Serializable;
+
+public class TvuePermission implements Serializable {
+    private String id;
+
+    private String name;
+
+    private String descripion;
+
+    private String url;
+
+    private Integer isBlank;
+
+    private String pid;
+
+    private String perms;
+
+    private Integer type;
+
+    private String icon;
+
+    private Integer orderNum;
+
+    private Integer visible;
+
+    private Integer childCount;
+
+    private static final long serialVersionUID = 1L;
+
+    public TvuePermission(String id, String name, String descripion, String url, Integer isBlank, String pid, String perms, Integer type, String icon, Integer orderNum, Integer visible, Integer childCount) {
+        this.id = id;
+        this.name = name;
+        this.descripion = descripion;
+        this.url = url;
+        this.isBlank = isBlank;
+        this.pid = pid;
+        this.perms = perms;
+        this.type = type;
+        this.icon = icon;
+        this.orderNum = orderNum;
+        this.visible=visible;
+        this.childCount = childCount;
+    }
+
+    public TvuePermission() {
+        super();
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id == null ? null : id.trim();
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    public String getDescripion() {
+        return descripion;
+    }
+
+    public void setDescripion(String descripion) {
+        this.descripion = descripion == null ? null : descripion.trim();
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url == null ? null : url.trim();
+    }
+
+    public Integer getIsBlank() {
+        return isBlank;
+    }
+
+    public void setIsBlank(Integer isBlank) {
+        this.isBlank = isBlank;
+    }
+
+    public String getPid() {
+        return pid;
+    }
+
+    public void setPid(String pid) {
+        this.pid = pid == null ? null : pid.trim();
+    }
+
+    public String getPerms() {
+        return perms;
+    }
+
+    public void setPerms(String perms) {
+        this.perms = perms == null ? null : perms.trim();
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getIcon() {
+        return icon;
+    }
+
+    public void setIcon(String icon) {
+        this.icon = icon == null ? null : icon.trim();
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public Integer getChildCount() {
+        return childCount;
+    }
+
+    public void setChildCount(Integer childCount) {
+        this.childCount = childCount;
+    }
+
+    public Integer getVisible() {
+        return visible;
+    }
+
+    public void setVisible(Integer visible) {
+        this.visible = visible;
+    }
+
+}

+ 930 - 0
src/main/java/com/gyee/frame/model/auto/TvuePermissionExample.java

@@ -0,0 +1,930 @@
+package com.gyee.frame.model.auto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TvuePermissionExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<TvuePermissionExample.Criteria> oredCriteria;
+
+    public TvuePermissionExample() {
+        oredCriteria = new ArrayList<TvuePermissionExample.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<TvuePermissionExample.Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(TvuePermissionExample.Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public TvuePermissionExample.Criteria or() {
+        TvuePermissionExample.Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public TvuePermissionExample.Criteria createCriteria() {
+        TvuePermissionExample.Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected TvuePermissionExample.Criteria createCriteriaInternal() {
+        TvuePermissionExample.Criteria criteria = new TvuePermissionExample.Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<TvuePermissionExample.Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<TvuePermissionExample.Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<TvuePermissionExample.Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<TvuePermissionExample.Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new TvuePermissionExample.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 TvuePermissionExample.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 TvuePermissionExample.Criterion(condition, value1, value2));
+        }
+
+        public TvuePermissionExample.Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdEqualTo(String value) {
+            addCriterion("id =", value, "id");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdNotEqualTo(String value) {
+            addCriterion("id <>", value, "id");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdGreaterThan(String value) {
+            addCriterion("id >", value, "id");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdGreaterThanOrEqualTo(String value) {
+            addCriterion("id >=", value, "id");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdLessThan(String value) {
+            addCriterion("id <", value, "id");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdLessThanOrEqualTo(String value) {
+            addCriterion("id <=", value, "id");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdLike(String value) {
+            addCriterion("id like", value, "id");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdNotLike(String value) {
+            addCriterion("id not like", value, "id");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdIn(List<String> values) {
+            addCriterion("id in", values, "id");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdNotIn(List<String> values) {
+            addCriterion("id not in", values, "id");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdBetween(String value1, String value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIdNotBetween(String value1, String value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameIsNull() {
+            addCriterion("name is null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameIsNotNull() {
+            addCriterion("name is not null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameEqualTo(String value) {
+            addCriterion("name =", value, "name");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameNotEqualTo(String value) {
+            addCriterion("name <>", value, "name");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameGreaterThan(String value) {
+            addCriterion("name >", value, "name");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameGreaterThanOrEqualTo(String value) {
+            addCriterion("name >=", value, "name");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameLessThan(String value) {
+            addCriterion("name <", value, "name");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameLessThanOrEqualTo(String value) {
+            addCriterion("name <=", value, "name");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameLike(String value) {
+            addCriterion("name like", value, "name");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameNotLike(String value) {
+            addCriterion("name not like", value, "name");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameIn(List<String> values) {
+            addCriterion("name in", values, "name");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameNotIn(List<String> values) {
+            addCriterion("name not in", values, "name");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameBetween(String value1, String value2) {
+            addCriterion("name between", value1, value2, "name");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andNameNotBetween(String value1, String value2) {
+            addCriterion("name not between", value1, value2, "name");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionIsNull() {
+            addCriterion("descripion is null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionIsNotNull() {
+            addCriterion("descripion is not null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionEqualTo(String value) {
+            addCriterion("descripion =", value, "descripion");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionNotEqualTo(String value) {
+            addCriterion("descripion <>", value, "descripion");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionGreaterThan(String value) {
+            addCriterion("descripion >", value, "descripion");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionGreaterThanOrEqualTo(String value) {
+            addCriterion("descripion >=", value, "descripion");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionLessThan(String value) {
+            addCriterion("descripion <", value, "descripion");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionLessThanOrEqualTo(String value) {
+            addCriterion("descripion <=", value, "descripion");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionLike(String value) {
+            addCriterion("descripion like", value, "descripion");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionNotLike(String value) {
+            addCriterion("descripion not like", value, "descripion");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionIn(List<String> values) {
+            addCriterion("descripion in", values, "descripion");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionNotIn(List<String> values) {
+            addCriterion("descripion not in", values, "descripion");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionBetween(String value1, String value2) {
+            addCriterion("descripion between", value1, value2, "descripion");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andDescripionNotBetween(String value1, String value2) {
+            addCriterion("descripion not between", value1, value2, "descripion");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlIsNull() {
+            addCriterion("url is null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlIsNotNull() {
+            addCriterion("url is not null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlEqualTo(String value) {
+            addCriterion("url =", value, "url");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlNotEqualTo(String value) {
+            addCriterion("url <>", value, "url");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlGreaterThan(String value) {
+            addCriterion("url >", value, "url");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlGreaterThanOrEqualTo(String value) {
+            addCriterion("url >=", value, "url");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlLessThan(String value) {
+            addCriterion("url <", value, "url");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlLessThanOrEqualTo(String value) {
+            addCriterion("url <=", value, "url");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlLike(String value) {
+            addCriterion("url like", value, "url");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlNotLike(String value) {
+            addCriterion("url not like", value, "url");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlIn(List<String> values) {
+            addCriterion("url in", values, "url");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlNotIn(List<String> values) {
+            addCriterion("url not in", values, "url");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlBetween(String value1, String value2) {
+            addCriterion("url between", value1, value2, "url");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andUrlNotBetween(String value1, String value2) {
+            addCriterion("url not between", value1, value2, "url");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIsBlankIsNull() {
+            addCriterion("is_blank is null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIsBlankIsNotNull() {
+            addCriterion("is_blank is not null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIsBlankEqualTo(Integer value) {
+            addCriterion("is_blank =", value, "isBlank");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIsBlankNotEqualTo(Integer value) {
+            addCriterion("is_blank <>", value, "isBlank");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIsBlankGreaterThan(Integer value) {
+            addCriterion("is_blank >", value, "isBlank");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIsBlankGreaterThanOrEqualTo(Integer value) {
+            addCriterion("is_blank >=", value, "isBlank");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIsBlankLessThan(Integer value) {
+            addCriterion("is_blank <", value, "isBlank");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIsBlankLessThanOrEqualTo(Integer value) {
+            addCriterion("is_blank <=", value, "isBlank");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIsBlankIn(List<Integer> values) {
+            addCriterion("is_blank in", values, "isBlank");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIsBlankNotIn(List<Integer> values) {
+            addCriterion("is_blank not in", values, "isBlank");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIsBlankBetween(Integer value1, Integer value2) {
+            addCriterion("is_blank between", value1, value2, "isBlank");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIsBlankNotBetween(Integer value1, Integer value2) {
+            addCriterion("is_blank not between", value1, value2, "isBlank");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidIsNull() {
+            addCriterion("pid is null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidIsNotNull() {
+            addCriterion("pid is not null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidEqualTo(String value) {
+            addCriterion("pid =", value, "pid");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidNotEqualTo(String value) {
+            addCriterion("pid <>", value, "pid");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidGreaterThan(String value) {
+            addCriterion("pid >", value, "pid");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidGreaterThanOrEqualTo(String value) {
+            addCriterion("pid >=", value, "pid");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidLessThan(String value) {
+            addCriterion("pid <", value, "pid");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidLessThanOrEqualTo(String value) {
+            addCriterion("pid <=", value, "pid");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidLike(String value) {
+            addCriterion("pid like", value, "pid");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidNotLike(String value) {
+            addCriterion("pid not like", value, "pid");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidIn(List<String> values) {
+            addCriterion("pid in", values, "pid");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidNotIn(List<String> values) {
+            addCriterion("pid not in", values, "pid");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidBetween(String value1, String value2) {
+            addCriterion("pid between", value1, value2, "pid");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPidNotBetween(String value1, String value2) {
+            addCriterion("pid not between", value1, value2, "pid");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsIsNull() {
+            addCriterion("perms is null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsIsNotNull() {
+            addCriterion("perms is not null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsEqualTo(String value) {
+            addCriterion("perms =", value, "perms");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsNotEqualTo(String value) {
+            addCriterion("perms <>", value, "perms");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsGreaterThan(String value) {
+            addCriterion("perms >", value, "perms");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsGreaterThanOrEqualTo(String value) {
+            addCriterion("perms >=", value, "perms");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsLessThan(String value) {
+            addCriterion("perms <", value, "perms");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsLessThanOrEqualTo(String value) {
+            addCriterion("perms <=", value, "perms");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsLike(String value) {
+            addCriterion("perms like", value, "perms");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsNotLike(String value) {
+            addCriterion("perms not like", value, "perms");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsIn(List<String> values) {
+            addCriterion("perms in", values, "perms");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsNotIn(List<String> values) {
+            addCriterion("perms not in", values, "perms");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsBetween(String value1, String value2) {
+            addCriterion("perms between", value1, value2, "perms");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andPermsNotBetween(String value1, String value2) {
+            addCriterion("perms not between", value1, value2, "perms");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andTypeIsNull() {
+            addCriterion("type is null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andTypeIsNotNull() {
+            addCriterion("type is not null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andTypeEqualTo(Integer value) {
+            addCriterion("type =", value, "type");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andTypeNotEqualTo(Integer value) {
+            addCriterion("type <>", value, "type");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andTypeGreaterThan(Integer value) {
+            addCriterion("type >", value, "type");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andTypeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("type >=", value, "type");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andTypeLessThan(Integer value) {
+            addCriterion("type <", value, "type");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andTypeLessThanOrEqualTo(Integer value) {
+            addCriterion("type <=", value, "type");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andTypeIn(List<Integer> values) {
+            addCriterion("type in", values, "type");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andTypeNotIn(List<Integer> values) {
+            addCriterion("type not in", values, "type");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andTypeBetween(Integer value1, Integer value2) {
+            addCriterion("type between", value1, value2, "type");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andTypeNotBetween(Integer value1, Integer value2) {
+            addCriterion("type not between", value1, value2, "type");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconIsNull() {
+            addCriterion("icon is null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconIsNotNull() {
+            addCriterion("icon is not null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconEqualTo(String value) {
+            addCriterion("icon =", value, "icon");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconNotEqualTo(String value) {
+            addCriterion("icon <>", value, "icon");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconGreaterThan(String value) {
+            addCriterion("icon >", value, "icon");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconGreaterThanOrEqualTo(String value) {
+            addCriterion("icon >=", value, "icon");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconLessThan(String value) {
+            addCriterion("icon <", value, "icon");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconLessThanOrEqualTo(String value) {
+            addCriterion("icon <=", value, "icon");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconLike(String value) {
+            addCriterion("icon like", value, "icon");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconNotLike(String value) {
+            addCriterion("icon not like", value, "icon");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconIn(List<String> values) {
+            addCriterion("icon in", values, "icon");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconNotIn(List<String> values) {
+            addCriterion("icon not in", values, "icon");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconBetween(String value1, String value2) {
+            addCriterion("icon between", value1, value2, "icon");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andIconNotBetween(String value1, String value2) {
+            addCriterion("icon not between", value1, value2, "icon");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andOrderNumIsNull() {
+            addCriterion("order_num is null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andOrderNumIsNotNull() {
+            addCriterion("order_num is not null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andOrderNumEqualTo(Integer value) {
+            addCriterion("order_num =", value, "orderNum");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andOrderNumNotEqualTo(Integer value) {
+            addCriterion("order_num <>", value, "orderNum");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andOrderNumGreaterThan(Integer value) {
+            addCriterion("order_num >", value, "orderNum");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andOrderNumGreaterThanOrEqualTo(Integer value) {
+            addCriterion("order_num >=", value, "orderNum");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andOrderNumLessThan(Integer value) {
+            addCriterion("order_num <", value, "orderNum");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andOrderNumLessThanOrEqualTo(Integer value) {
+            addCriterion("order_num <=", value, "orderNum");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andOrderNumIn(List<Integer> values) {
+            addCriterion("order_num in", values, "orderNum");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andOrderNumNotIn(List<Integer> values) {
+            addCriterion("order_num not in", values, "orderNum");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andOrderNumBetween(Integer value1, Integer value2) {
+            addCriterion("order_num between", value1, value2, "orderNum");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andOrderNumNotBetween(Integer value1, Integer value2) {
+            addCriterion("order_num not between", value1, value2, "orderNum");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andVisibleIsNull() {
+            addCriterion("visible is null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andVisibleIsNotNull() {
+            addCriterion("visible is not null");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andVisibleEqualTo(Integer value) {
+            addCriterion("visible =", value, "visible");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andVisibleNotEqualTo(Integer value) {
+            addCriterion("visible <>", value, "visible");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andVisibleGreaterThan(Integer value) {
+            addCriterion("visible >", value, "visible");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andVisibleGreaterThanOrEqualTo(Integer value) {
+            addCriterion("visible >=", value, "visible");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andVisibleLessThan(Integer value) {
+            addCriterion("visible <", value, "visible");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andVisibleLessThanOrEqualTo(Integer value) {
+            addCriterion("visible <=", value, "visible");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andVisibleIn(List<Integer> values) {
+            addCriterion("visible in", values, "visible");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andVisibleNotIn(List<Integer> values) {
+            addCriterion("visible not in", values, "visible");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andVisibleBetween(Integer value1, Integer value2) {
+            addCriterion("visible between", value1, value2, "visible");
+            return (TvuePermissionExample.Criteria) this;
+        }
+
+        public TvuePermissionExample.Criteria andVisibleNotBetween(Integer value1, Integer value2) {
+            addCriterion("visible not between", value1, value2, "visible");
+            return (TvuePermissionExample.Criteria) this;
+        }
+    }
+
+    public static class Criteria extends TvuePermissionExample.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);
+        }
+    }
+}

+ 48 - 0
src/main/java/com/gyee/frame/model/auto/TvuePermissionRole.java

@@ -0,0 +1,48 @@
+package com.gyee.frame.model.auto;
+
+import java.io.Serializable;
+
+public class TvuePermissionRole implements Serializable {
+    private String id;
+
+    private String roleId;
+
+    private String permissionId;
+
+    private static final long serialVersionUID = 1L;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id == null ? null : id.trim();
+    }
+
+    public String getRoleId() {
+        return roleId;
+    }
+
+    public void setRoleId(String roleId) {
+        this.roleId = roleId == null ? null : roleId.trim();
+    }
+
+    public String getPermissionId() {
+        return permissionId;
+    }
+
+    public void setPermissionId(String permissionId) {
+        this.permissionId = permissionId == null ? null : permissionId.trim();
+    }
+
+    public TvuePermissionRole(String id, String roleId, String permissionId) {
+        super();
+        this.id = id;
+        this.roleId = roleId;
+        this.permissionId = permissionId;
+    }
+
+    public TvuePermissionRole() {
+        super();
+    }
+}

+ 512 - 0
src/main/java/com/gyee/frame/model/auto/TvuePermissionRoleExample.java

@@ -0,0 +1,512 @@
+package com.gyee.frame.model.auto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TvuePermissionRoleExample {
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    protected String orderByClause;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    protected boolean distinct;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    protected List<Criteria> oredCriteria;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    public TvuePermissionRoleExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    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 andRoleIdIsNull() {
+            addCriterion("role_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdIsNotNull() {
+            addCriterion("role_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdEqualTo(String value) {
+            addCriterion("role_id =", value, "roleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdNotEqualTo(String value) {
+            addCriterion("role_id <>", value, "roleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdGreaterThan(String value) {
+            addCriterion("role_id >", value, "roleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdGreaterThanOrEqualTo(String value) {
+            addCriterion("role_id >=", value, "roleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdLessThan(String value) {
+            addCriterion("role_id <", value, "roleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdLessThanOrEqualTo(String value) {
+            addCriterion("role_id <=", value, "roleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdLike(String value) {
+            addCriterion("role_id like", value, "roleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdNotLike(String value) {
+            addCriterion("role_id not like", value, "roleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdIn(List<String> values) {
+            addCriterion("role_id in", values, "roleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdNotIn(List<String> values) {
+            addCriterion("role_id not in", values, "roleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdBetween(String value1, String value2) {
+            addCriterion("role_id between", value1, value2, "roleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoleIdNotBetween(String value1, String value2) {
+            addCriterion("role_id not between", value1, value2, "roleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdIsNull() {
+            addCriterion("permission_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdIsNotNull() {
+            addCriterion("permission_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdEqualTo(String value) {
+            addCriterion("permission_id =", value, "permissionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdNotEqualTo(String value) {
+            addCriterion("permission_id <>", value, "permissionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdGreaterThan(String value) {
+            addCriterion("permission_id >", value, "permissionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdGreaterThanOrEqualTo(String value) {
+            addCriterion("permission_id >=", value, "permissionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdLessThan(String value) {
+            addCriterion("permission_id <", value, "permissionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdLessThanOrEqualTo(String value) {
+            addCriterion("permission_id <=", value, "permissionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdLike(String value) {
+            addCriterion("permission_id like", value, "permissionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdNotLike(String value) {
+            addCriterion("permission_id not like", value, "permissionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdIn(List<String> values) {
+            addCriterion("permission_id in", values, "permissionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdNotIn(List<String> values) {
+            addCriterion("permission_id not in", values, "permissionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdBetween(String value1, String value2) {
+            addCriterion("permission_id between", value1, value2, "permissionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPermissionIdNotBetween(String value1, String value2) {
+            addCriterion("permission_id not between", value1, value2, "permissionId");
+            return (Criteria) this;
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated do_not_delete_during_merge
+     */
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table t_vue_permission_role
+     *
+     * @mbg.generated
+     */
+    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);
+        }
+    }
+}

+ 37 - 0
src/main/java/com/gyee/frame/model/auto/TvueRole.java

@@ -0,0 +1,37 @@
+package com.gyee.frame.model.auto;
+
+import java.io.Serializable;
+
+public class TvueRole implements Serializable {
+    private String id;
+
+    private String name;
+
+    private static final long serialVersionUID = 1L;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id == null ? null : id.trim();
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    public TvueRole(String id, String name) {
+        super();
+        this.id = id;
+        this.name = name;
+    }
+
+    public TvueRole() {
+        super();
+    }
+}

+ 442 - 0
src/main/java/com/gyee/frame/model/auto/TvueRoleExample.java

@@ -0,0 +1,442 @@
+package com.gyee.frame.model.auto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TvueRoleExample {
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    protected String orderByClause;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    protected boolean distinct;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    protected List<Criteria> oredCriteria;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    public TvueRoleExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    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 andNameIsNull() {
+            addCriterion("name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNotNull() {
+            addCriterion("name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameEqualTo(String value) {
+            addCriterion("name =", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotEqualTo(String value) {
+            addCriterion("name <>", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThan(String value) {
+            addCriterion("name >", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThanOrEqualTo(String value) {
+            addCriterion("name >=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThan(String value) {
+            addCriterion("name <", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThanOrEqualTo(String value) {
+            addCriterion("name <=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLike(String value) {
+            addCriterion("name like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotLike(String value) {
+            addCriterion("name not like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIn(List<String> values) {
+            addCriterion("name in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotIn(List<String> values) {
+            addCriterion("name not in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameBetween(String value1, String value2) {
+            addCriterion("name between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotBetween(String value1, String value2) {
+            addCriterion("name not between", value1, value2, "name");
+            return (Criteria) this;
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table t_vue_role
+     *
+     * @mbg.generated do_not_delete_during_merge
+     */
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table t_vue_role
+     *
+     * @mbg.generated
+     */
+    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);
+        }
+    }
+}

+ 48 - 0
src/main/java/com/gyee/frame/model/auto/TvueRoleUser.java

@@ -0,0 +1,48 @@
+package com.gyee.frame.model.auto;
+
+import java.io.Serializable;
+
+public class TvueRoleUser implements Serializable {
+    private String id;
+
+    private String sysUserId;
+
+    private String sysRoleId;
+
+    private static final long serialVersionUID = 1L;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id == null ? null : id.trim();
+    }
+
+    public String getSysUserId() {
+        return sysUserId;
+    }
+
+    public void setSysUserId(String sysUserId) {
+        this.sysUserId = sysUserId == null ? null : sysUserId.trim();
+    }
+
+    public String getSysRoleId() {
+        return sysRoleId;
+    }
+
+    public void setSysRoleId(String sysRoleId) {
+        this.sysRoleId = sysRoleId == null ? null : sysRoleId.trim();
+    }
+
+    public TvueRoleUser() {
+        super();
+    }
+
+    public TvueRoleUser(String id, String sysUserId, String sysRoleId) {
+        super();
+        this.id = id;
+        this.sysUserId = sysUserId;
+        this.sysRoleId = sysRoleId;
+    }
+}

+ 512 - 0
src/main/java/com/gyee/frame/model/auto/TvueRoleUserExample.java

@@ -0,0 +1,512 @@
+package com.gyee.frame.model.auto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TvueRoleUserExample {
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    protected String orderByClause;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    protected boolean distinct;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    protected List<Criteria> oredCriteria;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    public TvueRoleUserExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    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 andSysUserIdIsNull() {
+            addCriterion("sys_user_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdIsNotNull() {
+            addCriterion("sys_user_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdEqualTo(String value) {
+            addCriterion("sys_user_id =", value, "sysUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdNotEqualTo(String value) {
+            addCriterion("sys_user_id <>", value, "sysUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdGreaterThan(String value) {
+            addCriterion("sys_user_id >", value, "sysUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdGreaterThanOrEqualTo(String value) {
+            addCriterion("sys_user_id >=", value, "sysUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdLessThan(String value) {
+            addCriterion("sys_user_id <", value, "sysUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdLessThanOrEqualTo(String value) {
+            addCriterion("sys_user_id <=", value, "sysUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdLike(String value) {
+            addCriterion("sys_user_id like", value, "sysUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdNotLike(String value) {
+            addCriterion("sys_user_id not like", value, "sysUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdIn(List<String> values) {
+            addCriterion("sys_user_id in", values, "sysUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdNotIn(List<String> values) {
+            addCriterion("sys_user_id not in", values, "sysUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdBetween(String value1, String value2) {
+            addCriterion("sys_user_id between", value1, value2, "sysUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysUserIdNotBetween(String value1, String value2) {
+            addCriterion("sys_user_id not between", value1, value2, "sysUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdIsNull() {
+            addCriterion("sys_role_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdIsNotNull() {
+            addCriterion("sys_role_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdEqualTo(String value) {
+            addCriterion("sys_role_id =", value, "sysRoleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdNotEqualTo(String value) {
+            addCriterion("sys_role_id <>", value, "sysRoleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdGreaterThan(String value) {
+            addCriterion("sys_role_id >", value, "sysRoleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdGreaterThanOrEqualTo(String value) {
+            addCriterion("sys_role_id >=", value, "sysRoleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdLessThan(String value) {
+            addCriterion("sys_role_id <", value, "sysRoleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdLessThanOrEqualTo(String value) {
+            addCriterion("sys_role_id <=", value, "sysRoleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdLike(String value) {
+            addCriterion("sys_role_id like", value, "sysRoleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdNotLike(String value) {
+            addCriterion("sys_role_id not like", value, "sysRoleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdIn(List<String> values) {
+            addCriterion("sys_role_id in", values, "sysRoleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdNotIn(List<String> values) {
+            addCriterion("sys_role_id not in", values, "sysRoleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdBetween(String value1, String value2) {
+            addCriterion("sys_role_id between", value1, value2, "sysRoleId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSysRoleIdNotBetween(String value1, String value2) {
+            addCriterion("sys_role_id not between", value1, value2, "sysRoleId");
+            return (Criteria) this;
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated do_not_delete_during_merge
+     */
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table t_vue_role_user
+     *
+     * @mbg.generated
+     */
+    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);
+        }
+    }
+}

+ 92 - 0
src/main/java/com/gyee/frame/service/AlarmcountService.java

@@ -0,0 +1,92 @@
+package com.gyee.frame.service;
+
+import com.gyee.frame.common.base.BaseService;
+import com.gyee.frame.common.support.Convert;
+import com.gyee.frame.mapper.auto.AlarmcountMapper;
+import com.gyee.frame.model.auto.Alarmcount;
+import com.gyee.frame.model.auto.AlarmcountExample;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+
+@Service
+public class AlarmcountService implements BaseService<Alarmcount, AlarmcountExample> {
+	@Resource
+	private AlarmcountMapper alarmcountMapper;
+	
+
+	@Override
+	public int deleteByPrimaryKey(String ids) {
+				
+			List<Integer> lista=Convert.toIntArrayList(ids);
+			AlarmcountExample example=new AlarmcountExample();
+			example.createCriteria().andIdIn(lista);
+			return alarmcountMapper.deleteByExample(example);
+			
+				
+	}
+	
+	
+	@Override
+	public Alarmcount selectByPrimaryKey(String id) {
+				
+			return new Alarmcount();
+				
+	}
+
+	
+	@Override
+	public int updateByPrimaryKeySelective(Alarmcount record) {
+		return 0;
+	}
+	
+	
+	/**
+	 * 添加
+	 */
+	@Override
+	public int insertSelective(Alarmcount record) {
+				
+
+				
+		return alarmcountMapper.insertSelective(record);
+	}
+	
+	
+	@Override
+	public int updateByExampleSelective(Alarmcount record, AlarmcountExample example) {
+		
+		return alarmcountMapper.updateByExampleSelective(record, example);
+	}
+
+	
+	@Override
+	public int updateByExample(Alarmcount record, AlarmcountExample example) {
+		
+		return alarmcountMapper.updateByExample(record, example);
+	}
+
+	@Override
+	public List<Alarmcount> selectByExample(AlarmcountExample example) {
+		
+		return alarmcountMapper.selectByExample(example);
+	}
+
+	
+	@Override
+	public long countByExample(AlarmcountExample example) {
+		
+		return alarmcountMapper.countByExample(example);
+	}
+
+	
+	@Override
+	public int deleteByExample(AlarmcountExample example) {
+		
+		return alarmcountMapper.deleteByExample(example);
+	}
+	
+
+}

+ 92 - 0
src/main/java/com/gyee/frame/service/AlarmsnapService.java

@@ -0,0 +1,92 @@
+package com.gyee.frame.service;
+
+import com.gyee.frame.common.base.BaseService;
+import com.gyee.frame.common.support.Convert;
+import com.gyee.frame.mapper.auto.AlarmsnapMapper;
+import com.gyee.frame.model.auto.Alarmsnap;
+import com.gyee.frame.model.auto.AlarmsnapExample;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+
+@Service
+public class AlarmsnapService implements BaseService<Alarmsnap, AlarmsnapExample> {
+	@Resource
+	private AlarmsnapMapper alarmsnapMapper;
+	
+
+	@Override
+	public int deleteByPrimaryKey(String ids) {
+				
+			List<Integer> lista=Convert.toIntArrayList(ids);
+			AlarmsnapExample example=new AlarmsnapExample();
+			example.createCriteria().andIdIn(lista);
+			return alarmsnapMapper.deleteByExample(example);
+			
+				
+	}
+	
+	
+	@Override
+	public Alarmsnap selectByPrimaryKey(String id) {
+				
+			return alarmsnapMapper.selectByPrimaryKey(Integer.valueOf(id));
+				
+	}
+
+	
+	@Override
+	public int updateByPrimaryKeySelective(Alarmsnap record) {
+		return alarmsnapMapper.updateByPrimaryKeySelective(record);
+	}
+	
+	
+	/**
+	 * 添加
+	 */
+	@Override
+	public int insertSelective(Alarmsnap record) {
+				
+
+				
+		return alarmsnapMapper.insertSelective(record);
+	}
+	
+	
+	@Override
+	public int updateByExampleSelective(Alarmsnap record, AlarmsnapExample example) {
+		
+		return alarmsnapMapper.updateByExampleSelective(record, example);
+	}
+
+	
+	@Override
+	public int updateByExample(Alarmsnap record, AlarmsnapExample example) {
+		
+		return alarmsnapMapper.updateByExample(record, example);
+	}
+
+	@Override
+	public List<Alarmsnap> selectByExample(AlarmsnapExample example) {
+		
+		return alarmsnapMapper.selectByExample(example);
+	}
+
+	
+	@Override
+	public long countByExample(AlarmsnapExample example) {
+		
+		return alarmsnapMapper.countByExample(example);
+	}
+
+	
+	@Override
+	public int deleteByExample(AlarmsnapExample example) {
+		
+		return alarmsnapMapper.deleteByExample(example);
+	}
+	
+
+}

+ 95 - 0
src/main/java/com/gyee/frame/service/Alertrule2ervice.java

@@ -0,0 +1,95 @@
+package com.gyee.frame.service;
+
+import com.gyee.frame.common.base.BaseService;
+import com.gyee.frame.common.support.Convert;
+import com.gyee.frame.mapper.auto.Alertrule2Mapper;
+import com.gyee.frame.model.auto.Alertrule2;
+import com.gyee.frame.model.auto.Alertrule2Example;
+import com.gyee.frame.util.SnowflakeIdWorker;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+
+@Service
+public class Alertrule2ervice implements BaseService<Alertrule2, Alertrule2Example> {
+	@Resource
+	private Alertrule2Mapper alertrule2Mapper;
+	
+
+	@Override
+	public int deleteByPrimaryKey(String ids) {
+				
+			List<String> lista=Convert.toListStrArray(ids);
+			Alertrule2Example example=new Alertrule2Example();
+			example.createCriteria().andIdIn(lista);
+			return alertrule2Mapper.deleteByExample(example);
+			
+				
+	}
+	
+	
+	@Override
+	public Alertrule2 selectByPrimaryKey(String id) {
+				
+			return alertrule2Mapper.selectByPrimaryKey(id);
+				
+	}
+
+	
+	@Override
+	public int updateByPrimaryKeySelective(Alertrule2 record) {
+		return alertrule2Mapper.updateByPrimaryKeySelective(record);
+	}
+	
+	
+	/**
+	 * 添加
+	 */
+	@Override
+	public int insertSelective(Alertrule2 record) {
+				
+		//添加雪花主键id
+		record.setId(SnowflakeIdWorker.getUUID());
+			
+				
+		return alertrule2Mapper.insertSelective(record);
+	}
+	
+	
+	@Override
+	public int updateByExampleSelective(Alertrule2 record, Alertrule2Example example) {
+		
+		return alertrule2Mapper.updateByExampleSelective(record, example);
+	}
+
+	
+	@Override
+	public int updateByExample(Alertrule2 record, Alertrule2Example example) {
+		
+		return alertrule2Mapper.updateByExample(record, example);
+	}
+
+	@Override
+	public List<Alertrule2> selectByExample(Alertrule2Example example) {
+		
+		return alertrule2Mapper.selectByExample(example);
+	}
+
+	
+	@Override
+	public long countByExample(Alertrule2Example example) {
+		
+		return alertrule2Mapper.countByExample(example);
+	}
+
+	
+	@Override
+	public int deleteByExample(Alertrule2Example example) {
+		
+		return alertrule2Mapper.deleteByExample(example);
+	}
+	
+
+}

+ 360 - 0
src/main/java/com/gyee/frame/service/VuePermissionService.java

@@ -0,0 +1,360 @@
+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.TvuePermissionMapper;
+import com.gyee.frame.mapper.auto.TvuePermissionRoleMapper;
+import com.gyee.frame.mapper.custom.PermissionVueDao;
+import com.gyee.frame.model.auto.TvuePermission;
+import com.gyee.frame.model.auto.TvuePermissionExample;
+import com.gyee.frame.model.auto.TvuePermissionRole;
+import com.gyee.frame.model.auto.TvuePermissionRoleExample;
+import com.gyee.frame.model.custom.BootstrapTree;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.util.SnowflakeIdWorker;
+import com.gyee.frame.util.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class VuePermissionService implements BaseService<TvuePermission, TvuePermissionExample>{
+	
+	//权限mapper
+	@Resource
+	private TvuePermissionMapper tvuePermissionMapper;
+	
+	//权限自定义dao
+	@Resource
+	private PermissionVueDao permissionVueDao;
+	//权限角色关联表
+	@Resource
+	private TvuePermissionRoleMapper tvuePermissionRoleMapper;
+	
+	/**
+	 * 分页查询
+	 * @return
+	 */
+	 public PageInfo<TvuePermission> list(Tablepar tablepar, String searchText){
+	        TvuePermissionExample testExample=new TvuePermissionExample();
+	        testExample.setOrderByClause("order_num  is null  ASC,order_num  ASC");
+	        if(searchText!=null&&!"".equals(searchText)){
+	        	testExample.createCriteria().andNameLike("%"+searchText+"%");
+	        }
+
+	        PageHelper.startPage(tablepar.getPageNum(), tablepar.getPageSize());
+	        List<TvuePermission> list= tvuePermissionMapper.selectByExample(testExample);
+	        PageInfo<TvuePermission> pageInfo = new PageInfo<TvuePermission>(list);
+	        return  pageInfo;
+	 }
+	 
+	 public List<TvuePermission> list2(String searchText){
+	        TvuePermissionExample testExample=new TvuePermissionExample();
+	        testExample.setOrderByClause("order_num  is null  ASC,order_num  ASC");
+	        if(searchText!=null&&!"".equals(searchText)){
+	        	testExample.createCriteria().andNameLike("%"+searchText+"%");
+	        }
+	        List<TvuePermission> list= tvuePermissionMapper.selectByExample(testExample);
+	        return  list;
+	 }
+
+	
+	@Override
+	public int deleteByPrimaryKey(String ids) {
+		//转成集合
+		List<String> lista=ConvertUtil.toListStrArray(ids);
+		
+		
+		//判断角色是否删除去除
+		TvuePermissionRoleExample permissionRoleExample=new TvuePermissionRoleExample();
+		permissionRoleExample.createCriteria().andPermissionIdIn(lista);
+		List<TvuePermissionRole> tvuePermissionRoles=tvuePermissionRoleMapper.selectByExample(permissionRoleExample);
+		if(tvuePermissionRoles.size()>0) {//有角色外键
+			return -2;
+		}
+		
+		//判断是否有子集
+		TvuePermissionExample example=new TvuePermissionExample();
+		example.createCriteria().andIdIn(lista);
+		List<TvuePermission> tsysPermissions = tvuePermissionMapper.selectByExample(example);
+		boolean lag=false;
+		for (TvuePermission tvuePermission : tsysPermissions) {
+			if(tvuePermission.getChildCount()>0) {
+				lag=true;
+			}
+		}
+		if(lag) {//有子集 无法删除
+			return -1;
+		}else {//删除操作
+			int i=tvuePermissionMapper.deleteByExample(example);
+			if(i>0) {//删除成功
+				return 1;
+			}else {//删除失败
+				return 0;
+			}
+			
+		}
+	}
+
+
+	
+	@Override
+	public int insertSelective(TvuePermission record) {
+		//添加雪花主键id
+		record.setId(SnowflakeIdWorker.getUUID());
+		//判断为目录的时候添加父id为0
+		if(record!=null&&record.getType()==0){
+			record.setPid("1");
+		}
+		//默认设置不跳转
+		if(record.getIsBlank()==null) {
+			record.setIsBlank(0);
+		}
+		return tvuePermissionMapper.insertSelective(record);
+	}
+
+	@Override
+	public TvuePermission selectByPrimaryKey(String id) {
+		
+		return tvuePermissionMapper.selectByPrimaryKey(id);
+	}
+
+	
+	@Override
+	public int updateByPrimaryKeySelective(TvuePermission record) {
+		//默认设置不跳转
+		if(record.getIsBlank()==null) {
+			record.setIsBlank(0);
+		}
+		return tvuePermissionMapper.updateByPrimaryKeySelective(record);
+	}
+	
+	public int updateByPrimaryKey(TvuePermission record) {
+		//默认设置不跳转
+		if(record.getIsBlank()==null) {
+			record.setIsBlank(0);
+		}
+		return tvuePermissionMapper.updateByPrimaryKey(record);
+	}
+
+	
+	@Override
+	public int updateByExampleSelective(TvuePermission record, TvuePermissionExample example) {
+		//默认设置不跳转
+		if(record.getIsBlank()==null) {
+			record.setIsBlank(0);
+		}
+		return tvuePermissionMapper.updateByExampleSelective(record, example);
+	}
+
+	
+	@Override
+	public int updateByExample(TvuePermission record, TvuePermissionExample example) {
+		//默认设置不跳转
+		if(record.getIsBlank()==null) {
+			record.setIsBlank(0);
+		}
+		return tvuePermissionMapper.updateByExample(record, example);
+	}
+
+	@Override
+	public List<TvuePermission> selectByExample(TvuePermissionExample example) {
+		
+		return tvuePermissionMapper.selectByExample(example);
+	}
+
+	
+	@Override
+	public long countByExample(TvuePermissionExample example) {
+		
+		return tvuePermissionMapper.countByExample(example);
+	}
+
+	
+	@Override
+	public int deleteByExample(TvuePermissionExample example) {
+		
+		return tvuePermissionMapper.deleteByExample(example);
+	}
+	
+	/**
+	 * 检查权限名字
+	 * @return
+	 */
+	public int checkNameUnique(TvuePermission tvuePermission){
+		TvuePermissionExample example=new TvuePermissionExample();
+		example.createCriteria().andNameEqualTo(tvuePermission.getName());
+		List<TvuePermission> list=tvuePermissionMapper.selectByExample(example);
+		return list.size();
+	}
+
+	/**
+	 * 检查权限URL
+	 * @return
+	 */
+	public int checkURLUnique(TvuePermission tvuePermission){
+		TvuePermissionExample example=new TvuePermissionExample();
+		example.createCriteria().andUrlEqualTo(tvuePermission.getUrl());
+		List<TvuePermission> list=tvuePermissionMapper.selectByExample(example);
+		return list.size();
+	}
+
+	/**
+	 * 检查权限perms字段
+	 * @return
+	 */
+	public int checkPermsUnique(TvuePermission tvuePermission){
+		TvuePermissionExample example=new TvuePermissionExample();
+		example.createCriteria().andPermsEqualTo(tvuePermission.getPerms());
+		List<TvuePermission> list=tvuePermissionMapper.selectByExample(example);
+		return list.size();
+	}
+	
+	
+	/**
+	 * 根据父id 以及类型查询权限子集
+	 * @param pid
+	 * @return
+	 */
+	public List<TvuePermission> queryPid(String pid, int type){
+		TvuePermissionExample example=new TvuePermissionExample();
+		example.createCriteria().andPidEqualTo(pid).andTypeEqualTo(type);
+		return tvuePermissionMapper.selectByExample(example);
+	}
+	
+	/**
+	 * 获取转换成bootstarp的权限数据
+	 * @return
+	 */
+	public BootstrapTree getbooBootstrapTreePerm(String userid){
+		List<BootstrapTree> treeList = new ArrayList<BootstrapTree>();
+		List<TvuePermission> menuList =  getall(userid);
+		treeList = getbooBootstrapTreePerm(menuList,"0");
+		if(treeList!=null&&treeList.size()==1) {
+			return treeList.get(0);
+		}
+		return new BootstrapTree("菜单", "fa fa-home", "", "-1","###",0,treeList,"",0);
+	}
+	
+	
+	
+	/**
+	 * 获取树
+	 * @param menuList
+	 * @param parentId
+	 * @return
+	 */
+	private static List<BootstrapTree> getbooBootstrapTreePerm(List<TvuePermission> menuList, String parentId){
+		List<BootstrapTree> treeList = new ArrayList<>();
+		List<BootstrapTree> childList = null;
+		for(TvuePermission p : menuList) {
+			p.setPid(p.getPid()==null||p.getPid().trim().equals("")?"0":p.getPid());
+			if(p.getPid().trim().equals(parentId)) {
+				if(p.getChildCount()!=null&&p.getChildCount()>0) {
+					childList = getbooBootstrapTreePerm(menuList, String.valueOf(p.getId()));
+				}
+				BootstrapTree bootstrapTree = new BootstrapTree(p.getName(), p.getIcon(), "", String.valueOf(p.getId()), p.getUrl(),p.getIsBlank(),childList,p.getPerms(),p.getVisible());
+				treeList.add(bootstrapTree);
+				childList = null;
+			}
+		}
+		return treeList.size() >0 ? treeList : null;
+	}
+	
+	/**
+	 * 根据用户id获取用户角色如果用户为null 获取所有权限
+	 * @return
+	 */
+	public List<TvuePermission> getall(String userid){
+		if(StringUtils.isEmpty(userid)) {
+			TvuePermissionExample example = new TvuePermissionExample();
+			example.setOrderByClause("order_num asc");
+			return  tvuePermissionMapper.selectByExample(example);
+		}
+		return  permissionVueDao.findByAdminUserId(userid);
+	}
+	
+	
+	
+	
+	
+	/**
+	 * 判断权限是否有权限
+	 * @param myTsysPermissions
+	 * @param sysPermission
+	 */
+	public Boolean ifpermissions(List<TvuePermission> myTsysPermissions, BootstrapTree sysPermission){
+		for (TvuePermission mytsysPermission : myTsysPermissions) {
+			if(sysPermission.getId().equals(mytsysPermission.getId())){
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	
+	/**
+	 * 获取角色已有的Bootstarp权限
+	 * @return
+	 */
+	public BootstrapTree getCheckPrem(String roleid) {
+		Map<String, Object> map = new HashMap<String, Object>();
+		//设置选中
+		map.put("checked", true);
+		//设置展开
+		//map.put("expanded", true);
+		// 获取角色的权限
+		List<TvuePermission> myTsysPermissions = permissionVueDao.queryRoleId(roleid);
+		// 获取所有的权限
+		BootstrapTree sysPermissions = getbooBootstrapTreePerm(null);
+		iterationCheckPre(sysPermissions, myTsysPermissions, map);
+		return sysPermissions;
+
+	}
+	
+	/**
+	 * 循环迭代获取所有权限
+	 * @param pboostrapTree
+	 * @param myTsysPermissions
+	 * @param map
+	 */
+	public void iterationCheckPre(BootstrapTree pboostrapTree, List<TvuePermission> myTsysPermissions, Map<String, Object> map) {
+		if(null!=pboostrapTree) {
+			if (ifpermissions(myTsysPermissions, pboostrapTree)) {
+				pboostrapTree.setState(map);
+			}
+			List<BootstrapTree> bootstrapTreeList = pboostrapTree.getNodes();
+			if(null!=bootstrapTreeList&&!bootstrapTreeList.isEmpty()) {
+				for(BootstrapTree bootstrapTree : bootstrapTreeList) {
+					if (ifpermissions(myTsysPermissions, bootstrapTree)) {// 菜单栏设置
+						bootstrapTree.setState(map);
+					}
+					//检查子节点
+					iterationCheckPre(bootstrapTree, myTsysPermissions, map);
+				}
+			}
+		}
+	}
+	
+	/**
+	 * 根据权限字段查询是否存在
+	 * @param perms
+	 * @return
+	 * @author gyee
+	 * @Date 2019年9月1日 上午2:06:31
+	 */
+	public Boolean queryLikePerms(String perms){
+		TvuePermissionExample example=new TvuePermissionExample();
+		example.createCriteria().andPermsLike("%gen:"+perms+"%");
+		List<TvuePermission> list= tvuePermissionMapper.selectByExample(example);
+        return list.size() > 0;
+    }
+	
+	
+}

+ 200 - 0
src/main/java/com/gyee/frame/service/VueRoleService.java

@@ -0,0 +1,200 @@
+package com.gyee.frame.service;
+
+import cn.hutool.core.util.RandomUtil;
+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.TvuePermissionRoleMapper;
+import com.gyee.frame.mapper.auto.TvueRoleMapper;
+import com.gyee.frame.mapper.custom.RoleVueDao;
+import com.gyee.frame.model.auto.TvuePermissionRole;
+import com.gyee.frame.model.auto.TvuePermissionRoleExample;
+import com.gyee.frame.model.auto.TvueRole;
+import com.gyee.frame.model.auto.TvueRoleExample;
+import com.gyee.frame.model.custom.Tablepar;
+import com.gyee.frame.util.SnowflakeIdWorker;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class VueRoleService implements BaseService<TvueRole, TvueRoleExample> {
+	//角色mapper
+	@Resource
+	private TvueRoleMapper tvueRoleMapper;
+	//自定义角色dao
+	@Resource
+	private RoleVueDao roleVueDao;
+	//自动生成的权限角色映射mapper
+	@Resource
+	private TvuePermissionRoleMapper tvuePermissionRoleMapper;
+	
+	
+	/**
+	 * 分页查询
+
+	 * @return
+	 */
+	 public PageInfo<TvueRole> list(Tablepar tablepar,String searchText){
+	        TvueRoleExample testExample=new TvueRoleExample();
+	        testExample.setOrderByClause("id+0 DESC");
+	        if(searchText!=null&&!"".equals(searchText)){
+	        	testExample.createCriteria().andNameLike("%"+searchText+"%");
+	        }
+
+	        PageHelper.startPage(tablepar.getPageNum(), tablepar.getPageSize());
+	        List<TvueRole> list= tvueRoleMapper.selectByExample(testExample);
+	        PageInfo<TvueRole> pageInfo = new PageInfo<TvueRole>(list);
+	        return  pageInfo;
+	 }
+	 
+	 /**
+	  * 查询全部角色集合
+	  * @return
+	  */
+	 public List<TvueRole> queryList(){
+		 TvueRoleExample tsysRoleExample=new TvueRoleExample();
+		 return tvueRoleMapper.selectByExample(tsysRoleExample);
+	 }
+
+	
+	 /**
+	  * 
+	  */	
+	@Override
+	@Transactional
+	public int deleteByPrimaryKey(String ids) {
+		List<String> lista=ConvertUtil.toListStrArray(ids);
+		//先删除角色下面的所有权限
+		TvuePermissionRoleExample permissionRoleExample=new TvuePermissionRoleExample();
+		permissionRoleExample.createCriteria().andRoleIdIn(lista);
+		tvuePermissionRoleMapper.deleteByExample(permissionRoleExample);
+		//在删除角色
+		TvueRoleExample example=new TvueRoleExample();
+		example.createCriteria().andIdIn(lista);
+		return tvueRoleMapper.deleteByExample(example);
+	}
+
+
+	
+	@Override
+	public int insertSelective(TvueRole record) {
+		//添加雪花主键id
+		record.setId(SnowflakeIdWorker.getUUID());
+		return tvueRoleMapper.insertSelective(record);
+	}
+	
+	/**
+	 * 添加角色绑定权限
+	 * @param record 角色信息
+	 * @param prem 权限id集合
+	 * @return
+	 */
+	@Transactional
+	public int insertRoleAndPrem(TvueRole record,String prem) {
+		//添加雪花主键id
+		String roleid=SnowflakeIdWorker.getUUID();
+		record.setId(roleid);
+		//添加权限
+		List<String> prems=ConvertUtil.toListStrArray(prem);
+		for (String premid : prems) {
+			TvuePermissionRole tsysPermissionRole=new TvuePermissionRole(RandomUtil.randomUUID() , roleid, premid);
+			tvuePermissionRoleMapper.insertSelective(tsysPermissionRole);
+		}
+		return tvueRoleMapper.insertSelective(record);
+	}
+
+	@Override
+	public TvueRole selectByPrimaryKey(String id) {
+		
+		return tvueRoleMapper.selectByPrimaryKey(id);
+	}
+
+	
+	@Override
+	public int updateByPrimaryKeySelective(TvueRole record) {
+		return tvueRoleMapper.updateByPrimaryKeySelective(record);
+	}
+	
+	/**
+	 * 修改用户角色 以及下面绑定的权限
+	 * @param record
+	 * @return
+	 */
+	@Transactional
+	public int updateRoleAndPrem(TvueRole record,String prem) {
+		//先删除角色下面的所有权限
+		TvuePermissionRoleExample permissionRoleExample=new TvuePermissionRoleExample();
+		permissionRoleExample.createCriteria().andRoleIdEqualTo(record.getId());
+		tvuePermissionRoleMapper.deleteByExample(permissionRoleExample);
+		//添加权限关联
+		List<String> prems=ConvertUtil.toListStrArray(prem);
+		for (String pre : prems) {
+			TvuePermissionRole permissionRole=new TvuePermissionRole(RandomUtil.randomUUID(), record.getId(), pre);
+			tvuePermissionRoleMapper.insertSelective(permissionRole);
+		}
+		
+		return tvueRoleMapper.updateByPrimaryKeySelective(record);
+	}
+	
+
+	
+	@Override
+	public int updateByExampleSelective(TvueRole record, TvueRoleExample example) {
+		
+		return tvueRoleMapper.updateByExampleSelective(record, example);
+	}
+
+	
+	@Override
+	public int updateByExample(TvueRole record, TvueRoleExample example) {
+		
+		return tvueRoleMapper.updateByExample(record, example);
+	}
+
+	@Override
+	public List<TvueRole> selectByExample(TvueRoleExample example) {
+		
+		return tvueRoleMapper.selectByExample(example);
+	}
+
+	
+	@Override
+	public long countByExample(TvueRoleExample example) {
+		
+		return tvueRoleMapper.countByExample(example);
+	}
+
+	
+	@Override
+	public int deleteByExample(TvueRoleExample example) {
+		
+		return tvueRoleMapper.deleteByExample(example);
+	}
+	
+	/**
+	 * 检查角色name
+	 * @param tsysUser
+	 * @return
+	 */
+	public int checkNameUnique(TvueRole tsysRole){
+		TvueRoleExample example=new TvueRoleExample();
+		example.createCriteria().andNameEqualTo(tsysRole.getName());
+		List<TvueRole> list=tvueRoleMapper.selectByExample(example);
+		return list.size();
+	}
+	
+	
+	/**
+	 * 根据用户id查询角色
+	 * @param userid
+	 * @return
+	 */
+	public List<TvueRole> queryUserRole(String userid){
+		return roleVueDao.queryUserRole(userid);
+	}
+	
+}

+ 31 - 0
src/main/java/com/gyee/frame/service/recommen/RecommenService.java

@@ -634,4 +634,35 @@ public class RecommenService {
 	}
 
 
+
+
+	/**
+	 * 获得对应风机的1个月健康推荐检修记录
+	 * @return
+	 */
+	public List<Recommenmain> getRecommenmainMonth(String wtId) {
+
+		List<Recommenmain> list=new ArrayList<>();
+
+
+		if(StringUtils.notEmp(wtId))
+		{
+			Calendar cal = Calendar.getInstance();
+			cal.set(Calendar.HOUR_OF_DAY, 0);
+			cal.set(Calendar.MINUTE, 0);
+			cal.set(Calendar.SECOND,0);
+			cal.set(Calendar.MILLISECOND, 0);
+
+			cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
+			Date beginDate = cal.getTime();
+			cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+			Date endDate = cal.getTime();
+
+			list=recommenmainService.getRecommenmainList(wtId,beginDate,endDate);
+		}
+
+
+		return list;
+	}
+
 }

+ 30 - 236
src/main/java/com/gyee/frame/service/websocket/BraceletService.java

@@ -1,22 +1,28 @@
 package com.gyee.frame.service.websocket;
 
 
+import com.gyee.frame.common.spring.Constant;
+import com.gyee.frame.common.websocket.WebSocketConfig;
 import com.gyee.frame.common.websocket.WebsocketMessageService;
+import com.gyee.frame.model.auto.WindTurbineTestingPointAi2;
 import com.gyee.frame.model.custom.PointData;
+import com.gyee.frame.service.WindTurbineTestingPointAiService;
 import com.gyee.frame.util.IRealTimeDataBaseUtil;
 import com.gyee.frame.util.golden.EdosUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.List;
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.concurrent.CopyOnWriteArraySet;
 
 @Service
 public class BraceletService  {
 
     @Autowired
     private WebsocketMessageService websocketMessageService;
-
+    @Resource
+    private WindTurbineTestingPointAiService windTurbineTestingPointAiService;
     IRealTimeDataBaseUtil realApiUtil = new EdosUtil();
 
     public void braceletPushTask(String destination) throws Exception {
@@ -258,243 +264,31 @@ public class BraceletService  {
         websocketMessageService.SendAlertToAll(destination,ls);
 //        websocketMessageService.SendAlertToAll(destination,"testy");
     }
-    public void braceletPushTask(String destination,String wtId) throws Exception {
+    public void testPoints(String destination) throws Exception {
 
 
-        List<String> pointids=new ArrayList<>();
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0002");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0133");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0009");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0012");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0013");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0001");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0014");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0130");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0131");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0132");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0133");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0134");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0135");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0009");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0011");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0003");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0005");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0013");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0001");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0007");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0165");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0169");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0167");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0173");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0163");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0161");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0171");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0175");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0325");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0321");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0323");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0076");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0077");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0073");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0562");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0080");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0146");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0149");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0147");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0150");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0148");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0151");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0971");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0976");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1035");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1040");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1163");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1168");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1227");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1232");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1355");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1360");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0329");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0332");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0333");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0361");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0364");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0365");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0313");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0316");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0317");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0281");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0284");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0285");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0265");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0268");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0002");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0133");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0009");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0012");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0013");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0001");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0014");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0130");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0131");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0132");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0133");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0134");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0135");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0009");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0011");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0003");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0005");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0013");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0001");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0007");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0165");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0169");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0167");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0173");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0163");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0161");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0171");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0175");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0325");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0321");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0323");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0076");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0077");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0073");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0562");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0080");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0146");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0149");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0147");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0150");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0148");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0151");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0971");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0976");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1035");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1040");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1163");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1168");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1227");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1232");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1355");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1360");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0329");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0332");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0333");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0361");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0364");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0365");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0313");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0316");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0317");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0281");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0284");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0285");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0265");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0268");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0269");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2310");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1358");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1230");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1166");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1038");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0974");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0292");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1678");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1486");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1614");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1678");
-        pointids.add("SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2310");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2544");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2608");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2672");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3046");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3280");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3344");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3408");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3472");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0034");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0037");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0041");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0044");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0045");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0033");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0046");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0108");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0109");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0105");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0563");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0441");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0444");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0445");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0425");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0428");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0429");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0393");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0396");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0397");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0377");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0380");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0381");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0588");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0589");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0585");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0564");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0578");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0579");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0580");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0581");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0582");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0583");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0665");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0668");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0669");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0633");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0636");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0637");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0649");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0652");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0653");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0085");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0083");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0087");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0081");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0091");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0089");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0093");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0145");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0243");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0241");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0249");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0247");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0251");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0253");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0255");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1670");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1678");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1478");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1414");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1680");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1616");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1488");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1424");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0515");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2263");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2261");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2259");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2267");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2265");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2269");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2273");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2697");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2633");
-        pointids.add("SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2569");
+        Set<Map.Entry<String, CopyOnWriteArraySet<String>>> set = WebSocketConfig.websocketparamcacheMap.entrySet();
+        for (Iterator<Map.Entry<String, CopyOnWriteArraySet<String>>> it = set.iterator(); it.hasNext();) {
+            Map.Entry<String, CopyOnWriteArraySet<String>> entry = (Map.Entry<String, CopyOnWriteArraySet<String>>) it.next();
+           // System.out.println(entry.getKey() + "--->" + entry.getValue());
+            if(entry.getKey().indexOf(destination)!=-1)
+            {
+                String wtId=entry.getKey().substring(entry.getKey().indexOf(WebSocketConfig.PARAM)+6);
+                List<String> pointids=new ArrayList<>();
+
+                WindTurbineTestingPointAi2 sjgl = windTurbineTestingPointAiService.getWindTurbineTestingPointAi2(wtId, Constant.TPOINT_WT_FJGL);
+                WindTurbineTestingPointAi2 bzgl = windTurbineTestingPointAiService.getWindTurbineTestingPointAi2(wtId,Constant.TPOINT_WT_YFGL);
+                WindTurbineTestingPointAi2 pjfs = windTurbineTestingPointAiService.getWindTurbineTestingPointAi2(wtId,Constant.TPOINT_WT_FJSSFS);
+                pointids.add(sjgl.getId());
+                pointids.add(bzgl.getId());
+                pointids.add(pjfs.getId());
+                List<PointData> ls= realApiUtil.getRealData(pointids);
+
+                websocketMessageService.SendAlertToAll(entry.getKey(),ls);
+            }
+        }
 
-        List<PointData> ls= realApiUtil.getRealData(pointids);
 
-        websocketMessageService.SendAlertToAll(destination,ls);
 //        websocketMessageService.SendAlertToAll(destination,"testy");
     }
 }

+ 1 - 1
src/main/java/com/gyee/frame/shiro/config/ShiroConfig.java

@@ -101,7 +101,7 @@ public class ShiroConfig {
 	public RememberMeManager rememberMeManager() {
 		Cookie cookie = new SimpleCookie("rememberMe");
         cookie.setHttpOnly(true);//通过js脚本将无法读取到cookie信息
-        cookie.setMaxAge(60 * 60 * 24);//cookie保存一
+        cookie.setMaxAge(60 * 60 * 24 * 30);//cookie保存30
 		CookieRememberMeManager manager=new CookieRememberMeManager();
 		manager.setCookie(cookie);
 		return manager;

+ 3 - 0
src/main/java/com/gyee/frame/shiro/config/ShiroFilterMapFactory.java

@@ -51,6 +51,9 @@ user:例如/admins/user/**=user没有参数表示必须存在用户,当登入
 		filterChainDefinitionMap.put("/gyee-query/**", "anon");
 		//前端
 		filterChainDefinitionMap.put("/", "anon");
+
+
+		filterChainDefinitionMap.put("/swagger-ui.html", "anon");
 		filterChainDefinitionMap.put("/index", "anon");//任务调度暂时放开
 		
 		filterChainDefinitionMap.put("/quartz/**", "anon");

+ 59 - 68
src/main/resources/META-INF/MANIFEST.MF

@@ -1,71 +1,62 @@
 Manifest-Version: 1.0
 Main-Class: com.gyee.SpringbootStart
-Class-Path: tomcat-embed-el-9.0.35.jar commons-configuration2-2.1.jar sp
- ring-context-support-5.2.12.RELEASE.jar springfox-spi-2.9.2.jar spring-
- aop-5.2.12.RELEASE.jar markdown_to_asciidoc-1.0.jar lombok-1.18.12.jar 
- json-schema-validator-2.2.8.jar thymeleaf-extras-shiro-2.0.0.jar netty-
- handler-4.1.55.Final.jar thymeleaf-spring5-3.0.11.RELEASE.jar mybatis-s
- pring-boot-starter-1.3.2.jar thymeleaf-extras-java8time-3.0.4.RELEASE.j
- ar validation-api-2.0.1.Final.jar tomcat-embed-websocket-9.0.35.jar swa
- gger-annotations-1.6.2.jar spring-boot-starter-websocket-2.3.7.RELEASE.
- jar reactor-core-3.3.12.RELEASE.jar mybatis-3.4.6.jar mysql-connector-j
- ava-8.0.22.jar logback-classic-1.2.3.jar asm-util-4.1.jar pagehelper-sp
- ring-boot-autoconfigure-1.2.5.jar jakarta.el-3.0.3.jar jedis-3.2.0.jar 
- attoparser-2.0.5.RELEASE.jar httpclient-4.5.13.jar springfox-swagger2-2
- .9.2.jar commons-pool2-2.8.1.jar druid-spring-boot-starter-1.1.10.jar a
- sm-analysis-4.1.jar parboiled-core-1.1.6.jar jackson-core-2.11.3.jar ms
- g-simple-1.1.jar netty-resolver-4.1.55.Final.jar activation-1.1.jar mai
- lapi-1.4.3.jar spring-boot-starter-2.3.7.RELEASE.jar unbescape-1.1.6.RE
- LEASE.jar gson-2.8.6.jar vavr-match-0.9.1.jar spring-plugin-metadata-1.
- 2.0.RELEASE.jar asm-5.0.4.jar springfox-swagger-common-2.9.2.jar jackso
- n-annotations-2.11.3.jar jackson-datatype-jdk8-2.11.3.jar spring-boot-s
- tarter-logging-2.3.7.RELEASE.jar commons-collections4-4.1.jar ojdbc6-11
- .2.0.3.jar log4j-to-slf4j-2.13.3.jar commons-io-2.5.jar spring-websocke
- t-5.2.12.RELEASE.jar shiro-core-1.4.0.jar spring-boot-starter-data-redi
- s-2.3.7.RELEASE.jar commons-lang-2.4.jar pegdown-1.4.2.jar spring-boot-
- starter-tomcat-2.3.7.RELEASE.jar aspectjweaver-1.9.6.jar swagger-parser
- -1.0.35.jar fastjson-1.2.7.jar spring-boot-starter-web-2.3.7.RELEASE.ja
- r thymeleaf-3.0.11.RELEASE.jar tomcat-juli-9.0.35.jar springfox-schema-
- 2.9.2.jar guava-20.0.jar jackson-datatype-jsr310-2.11.3.jar commons-col
- lections-3.2.1.jar mail-1.4.7.jar jackson-databind-2.11.3.jar hutool-al
- l-4.1.12.jar commons-fileupload-1.3.3.jar sqljdbc4-4.0.jar netty-transp
- ort-4.1.55.Final.jar vavr-0.9.1.jar shiro-crypto-core-1.4.0.jar lettuce
- -core-5.3.5.RELEASE.jar jul-to-slf4j-1.7.30.jar pagehelper-5.1.4.jar sh
- iro-crypto-hash-1.4.0.jar parboiled-java-1.1.6.jar commons-codec-1.14.j
- ar spring-jdbc-5.2.12.RELEASE.jar spring-boot-starter-aop-2.3.7.RELEASE
- .jar jakarta.annotation-api-1.3.5.jar shiro-cache-1.4.0.jar mapstruct-1
- .2.0.Final.jar asm-tree-4.1.jar spring-data-keyvalue-2.3.6.RELEASE.jar 
- quartz-2.3.2.jar spring-plugin-core-1.2.0.RELEASE.jar javax.servlet-api
- -4.0.1.jar spring-boot-2.3.7.RELEASE.jar snakeyaml-1.26.jar shiro-crypt
- o-cipher-1.4.0.jar spring-boot-starter-thymeleaf-2.3.7.RELEASE.jar jack
- son-coreutils-1.6.jar shiro-lang-1.4.0.jar shiro-spring-1.4.0.jar kaptc
- ha-2.3.2.jar logback-core-1.2.3.jar httpcore-4.4.14.jar spring-boot-aut
- oconfigure-2.3.7.RELEASE.jar spring-jcl-5.2.12.RELEASE.jar classmate-1.
- 5.1.jar mybatis-spring-boot-autoconfigure-1.3.2.jar json-schema-core-1.
- 2.8.jar swagger-core-1.6.2.jar springfox-core-2.9.2.jar spring-data-com
- mons-2.3.6.RELEASE.jar spring-core-5.2.12.RELEASE.jar spring-webmvc-5.2
- .12.RELEASE.jar commons-logging-1.1.1.jar jopt-simple-5.0.3.jar springf
- ox-spring-web-2.9.2.jar spring-web-5.2.12.RELEASE.jar commons-beanutils
- -1.9.2.jar spring-expression-5.2.12.RELEASE.jar shiro-config-ogdl-1.4.0
- .jar swagger-models-1.6.2.jar paleo-core-0.11.0.jar btf-1.2.jar rhino-1
- .7R4.jar jsqlparser-1.0.jar okhttp-3.14.9.jar spring-data-redis-2.3.6.R
- ELEASE.jar okio-1.17.2.jar ueditor-1.1.2.jar swagger-compat-spec-parser
- -1.0.35.jar tomcat-embed-core-9.0.35.jar shiro-web-1.4.0.jar HikariCP-3
- .4.5.jar byte-buddy-1.10.18.jar spring-context-5.2.12.RELEASE.jar veloc
- ity-1.7.jar mybatis-spring-1.3.2.jar jsoup-1.8.1.jar netty-common-4.1.5
- 5.Final.jar mchange-commons-java-0.2.15.jar reactive-streams-1.0.3.jar 
- filters-2.0.235-1.jar commons-configuration-1.10.jar spring-boot-config
- uration-processor-2.3.7.RELEASE.jar commons-lang3-3.10.jar slf4j-api-1.
- 7.30.jar swagger2markup-1.3.3.jar netty-codec-4.1.55.Final.jar netty-bu
- ffer-4.1.55.Final.jar springfox-swagger-ui-2.9.2.jar qiniu-java-sdk-7.2
- .29.jar log4j-api-2.13.3.jar joda-time-2.9.7.jar druid-1.1.10.jar shiro
- -config-core-1.4.0.jar jsr305-3.0.1.jar libphonenumber-8.0.0.jar json-p
- atch-1.6.jar spring-boot-starter-json-2.3.7.RELEASE.jar slf4j-ext-1.7.3
- 0.jar uri-template-0.9.jar spring-tx-5.2.12.RELEASE.jar spring-boot-sta
- rter-jdbc-2.3.7.RELEASE.jar spring-boot-devtools-2.3.7.RELEASE.jar mark
- up-document-builder-1.1.2.jar spring-beans-5.2.12.RELEASE.jar spring-me
- ssaging-5.2.12.RELEASE.jar tomcat-annotations-api-9.0.35.jar spring-oxm
- -5.2.12.RELEASE.jar jackson-module-parameter-names-2.11.3.jar jackson-d
- ataformat-yaml-2.11.3.jar shiro-event-1.4.0.jar json-20180813.jar pageh
- elper-spring-boot-starter-1.2.5.jar
+Class-Path: netty-resolver-4.1.55.Final.jar spring-plugin-metadata-1.2.0
+ .RELEASE.jar attoparser-2.0.5.RELEASE.jar shiro-config-ogdl-1.4.0.jar a
+ sm-util-4.1.jar lombok-1.18.12.jar swagger-annotations-1.5.21.jar kaptc
+ ha-2.3.2.jar shiro-crypto-core-1.4.0.jar slf4j-api-1.7.30.jar spring-bo
+ ot-devtools-2.3.7.RELEASE.jar thymeleaf-spring5-3.0.11.RELEASE.jar spri
+ ng-beans-5.2.12.RELEASE.jar okhttp-3.14.9.jar jackson-core-2.11.3.jar j
+ ackson-dataformat-yaml-2.11.3.jar jakarta.el-3.0.3.jar mybatis-spring-b
+ oot-starter-1.3.2.jar commons-logging-1.1.1.jar spring-webmvc-5.2.12.RE
+ LEASE.jar lettuce-core-5.3.5.RELEASE.jar reactive-streams-1.0.3.jar spr
+ ingfox-swagger2-2.9.2.jar qiniu-java-sdk-7.2.29.jar spring-plugin-core-
+ 1.2.0.RELEASE.jar shiro-crypto-hash-1.4.0.jar spring-boot-starter-web-2
+ .3.7.RELEASE.jar jackson-module-parameter-names-2.11.3.jar shiro-config
+ -core-1.4.0.jar classmate-1.5.1.jar log4j-to-slf4j-2.13.3.jar velocity-
+ 1.7.jar ojdbc6-11.2.0.3.jar jackson-annotations-2.11.3.jar spring-aop-5
+ .2.12.RELEASE.jar asm-tree-4.1.jar spring-boot-starter-aop-2.3.7.RELEAS
+ E.jar commons-lang-2.4.jar pagehelper-spring-boot-autoconfigure-1.2.5.j
+ ar shiro-crypto-cipher-1.4.0.jar spring-jcl-5.2.12.RELEASE.jar pagehelp
+ er-spring-boot-starter-1.2.5.jar spring-tx-5.2.12.RELEASE.jar reactor-c
+ ore-3.3.12.RELEASE.jar tomcat-annotations-api-9.0.35.jar druid-spring-b
+ oot-starter-1.1.10.jar spring-boot-starter-tomcat-2.3.7.RELEASE.jar map
+ struct-1.2.0.Final.jar commons-configuration-1.10.jar springfox-swagger
+ -common-2.9.2.jar netty-handler-4.1.55.Final.jar sqljdbc4-4.0.jar valid
+ ation-api-2.0.1.Final.jar shiro-web-1.4.0.jar spring-data-keyvalue-2.3.
+ 6.RELEASE.jar commons-beanutils-1.9.3.jar spring-boot-configuration-pro
+ cessor-2.3.7.RELEASE.jar guava-20.0.jar snakeyaml-1.26.jar jedis-3.2.0.
+ jar spring-boot-starter-2.3.7.RELEASE.jar activation-1.1.jar commons-co
+ llections-3.2.1.jar parboiled-java-1.1.6.jar springfox-schema-2.9.2.jar
+  unbescape-1.1.6.RELEASE.jar shiro-lang-1.4.0.jar thymeleaf-extras-java
+ 8time-3.0.4.RELEASE.jar logback-classic-1.2.3.jar netty-common-4.1.55.F
+ inal.jar json-20180813.jar spring-boot-2.3.7.RELEASE.jar springfox-spri
+ ng-web-2.9.2.jar jakarta.annotation-api-1.3.5.jar swagger-core-1.6.2.ja
+ r tomcat-embed-websocket-9.0.35.jar log4j-api-2.13.3.jar springfox-core
+ -2.9.2.jar javax.servlet-api-4.0.1.jar hutool-all-4.1.12.jar HikariCP-3
+ .4.5.jar spring-boot-starter-json-2.3.7.RELEASE.jar spring-boot-autocon
+ figure-2.3.7.RELEASE.jar spring-web-5.2.12.RELEASE.jar pegdown-1.4.2.ja
+ r spring-boot-starter-logging-2.3.7.RELEASE.jar spring-data-redis-2.3.6
+ .RELEASE.jar pagehelper-5.1.4.jar okio-1.17.2.jar druid-1.1.10.jar comm
+ ons-io-2.5.jar mchange-commons-java-0.2.15.jar shiro-spring-1.4.0.jar s
+ hiro-core-1.4.0.jar mybatis-3.4.6.jar spring-boot-starter-thymeleaf-2.3
+ .7.RELEASE.jar commons-pool2-2.8.1.jar spring-boot-starter-websocket-2.
+ 3.7.RELEASE.jar spring-websocket-5.2.12.RELEASE.jar shiro-event-1.4.0.j
+ ar spring-boot-starter-data-redis-2.3.7.RELEASE.jar mybatis-spring-1.3.
+ 2.jar gson-2.8.6.jar spring-oxm-5.2.12.RELEASE.jar springfox-swagger-ui
+ -2.9.2.jar fastjson-1.2.7.jar aspectjweaver-1.9.6.jar commons-fileuploa
+ d-1.3.3.jar spring-jdbc-5.2.12.RELEASE.jar logback-core-1.2.3.jar netty
+ -codec-4.1.55.Final.jar jackson-datatype-jsr310-2.11.3.jar jsqlparser-1
+ .0.jar mysql-connector-java-8.0.22.jar swagger-models-1.5.21.jar shiro-
+ cache-1.4.0.jar quartz-2.3.2.jar spring-boot-starter-jdbc-2.3.7.RELEASE
+ .jar netty-buffer-4.1.55.Final.jar parboiled-core-1.1.6.jar asm-4.1.jar
+  spring-context-support-5.2.12.RELEASE.jar tomcat-embed-core-9.0.35.jar
+  spring-context-5.2.12.RELEASE.jar netty-transport-4.1.55.Final.jar mai
+ l-1.4.7.jar jackson-datatype-jdk8-2.11.3.jar commons-lang3-3.10.jar jac
+ kson-databind-2.11.3.jar thymeleaf-extras-shiro-2.0.0.jar spring-expres
+ sion-5.2.12.RELEASE.jar spring-data-commons-2.3.6.RELEASE.jar ueditor-1
+ .1.2.jar asm-analysis-4.1.jar spring-core-5.2.12.RELEASE.jar tomcat-jul
+ i-9.0.35.jar mybatis-spring-boot-autoconfigure-1.3.2.jar byte-buddy-1.1
+ 0.18.jar thymeleaf-3.0.11.RELEASE.jar spring-messaging-5.2.12.RELEASE.j
+ ar jul-to-slf4j-1.7.30.jar tomcat-embed-el-9.0.35.jar filters-2.0.235-1
+ .jar springfox-spi-2.9.2.jar
 

+ 4 - 4
src/main/resources/application.yml

@@ -27,8 +27,8 @@ gyee:
   rollVerification: true
   #实时数据库Url
   baseurl: http://10.155.32.4:8011/ts
-  #实时数据库Url
-  swaggerip: 192.168.10.14:8082
+  #API访问ip
+  swaggerip: 10.155.32.4:8082
 #tomcat config
 server :
   port : 8082
@@ -44,7 +44,7 @@ server :
     uri-encoding : UTF-8
     #shiro 报错修改的地方
     max-connections: 200000
-    max-http-post-size: 9000000
+    max-http-form-post-size: 9000000
 spring :
   # 环境 dev|test|prod
   profiles :
@@ -87,7 +87,7 @@ spring :
   redis:
     database: 0
     host: 127.0.0.1
-    password: ''
+    password: gdnxfd123
     pool:
       max-active: 8
       max-idle: 8

+ 4 - 1
src/main/resources/mybatis-generator.xml

@@ -104,7 +104,10 @@
 
 <!--        <table tableName='Windturbine' domainObjectName='WindturbineSql'/>-->
 <!--        <table tableName='Equipment' domainObjectName='EquipmentSql'/>-->
-        <table tableName='ProjectPlan' domainObjectName='ProjectPlan'/>
+        <table tableName='alertrule2' domainObjectName='Alertrule2'/>
+        <table tableName='alarmsnap' domainObjectName='Alarmsnap'/>
+        <table tableName='alarmcount' domainObjectName='Alarmcount'/>
+
 
     </context>
 </generatorConfiguration>

+ 219 - 0
src/main/resources/mybatis/auto/AlarmcountMapper.xml

@@ -0,0 +1,219 @@
+<?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.AlarmcountMapper">
+  <resultMap id="BaseResultMap" type="com.gyee.frame.model.auto.Alarmcount">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    <result column="ID" jdbcType="DECIMAL" property="id" />
+    <result column="ALARMDATE" jdbcType="TIMESTAMP" property="alarmdate" />
+    <result column="SNAPID" jdbcType="DECIMAL" property="snapid" />
+    <result column="COUNT" jdbcType="DECIMAL" property="count" />
+    <result column="TIME" jdbcType="DECIMAL" property="time" />
+  </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>
+    </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>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    ID, ALARMDATE, SNAPID, COUNT, TIME
+  </sql>
+  <select id="selectByExample" parameterType="com.gyee.frame.model.auto.AlarmcountExample" 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 ALARMCOUNT
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <delete id="deleteByExample" parameterType="com.gyee.frame.model.auto.AlarmcountExample">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    delete from ALARMCOUNT
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.gyee.frame.model.auto.Alarmcount">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    insert into ALARMCOUNT (ID, ALARMDATE, SNAPID, 
+      COUNT, TIME)
+    values (#{id,jdbcType=DECIMAL}, #{alarmdate,jdbcType=TIMESTAMP}, #{snapid,jdbcType=DECIMAL}, 
+      #{count,jdbcType=DECIMAL}, #{time,jdbcType=DECIMAL})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gyee.frame.model.auto.Alarmcount">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    insert into ALARMCOUNT
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        ID,
+      </if>
+      <if test="alarmdate != null">
+        ALARMDATE,
+      </if>
+      <if test="snapid != null">
+        SNAPID,
+      </if>
+      <if test="count != null">
+        COUNT,
+      </if>
+      <if test="time != null">
+        TIME,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=DECIMAL},
+      </if>
+      <if test="alarmdate != null">
+        #{alarmdate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="snapid != null">
+        #{snapid,jdbcType=DECIMAL},
+      </if>
+      <if test="count != null">
+        #{count,jdbcType=DECIMAL},
+      </if>
+      <if test="time != null">
+        #{time,jdbcType=DECIMAL},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.gyee.frame.model.auto.AlarmcountExample" resultType="java.lang.Long">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    select count(*) from ALARMCOUNT
+    <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 ALARMCOUNT
+    <set>
+      <if test="record.id != null">
+        ID = #{record.id,jdbcType=DECIMAL},
+      </if>
+      <if test="record.alarmdate != null">
+        ALARMDATE = #{record.alarmdate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.snapid != null">
+        SNAPID = #{record.snapid,jdbcType=DECIMAL},
+      </if>
+      <if test="record.count != null">
+        COUNT = #{record.count,jdbcType=DECIMAL},
+      </if>
+      <if test="record.time != null">
+        TIME = #{record.time,jdbcType=DECIMAL},
+      </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 ALARMCOUNT
+    set ID = #{record.id,jdbcType=DECIMAL},
+      ALARMDATE = #{record.alarmdate,jdbcType=TIMESTAMP},
+      SNAPID = #{record.snapid,jdbcType=DECIMAL},
+      COUNT = #{record.count,jdbcType=DECIMAL},
+      TIME = #{record.time,jdbcType=DECIMAL}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+</mapper>

+ 508 - 0
src/main/resources/mybatis/auto/AlarmsnapMapper.xml

@@ -0,0 +1,508 @@
+<?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.AlarmsnapMapper">
+  <resultMap id="BaseResultMap" type="com.gyee.frame.model.auto.Alarmsnap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    <id column="ID" jdbcType="DECIMAL" property="id" />
+    <result column="STATIONID" jdbcType="VARCHAR" property="stationid" />
+    <result column="PROJECTID" jdbcType="VARCHAR" property="projectid" />
+    <result column="LINEID" jdbcType="VARCHAR" property="lineid" />
+    <result column="WINDTURBINEID" jdbcType="VARCHAR" property="windturbineid" />
+    <result column="ALERTVALUE" jdbcType="DECIMAL" property="alertvalue" />
+    <result column="CATEGORY1" jdbcType="VARCHAR" property="category1" />
+    <result column="CATEGORY2" jdbcType="VARCHAR" property="category2" />
+    <result column="CATEGORY3" jdbcType="VARCHAR" property="category3" />
+    <result column="RANK" jdbcType="VARCHAR" property="rank" />
+    <result column="ISOPENED" jdbcType="DECIMAL" property="isopened" />
+    <result column="STATIONNAME" jdbcType="VARCHAR" property="stationname" />
+    <result column="PROJECTNAME" jdbcType="VARCHAR" property="projectname" />
+    <result column="LINENAME" jdbcType="VARCHAR" property="linename" />
+    <result column="WINDTURBINENAME" jdbcType="VARCHAR" property="windturbinename" />
+    <result column="ALERTTEXT" jdbcType="VARCHAR" property="alerttext" />
+    <result column="MODELID" jdbcType="VARCHAR" property="modelid" />
+    <result column="TESTINGPOINTKEY" jdbcType="VARCHAR" property="testingpointkey" />
+    <result column="LASTUPDATETIME" jdbcType="TIMESTAMP" property="lastupdatetime" />
+    <result column="DATAINFO" jdbcType="VARCHAR" property="datainfo" />
+  </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>
+    </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>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    ID, STATIONID, PROJECTID, LINEID, WINDTURBINEID, ALERTVALUE, CATEGORY1, CATEGORY2, 
+    CATEGORY3, RANK, ISOPENED, STATIONNAME, PROJECTNAME, LINENAME, WINDTURBINENAME, ALERTTEXT, 
+    MODELID, TESTINGPOINTKEY, LASTUPDATETIME, DATAINFO
+  </sql>
+  <select id="selectByExample" parameterType="com.gyee.frame.model.auto.AlarmsnapExample" 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 ALARMSNAP
+    <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.Short" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    select 
+    <include refid="Base_Column_List" />
+    from ALARMSNAP
+    where ID = #{id,jdbcType=DECIMAL}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Short">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    delete from ALARMSNAP
+    where ID = #{id,jdbcType=DECIMAL}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.gyee.frame.model.auto.AlarmsnapExample">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    delete from ALARMSNAP
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.gyee.frame.model.auto.Alarmsnap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    insert into ALARMSNAP (ID, STATIONID, PROJECTID, 
+      LINEID, WINDTURBINEID, ALERTVALUE, 
+      CATEGORY1, CATEGORY2, CATEGORY3, 
+      RANK, ISOPENED, STATIONNAME, 
+      PROJECTNAME, LINENAME, WINDTURBINENAME, 
+      ALERTTEXT, MODELID, TESTINGPOINTKEY, 
+      LASTUPDATETIME, DATAINFO)
+    values (#{id,jdbcType=DECIMAL}, #{stationid,jdbcType=VARCHAR}, #{projectid,jdbcType=VARCHAR}, 
+      #{lineid,jdbcType=VARCHAR}, #{windturbineid,jdbcType=VARCHAR}, #{alertvalue,jdbcType=DECIMAL}, 
+      #{category1,jdbcType=VARCHAR}, #{category2,jdbcType=VARCHAR}, #{category3,jdbcType=VARCHAR}, 
+      #{rank,jdbcType=VARCHAR}, #{isopened,jdbcType=DECIMAL}, #{stationname,jdbcType=VARCHAR}, 
+      #{projectname,jdbcType=VARCHAR}, #{linename,jdbcType=VARCHAR}, #{windturbinename,jdbcType=VARCHAR}, 
+      #{alerttext,jdbcType=VARCHAR}, #{modelid,jdbcType=VARCHAR}, #{testingpointkey,jdbcType=VARCHAR}, 
+      #{lastupdatetime,jdbcType=TIMESTAMP}, #{datainfo,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gyee.frame.model.auto.Alarmsnap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    insert into ALARMSNAP
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        ID,
+      </if>
+      <if test="stationid != null">
+        STATIONID,
+      </if>
+      <if test="projectid != null">
+        PROJECTID,
+      </if>
+      <if test="lineid != null">
+        LINEID,
+      </if>
+      <if test="windturbineid != null">
+        WINDTURBINEID,
+      </if>
+      <if test="alertvalue != null">
+        ALERTVALUE,
+      </if>
+      <if test="category1 != null">
+        CATEGORY1,
+      </if>
+      <if test="category2 != null">
+        CATEGORY2,
+      </if>
+      <if test="category3 != null">
+        CATEGORY3,
+      </if>
+      <if test="rank != null">
+        RANK,
+      </if>
+      <if test="isopened != null">
+        ISOPENED,
+      </if>
+      <if test="stationname != null">
+        STATIONNAME,
+      </if>
+      <if test="projectname != null">
+        PROJECTNAME,
+      </if>
+      <if test="linename != null">
+        LINENAME,
+      </if>
+      <if test="windturbinename != null">
+        WINDTURBINENAME,
+      </if>
+      <if test="alerttext != null">
+        ALERTTEXT,
+      </if>
+      <if test="modelid != null">
+        MODELID,
+      </if>
+      <if test="testingpointkey != null">
+        TESTINGPOINTKEY,
+      </if>
+      <if test="lastupdatetime != null">
+        LASTUPDATETIME,
+      </if>
+      <if test="datainfo != null">
+        DATAINFO,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=DECIMAL},
+      </if>
+      <if test="stationid != null">
+        #{stationid,jdbcType=VARCHAR},
+      </if>
+      <if test="projectid != null">
+        #{projectid,jdbcType=VARCHAR},
+      </if>
+      <if test="lineid != null">
+        #{lineid,jdbcType=VARCHAR},
+      </if>
+      <if test="windturbineid != null">
+        #{windturbineid,jdbcType=VARCHAR},
+      </if>
+      <if test="alertvalue != null">
+        #{alertvalue,jdbcType=DECIMAL},
+      </if>
+      <if test="category1 != null">
+        #{category1,jdbcType=VARCHAR},
+      </if>
+      <if test="category2 != null">
+        #{category2,jdbcType=VARCHAR},
+      </if>
+      <if test="category3 != null">
+        #{category3,jdbcType=VARCHAR},
+      </if>
+      <if test="rank != null">
+        #{rank,jdbcType=VARCHAR},
+      </if>
+      <if test="isopened != null">
+        #{isopened,jdbcType=DECIMAL},
+      </if>
+      <if test="stationname != null">
+        #{stationname,jdbcType=VARCHAR},
+      </if>
+      <if test="projectname != null">
+        #{projectname,jdbcType=VARCHAR},
+      </if>
+      <if test="linename != null">
+        #{linename,jdbcType=VARCHAR},
+      </if>
+      <if test="windturbinename != null">
+        #{windturbinename,jdbcType=VARCHAR},
+      </if>
+      <if test="alerttext != null">
+        #{alerttext,jdbcType=VARCHAR},
+      </if>
+      <if test="modelid != null">
+        #{modelid,jdbcType=VARCHAR},
+      </if>
+      <if test="testingpointkey != null">
+        #{testingpointkey,jdbcType=VARCHAR},
+      </if>
+      <if test="lastupdatetime != null">
+        #{lastupdatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="datainfo != null">
+        #{datainfo,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.gyee.frame.model.auto.AlarmsnapExample" resultType="java.lang.Long">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    select count(*) from ALARMSNAP
+    <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 ALARMSNAP
+    <set>
+      <if test="record.id != null">
+        ID = #{record.id,jdbcType=DECIMAL},
+      </if>
+      <if test="record.stationid != null">
+        STATIONID = #{record.stationid,jdbcType=VARCHAR},
+      </if>
+      <if test="record.projectid != null">
+        PROJECTID = #{record.projectid,jdbcType=VARCHAR},
+      </if>
+      <if test="record.lineid != null">
+        LINEID = #{record.lineid,jdbcType=VARCHAR},
+      </if>
+      <if test="record.windturbineid != null">
+        WINDTURBINEID = #{record.windturbineid,jdbcType=VARCHAR},
+      </if>
+      <if test="record.alertvalue != null">
+        ALERTVALUE = #{record.alertvalue,jdbcType=DECIMAL},
+      </if>
+      <if test="record.category1 != null">
+        CATEGORY1 = #{record.category1,jdbcType=VARCHAR},
+      </if>
+      <if test="record.category2 != null">
+        CATEGORY2 = #{record.category2,jdbcType=VARCHAR},
+      </if>
+      <if test="record.category3 != null">
+        CATEGORY3 = #{record.category3,jdbcType=VARCHAR},
+      </if>
+      <if test="record.rank != null">
+        RANK = #{record.rank,jdbcType=VARCHAR},
+      </if>
+      <if test="record.isopened != null">
+        ISOPENED = #{record.isopened,jdbcType=DECIMAL},
+      </if>
+      <if test="record.stationname != null">
+        STATIONNAME = #{record.stationname,jdbcType=VARCHAR},
+      </if>
+      <if test="record.projectname != null">
+        PROJECTNAME = #{record.projectname,jdbcType=VARCHAR},
+      </if>
+      <if test="record.linename != null">
+        LINENAME = #{record.linename,jdbcType=VARCHAR},
+      </if>
+      <if test="record.windturbinename != null">
+        WINDTURBINENAME = #{record.windturbinename,jdbcType=VARCHAR},
+      </if>
+      <if test="record.alerttext != null">
+        ALERTTEXT = #{record.alerttext,jdbcType=VARCHAR},
+      </if>
+      <if test="record.modelid != null">
+        MODELID = #{record.modelid,jdbcType=VARCHAR},
+      </if>
+      <if test="record.testingpointkey != null">
+        TESTINGPOINTKEY = #{record.testingpointkey,jdbcType=VARCHAR},
+      </if>
+      <if test="record.lastupdatetime != null">
+        LASTUPDATETIME = #{record.lastupdatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.datainfo != null">
+        DATAINFO = #{record.datainfo,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 ALARMSNAP
+    set ID = #{record.id,jdbcType=DECIMAL},
+      STATIONID = #{record.stationid,jdbcType=VARCHAR},
+      PROJECTID = #{record.projectid,jdbcType=VARCHAR},
+      LINEID = #{record.lineid,jdbcType=VARCHAR},
+      WINDTURBINEID = #{record.windturbineid,jdbcType=VARCHAR},
+      ALERTVALUE = #{record.alertvalue,jdbcType=DECIMAL},
+      CATEGORY1 = #{record.category1,jdbcType=VARCHAR},
+      CATEGORY2 = #{record.category2,jdbcType=VARCHAR},
+      CATEGORY3 = #{record.category3,jdbcType=VARCHAR},
+      RANK = #{record.rank,jdbcType=VARCHAR},
+      ISOPENED = #{record.isopened,jdbcType=DECIMAL},
+      STATIONNAME = #{record.stationname,jdbcType=VARCHAR},
+      PROJECTNAME = #{record.projectname,jdbcType=VARCHAR},
+      LINENAME = #{record.linename,jdbcType=VARCHAR},
+      WINDTURBINENAME = #{record.windturbinename,jdbcType=VARCHAR},
+      ALERTTEXT = #{record.alerttext,jdbcType=VARCHAR},
+      MODELID = #{record.modelid,jdbcType=VARCHAR},
+      TESTINGPOINTKEY = #{record.testingpointkey,jdbcType=VARCHAR},
+      LASTUPDATETIME = #{record.lastupdatetime,jdbcType=TIMESTAMP},
+      DATAINFO = #{record.datainfo,jdbcType=VARCHAR}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gyee.frame.model.auto.Alarmsnap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    update ALARMSNAP
+    <set>
+      <if test="stationid != null">
+        STATIONID = #{stationid,jdbcType=VARCHAR},
+      </if>
+      <if test="projectid != null">
+        PROJECTID = #{projectid,jdbcType=VARCHAR},
+      </if>
+      <if test="lineid != null">
+        LINEID = #{lineid,jdbcType=VARCHAR},
+      </if>
+      <if test="windturbineid != null">
+        WINDTURBINEID = #{windturbineid,jdbcType=VARCHAR},
+      </if>
+      <if test="alertvalue != null">
+        ALERTVALUE = #{alertvalue,jdbcType=DECIMAL},
+      </if>
+      <if test="category1 != null">
+        CATEGORY1 = #{category1,jdbcType=VARCHAR},
+      </if>
+      <if test="category2 != null">
+        CATEGORY2 = #{category2,jdbcType=VARCHAR},
+      </if>
+      <if test="category3 != null">
+        CATEGORY3 = #{category3,jdbcType=VARCHAR},
+      </if>
+      <if test="rank != null">
+        RANK = #{rank,jdbcType=VARCHAR},
+      </if>
+      <if test="isopened != null">
+        ISOPENED = #{isopened,jdbcType=DECIMAL},
+      </if>
+      <if test="stationname != null">
+        STATIONNAME = #{stationname,jdbcType=VARCHAR},
+      </if>
+      <if test="projectname != null">
+        PROJECTNAME = #{projectname,jdbcType=VARCHAR},
+      </if>
+      <if test="linename != null">
+        LINENAME = #{linename,jdbcType=VARCHAR},
+      </if>
+      <if test="windturbinename != null">
+        WINDTURBINENAME = #{windturbinename,jdbcType=VARCHAR},
+      </if>
+      <if test="alerttext != null">
+        ALERTTEXT = #{alerttext,jdbcType=VARCHAR},
+      </if>
+      <if test="modelid != null">
+        MODELID = #{modelid,jdbcType=VARCHAR},
+      </if>
+      <if test="testingpointkey != null">
+        TESTINGPOINTKEY = #{testingpointkey,jdbcType=VARCHAR},
+      </if>
+      <if test="lastupdatetime != null">
+        LASTUPDATETIME = #{lastupdatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="datainfo != null">
+        DATAINFO = #{datainfo,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where ID = #{id,jdbcType=DECIMAL}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gyee.frame.model.auto.Alarmsnap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    update ALARMSNAP
+    set STATIONID = #{stationid,jdbcType=VARCHAR},
+      PROJECTID = #{projectid,jdbcType=VARCHAR},
+      LINEID = #{lineid,jdbcType=VARCHAR},
+      WINDTURBINEID = #{windturbineid,jdbcType=VARCHAR},
+      ALERTVALUE = #{alertvalue,jdbcType=DECIMAL},
+      CATEGORY1 = #{category1,jdbcType=VARCHAR},
+      CATEGORY2 = #{category2,jdbcType=VARCHAR},
+      CATEGORY3 = #{category3,jdbcType=VARCHAR},
+      RANK = #{rank,jdbcType=VARCHAR},
+      ISOPENED = #{isopened,jdbcType=DECIMAL},
+      STATIONNAME = #{stationname,jdbcType=VARCHAR},
+      PROJECTNAME = #{projectname,jdbcType=VARCHAR},
+      LINENAME = #{linename,jdbcType=VARCHAR},
+      WINDTURBINENAME = #{windturbinename,jdbcType=VARCHAR},
+      ALERTTEXT = #{alerttext,jdbcType=VARCHAR},
+      MODELID = #{modelid,jdbcType=VARCHAR},
+      TESTINGPOINTKEY = #{testingpointkey,jdbcType=VARCHAR},
+      LASTUPDATETIME = #{lastupdatetime,jdbcType=TIMESTAMP},
+      DATAINFO = #{datainfo,jdbcType=VARCHAR}
+    where ID = #{id,jdbcType=DECIMAL}
+  </update>
+</mapper>

+ 477 - 0
src/main/resources/mybatis/auto/Alertrule2Mapper.xml

@@ -0,0 +1,477 @@
+<?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>
+            </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>
+            </foreach>
+          </trim>
+        </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">
+        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">
+        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">
+        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">
+        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>
+</mapper>

+ 308 - 0
src/main/resources/mybatis/auto/TvuePermissionMapper.xml

@@ -0,0 +1,308 @@
+<?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.TvuePermissionMapper">
+  <resultMap id="BaseResultMap" type="com.gyee.frame.model.auto.TvuePermission">
+    <constructor>
+      <idArg column="id" javaType="java.lang.String" jdbcType="VARCHAR" />
+      <arg column="name" javaType="java.lang.String" jdbcType="VARCHAR" />
+      <arg column="descripion" javaType="java.lang.String" jdbcType="VARCHAR" />
+      <arg column="url" javaType="java.lang.String" jdbcType="VARCHAR" />
+      <arg column="is_blank" javaType="java.lang.Integer" jdbcType="INTEGER" />
+      <arg column="pid" javaType="java.lang.String" jdbcType="VARCHAR" />
+      <arg column="perms" javaType="java.lang.String" jdbcType="VARCHAR" />
+      <arg column="type" javaType="java.lang.Integer" jdbcType="INTEGER" />
+      <arg column="icon" javaType="java.lang.String" jdbcType="VARCHAR" />
+      <arg column="order_num" javaType="java.lang.Integer" jdbcType="INTEGER" />
+      <arg column="visible" javaType="java.lang.Integer" jdbcType="INTEGER" />
+      <arg column="childcount" javaType="java.lang.Integer" jdbcType="INTEGER"/>
+    </constructor>
+  </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, name, descripion, url, is_blank, pid, perms, type, icon, order_num, visible, (select count(1) from t_vue_permission where pid=a.id) childcount
+  </sql>
+  <select id="selectByExample" parameterType="com.gyee.frame.model.auto.TvuePermissionExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from t_vue_permission a
+    <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_vue_permission a
+    where id = #{id,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    delete from t_vue_permission
+    where id = #{id,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.gyee.frame.model.auto.TvuePermissionExample">
+    delete from t_vue_permission
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.gyee.frame.model.auto.TvuePermission">
+    insert into t_vue_permission (id, name, descripion, 
+      url, is_blank, pid, 
+      perms, type, icon, 
+      order_num, visible)
+    values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{descripion,jdbcType=VARCHAR}, 
+      #{url,jdbcType=VARCHAR}, #{isBlank,jdbcType=INTEGER}, #{pid,jdbcType=VARCHAR}, 
+      #{perms,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER}, #{icon,jdbcType=VARCHAR}, 
+      #{orderNum,jdbcType=INTEGER}, #{visible,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gyee.frame.model.auto.TvuePermission">
+    insert into t_vue_permission
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="name != null">
+        name,
+      </if>
+      <if test="descripion != null">
+        descripion,
+      </if>
+      <if test="url != null">
+        url,
+      </if>
+      <if test="isBlank != null">
+        is_blank,
+      </if>
+      <if test="pid != null">
+        pid,
+      </if>
+      <if test="perms != null">
+        perms,
+      </if>
+      <if test="type != null">
+        type,
+      </if>
+      <if test="icon != null">
+        icon,
+      </if>
+      <if test="orderNum != null">
+        order_num,
+      </if>
+      <if test="visible != null">
+        visible,
+      </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="descripion != null">
+        #{descripion,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null">
+        #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="isBlank != null">
+        #{isBlank,jdbcType=INTEGER},
+      </if>
+      <if test="pid != null">
+        #{pid,jdbcType=VARCHAR},
+      </if>
+      <if test="perms != null">
+        #{perms,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null">
+        #{type,jdbcType=INTEGER},
+      </if>
+      <if test="icon != null">
+        #{icon,jdbcType=VARCHAR},
+      </if>
+      <if test="orderNum != null">
+        #{orderNum,jdbcType=INTEGER},
+      </if>
+      <if test="visible != null">
+        #{visible,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.gyee.frame.model.auto.TvuePermissionExample" resultType="java.lang.Long">
+    select count(*) from t_vue_permission a
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update t_vue_permission
+    <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.descripion != null">
+        descripion = #{record.descripion,jdbcType=VARCHAR},
+      </if>
+      <if test="record.url != null">
+        url = #{record.url,jdbcType=VARCHAR},
+      </if>
+      <if test="record.isBlank != null">
+        is_blank = #{record.isBlank,jdbcType=INTEGER},
+      </if>
+      <if test="record.pid != null">
+        pid = #{record.pid,jdbcType=VARCHAR},
+      </if>
+      <if test="record.perms != null">
+        perms = #{record.perms,jdbcType=VARCHAR},
+      </if>
+      <if test="record.type != null">
+        type = #{record.type,jdbcType=INTEGER},
+      </if>
+      <if test="record.icon != null">
+        icon = #{record.icon,jdbcType=VARCHAR},
+      </if>
+      <if test="record.orderNum != null">
+        order_num = #{record.orderNum,jdbcType=INTEGER},
+      </if>
+      <if test="record.visible != null">
+        visible = #{record.visible,jdbcType=INTEGER},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update t_vue_permission
+    set id = #{record.id,jdbcType=VARCHAR},
+    name = #{record.name,jdbcType=VARCHAR},
+    descripion = #{record.descripion,jdbcType=VARCHAR},
+    url = #{record.url,jdbcType=VARCHAR},
+    is_blank = #{record.isBlank,jdbcType=INTEGER},
+    pid = #{record.pid,jdbcType=VARCHAR},
+    perms = #{record.perms,jdbcType=VARCHAR},
+    type = #{record.type,jdbcType=INTEGER},
+    icon = #{record.icon,jdbcType=VARCHAR},
+    order_num = #{record.orderNum,jdbcType=INTEGER},
+    visible = #{record.visible,jdbcType=INTEGER}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gyee.frame.model.auto.TvuePermission">
+    update t_vue_permission
+    <set>
+      <if test="name != null">
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="descripion != null">
+        descripion = #{descripion,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null">
+        url = #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="isBlank != null">
+        is_blank = #{isBlank,jdbcType=INTEGER},
+      </if>
+      <if test="pid != null">
+        pid = #{pid,jdbcType=VARCHAR},
+      </if>
+      <if test="perms != null">
+        perms = #{perms,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null">
+        type = #{type,jdbcType=INTEGER},
+      </if>
+      <if test="icon != null">
+        icon = #{icon,jdbcType=VARCHAR},
+      </if>
+      <if test="orderNum != null">
+        order_num = #{orderNum,jdbcType=INTEGER},
+      </if>
+      <if test="visible != null">
+        visible = #{visible,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gyee.frame.model.auto.TvuePermission">
+    update t_vue_permission
+    set name = #{name,jdbcType=VARCHAR},
+      descripion = #{descripion,jdbcType=VARCHAR},
+      url = #{url,jdbcType=VARCHAR},
+      is_blank = #{isBlank,jdbcType=INTEGER},
+      pid = #{pid,jdbcType=VARCHAR},
+      perms = #{perms,jdbcType=VARCHAR},
+      type = #{type,jdbcType=INTEGER},
+      icon = #{icon,jdbcType=VARCHAR},
+      order_num = #{orderNum,jdbcType=INTEGER},
+      visible = #{visible,jdbcType=INTEGER}
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 241 - 0
src/main/resources/mybatis/auto/TvuePermissionRoleMapper.xml

@@ -0,0 +1,241 @@
+<?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.TvuePermissionRoleMapper">
+  <resultMap id="BaseResultMap" type="com.gyee.frame.model.auto.TvuePermissionRole">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    <id column="id" jdbcType="VARCHAR" property="id" />
+    <result column="role_id" jdbcType="VARCHAR" property="roleId" />
+    <result column="permission_id" jdbcType="VARCHAR" property="permissionId" />
+  </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>
+    </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>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    id, role_id, permission_id
+  </sql>
+  <select id="selectByExample" parameterType="com.gyee.frame.model.auto.TvuePermissionRoleExample" 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 t_vue_permission_role
+    <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 t_vue_permission_role
+    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 t_vue_permission_role
+    where id = #{id,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.gyee.frame.model.auto.TvuePermissionRoleExample">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    delete from t_vue_permission_role
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.gyee.frame.model.auto.TvuePermissionRole">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    insert into t_vue_permission_role (id, role_id, permission_id
+      )
+    values (#{id,jdbcType=VARCHAR}, #{roleId,jdbcType=VARCHAR}, #{permissionId,jdbcType=VARCHAR}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.gyee.frame.model.auto.TvuePermissionRole">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    insert into t_vue_permission_role
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="roleId != null">
+        role_id,
+      </if>
+      <if test="permissionId != null">
+        permission_id,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=VARCHAR},
+      </if>
+      <if test="roleId != null">
+        #{roleId,jdbcType=VARCHAR},
+      </if>
+      <if test="permissionId != null">
+        #{permissionId,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.gyee.frame.model.auto.TvuePermissionRoleExample" resultType="java.lang.Long">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    select count(*) from t_vue_permission_role
+    <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 t_vue_permission_role
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=VARCHAR},
+      </if>
+      <if test="record.roleId != null">
+        role_id = #{record.roleId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.permissionId != null">
+        permission_id = #{record.permissionId,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 t_vue_permission_role
+    set id = #{record.id,jdbcType=VARCHAR},
+      role_id = #{record.roleId,jdbcType=VARCHAR},
+      permission_id = #{record.permissionId,jdbcType=VARCHAR}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gyee.frame.model.auto.TvuePermissionRole">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    update t_vue_permission_role
+    <set>
+      <if test="roleId != null">
+        role_id = #{roleId,jdbcType=VARCHAR},
+      </if>
+      <if test="permissionId != null">
+        permission_id = #{permissionId,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gyee.frame.model.auto.TvuePermissionRole">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    update t_vue_permission_role
+    set role_id = #{roleId,jdbcType=VARCHAR},
+      permission_id = #{permissionId,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 224 - 0
src/main/resources/mybatis/auto/TvueRoleMapper.xml

@@ -0,0 +1,224 @@
+<?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.TvueRoleMapper">
+  <resultMap id="BaseResultMap" type="com.gyee.frame.model.auto.TvueRole">
+    <!--
+      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" />
+  </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>
+    </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>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    id, name
+  </sql>
+  <select id="selectByExample" parameterType="com.gyee.frame.model.auto.TvueRoleExample" 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 t_vue_role
+    <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 t_vue_role
+    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 t_vue_role
+    where id = #{id,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.gyee.frame.model.auto.TvueRoleExample">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    delete from t_vue_role
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.gyee.frame.model.auto.TvueRole">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    insert into t_vue_role (id, name)
+    values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gyee.frame.model.auto.TvueRole">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    insert into t_vue_role
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="name != null">
+        name,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null">
+        #{name,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.gyee.frame.model.auto.TvueRoleExample" resultType="java.lang.Long">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    select count(*) from t_vue_role
+    <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 t_vue_role
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=VARCHAR},
+      </if>
+      <if test="record.name != null">
+        name = #{record.name,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 t_vue_role
+    set id = #{record.id,jdbcType=VARCHAR},
+      name = #{record.name,jdbcType=VARCHAR}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gyee.frame.model.auto.TvueRole">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    update t_vue_role
+    <set>
+      <if test="name != null">
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gyee.frame.model.auto.TvueRole">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    update t_vue_role
+    set name = #{name,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 241 - 0
src/main/resources/mybatis/auto/TvueRoleUserMapper.xml

@@ -0,0 +1,241 @@
+<?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.TvueRoleUserMapper">
+  <resultMap id="BaseResultMap" type="com.gyee.frame.model.auto.TvueRoleUser">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    <id column="id" jdbcType="VARCHAR" property="id" />
+    <result column="sys_user_id" jdbcType="VARCHAR" property="sysUserId" />
+    <result column="sys_role_id" jdbcType="VARCHAR" property="sysRoleId" />
+  </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>
+    </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>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    id, sys_user_id, sys_role_id
+  </sql>
+  <select id="selectByExample" parameterType="com.gyee.frame.model.auto.TvueRoleUserExample" 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 t_vue_role_user
+    <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 t_vue_role_user
+    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 t_vue_role_user
+    where id = #{id,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.gyee.frame.model.auto.TvueRoleUserExample">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    delete from t_vue_role_user
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.gyee.frame.model.auto.TvueRoleUser">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    insert into t_vue_role_user (id, sys_user_id, sys_role_id
+      )
+    values (#{id,jdbcType=VARCHAR}, #{sysUserId,jdbcType=VARCHAR}, #{sysRoleId,jdbcType=VARCHAR}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.gyee.frame.model.auto.TvueRoleUser">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    insert into t_vue_role_user
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="sysUserId != null">
+        sys_user_id,
+      </if>
+      <if test="sysRoleId != null">
+        sys_role_id,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=VARCHAR},
+      </if>
+      <if test="sysUserId != null">
+        #{sysUserId,jdbcType=VARCHAR},
+      </if>
+      <if test="sysRoleId != null">
+        #{sysRoleId,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.gyee.frame.model.auto.TvueRoleUserExample" resultType="java.lang.Long">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    select count(*) from t_vue_role_user
+    <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 t_vue_role_user
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sysUserId != null">
+        sys_user_id = #{record.sysUserId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sysRoleId != null">
+        sys_role_id = #{record.sysRoleId,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 t_vue_role_user
+    set id = #{record.id,jdbcType=VARCHAR},
+      sys_user_id = #{record.sysUserId,jdbcType=VARCHAR},
+      sys_role_id = #{record.sysRoleId,jdbcType=VARCHAR}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gyee.frame.model.auto.TvueRoleUser">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    update t_vue_role_user
+    <set>
+      <if test="sysUserId != null">
+        sys_user_id = #{sysUserId,jdbcType=VARCHAR},
+      </if>
+      <if test="sysRoleId != null">
+        sys_role_id = #{sysRoleId,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gyee.frame.model.auto.TvueRoleUser">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+    -->
+    update t_vue_role_user
+    set sys_user_id = #{sysUserId,jdbcType=VARCHAR},
+      sys_role_id = #{sysRoleId,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 43 - 0
src/main/resources/mybatis/custom/TvuePremissionMapper.xml

@@ -0,0 +1,43 @@
+<?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.custom.PermissionVueDao">
+  <resultMap id="BaseResultMap" type="com.gyee.frame.model.auto.TvuePermission">
+    <id column="id" jdbcType="VARCHAR" property="id" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
+    <result column="descripion" jdbcType="VARCHAR" property="descripion" />
+    <result column="url" jdbcType="VARCHAR" property="url" />
+    <result column="is_blank" jdbcType="INTEGER" property="isBlank" />
+    <result column="pid" jdbcType="VARCHAR" property="pid" />
+    <result column="perms" jdbcType="VARCHAR" property="perms" />
+    <result column="type" jdbcType="INTEGER" property="type" />
+    <result column="icon" jdbcType="VARCHAR" property="icon" />
+    <result column="order_num" jdbcType="INTEGER" property="orderNum" />
+    <result column="visible" jdbcType="INTEGER" property="visible" />
+    <result column="childcount" jdbcType="INTEGER" property="childCount"/>
+  </resultMap>
+   <sql id="Base_Column_List">
+     id, name, descripion, url, pid, perms, type, icon, order_num
+  </sql>
+   <select id="findAll"  resultMap="BaseResultMap">
+
+	  select  *,(select count(1) from t_vue_permission where pid=a.id) childcount from t_vue_permission a
+	</select>
+
+<select id="findByAdminUserId" parameterType="String" resultMap="BaseResultMap">
+        select distinct p.*,(select count(1) from t_vue_permission where pid=p.id) childcount
+        from t_vue_permission_role spr,t_vue_role_user sru,t_vue_permission p
+        where 	spr.role_id = sru.sys_role_id AND spr.permission_id = p.id AND sru.sys_user_id=#{userId} 
+		GROUP BY p.id
+		ORDER BY order_num  is null  ASC,order_num  ASC
+ </select>
+ 
+ <select id="queryRoleId"  parameterType="String" resultMap="BaseResultMap">
+ 	select p.* from t_vue_permission p
+	left join t_vue_permission_role pr on p.id=pr.permission_id
+	where pr.role_id=#{roleid}
+ 
+ </select>
+ 
+ 
+ 
+</mapper>

+ 17 - 0
src/main/resources/mybatis/custom/TvueRoleMapper.xml

@@ -0,0 +1,17 @@
+<?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.custom.RoleVueDao">
+  <resultMap id="BaseResultMap" type="com.gyee.frame.model.auto.TvueRole">
+    <result column="id" jdbcType="VARCHAR" property="id" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
+  </resultMap>
+  
+   <sql id="Base_Column_List">
+    id, name
+   </sql>
+  <select id="queryUserRole" parameterType="String" resultType="com.gyee.frame.model.auto.TvueRole">
+        select r.id,r.name  from t_vue_role r
+		LEFT JOIN t_vue_role_user ru ON  r.id=ru.sys_role_id
+		where ru.sys_user_id=#{userid}``
+ </select>
+</mapper>

+ 1 - 1
src/main/resources/templates/admin/common/html/leftMenu.html

@@ -4,7 +4,7 @@
 	<div id="skin-select">
 		<!-- PC端 LOGO -->
 	    <div id="logo">
-	     <h1>Springboot<span>v2</span></h1>
+	     <h1>后台管理系统<span>v1.0</span></h1>
 	    </div>
 	<!--END PC端 LOGO -->
 	

+ 4 - 112
src/main/resources/templates/admin/common/html/topMenu.html

@@ -32,73 +32,6 @@
 	
 	        <!-- 右侧顶部-->
 	        <div id="bs-example-navbar-collapse-1" class="collapse navbar-collapse">
-	            <ul class="nav navbar-nav">
-		<!-- 消息通知栏 -->
-	                <li class="dropdown">
-	                    <a data-toggle="dropdown" class="dropdown-toggle" href="#"><i style="font-size:20px;" class="icon-conversation"></i><div class="noft-red">23</div></a>
-	                    <ul style="margin: 11px 0 0 9px;" role="menu" class="dropdown-menu dropdown-wrap">
-	                        <li>
-	                            <a href="#">
-	                                <img alt="" class="img-msg img-circle" th:src="@{/static/admin/portraits/thumb/men/1.jpg}">Jhon Doe <b>Just Now</b>
-	                            </a>
-	                        </li>
-	                        <li class="divider"></li>
-	                        <li>
-	                            <a href="#">
-	                                <img alt="" class="img-msg img-circle" th:src="@{/static/admin/portraits/thumb/women/1.jpg} ">Jeniffer <b>3 Min Ago</b>
-	                            </a>
-	                        </li>
-	                        <li class="divider"></li>
-	                        <li>
-	                            <a href="#">
-	                                <img alt="" class="img-msg img-circle" th:src="@{/static/admin/portraits/thumb/men/2.jpg}">Dave <b>2 Hours Ago</b>
-	                            </a>
-	                        </li>
-	                        <li class="divider"></li>
-	                        <li>
-	                            <a href="#">
-	                                <img alt="" class="img-msg img-circle" th:src="@{/static/admin/portraits/thumb/men/3.jpg}"><i>Keanu</i>  <b>1 Day Ago</b>
-	                            </a>
-	                        </li>
-	                        <li class="divider"></li>
-	                        <li>
-	                            <a href="#">
-	                                <img alt="" class="img-msg img-circle" th:src="@{/static/admin/portraits/thumb/men/4.jpg}"><i>Masashi</i>  <b>2 Mounth Ago</b>
-	                            </a>
-	                        </li>
-	                        <li class="divider"></li>
-	                        <li>
-	                            <div>See All Messege</div>
-	                        </li>
-	                    </ul>
-	                </li>
-	                <!-- END消息通知栏 -->
-	                <!-- 右边警告图标通知栏 -->
-	                <li>
-	
-	                    <a data-toggle="dropdown" class="dropdown-toggle" href="#"><i style="font-size:19px;" class="icon-warning tooltitle"></i><div class="noft-green" th:text="${session.notices.size()}">5</div></a>
-	                    <ul style="margin: 12px 0 0 0;" role="menu" class="dropdown-menu dropdown-wrap">
-	                        <th:block th:each="notice : ${session.notices}">
-								<li>
-									<!-- <a th:href="@{/SysNoticeController/viewinfo/}+${notice.id}"  target="mainFrame"> -->
-		                            <a th:href="@{/SysNoticeController/viewinfo/}+${notice.id}"  target="mainFrame">
-		                                <span style="background:#DF2135" class="noft-icon fontawesome-comments-alt"></span><i th:text="${notice.title}">From Station</i> <b>查看</b>
-		                            </a>
-	                        	</li>
-	                        	<li class="divider"></li>
-							</th:block>
-	                        <li>
-	                           <a th:href="@{/SysNoticeController/viewUser}" target="mainFrame"> <div>查看所有公告</div></a>
-	                        </li>
-	                    </ul>
-	                </li>
-	                <!--END 右边警告图标通知栏 -->
-	                
-	                <!-- 右边帮助图标通知栏  -->
-	                <li><a href="#"><i data-toggle="tooltip" data-placement="bottom" title="Help" style="font-size:20px;" class="icon-help tooltitle"></i></a>
-	                </li>
-		<!-- END右边帮助图标通知栏  -->
-	            </ul>
 	            <!-- 右侧顶部 日期 时间  天气预报  div-->
 	            <div id="nt-title-container" class="navbar-left running-text visible-lg">
 	            	<!-- 日期空间 -->
@@ -118,29 +51,7 @@
 	                    <li class="meridiem"></li>
 	                </ul>
 	                <!--end 时间DIV -->
-	                <!-- 天气预报div -->
-	                <ul id="nt-title">
-	                    <li><i class="wi-day-lightning"></i>&#160;&#160;Berlin&#160;
-	                        <b>85</b><i class="wi-fahrenheit"></i>&#160;; 15km/h
-	                    </li>
-	                    <li><i class="wi-day-lightning"></i>&#160;&#160;Yogyakarta&#160;
-	                        <b>85</b><i class="wi-fahrenheit"></i>&#160;; Tonight- 72 °F (22.2 °C)
-	                    </li>
-	
-	                    <li><i class="wi-day-lightning"></i>&#160;&#160;Sttugart&#160;
-	                        <b>85</b><i class="wi-fahrenheit"></i>&#160;; 15km/h
-	                    </li>
-	
-	                    <li><i class="wi-day-lightning"></i>&#160;&#160;Muchen&#160;
-	                        <b>85</b><i class="wi-fahrenheit"></i>&#160;; 15km/h
-	                    </li>
-	
-	                    <li><i class="wi-day-lightning"></i>&#160;&#160;Frankurt&#160;
-	                        <b>85</b><i class="wi-fahrenheit"></i>&#160;; 15km/h
-	                    </li>
-	
-	                </ul>
-	                <!--end 天气预报div -->
+
 	            </div>
 	<!-- end 右侧顶部 日期 时间  天气预报 -->
 
@@ -149,22 +60,10 @@
 	                <!-- 头像设置 -->
 	                <li>
 	                    <a data-toggle="dropdown" class="dropdown-toggle" href="#">
-	                        <img alt="" class="admin-pic img-circle" th:src="@{/static/admin/portraits/thumb/men/10.jpg}"><span th:text="${'Hi,'+session.sessionUserName}"></span><b class="caret"></b>
+	                        <span th:text="${'Hi,'+session.sessionUserName}"></span><b class="caret"></b>
 	                    </a>
 	                    <ul style="margin-top:14px;" role="menu" class="dropdown-setting dropdown-menu">
-	                        <li>
-									<a href="#">
-	                                <span class="entypo-user"></span>&#160;&#160;My Profile</a>
-	                        </li>
-	                        <li>
-	                            <a href="#">
-	                                <span class="entypo-vcard"></span>&#160;&#160;Account Setting</a>
-	                        </li>
-	                        <li>
-	                            <a href="#">
-	                                <span class="entypo-lifebuoy"></span>&#160;&#160;Help</a>
-	                        </li>
-	                        <li class="divider"></li>
+
 	                        <li>
 	                 				<a th:href="@{/admin/Loginout}">
 	                                <span class="entypo-basket"></span>&#160;&#160; 退出</a>
@@ -195,14 +94,7 @@
 	                    </ul>
 	                </li>
 	                <!--END 背景设置 -->
-	                
-	                <!-- 顶部右侧隐藏按钮 -->
-	                <li class="hidden-xs">
-	                    <a class="toggle-left" href="#">
-	                        <span style="font-size:20px;" class="entypo-list-add"></span>
-	                    </a>
-	                </li>
-	                <!-- END顶部右侧隐藏按钮 -->
+
 	            </ul>
 	            <!-- end 右侧顶部 头像设置-->
 	        </div>

+ 2 - 9
src/main/resources/templates/admin/index.html

@@ -35,23 +35,16 @@ height: calc(100vh - 139px);overflow-x: hidden;
 <!-- 右边内容 -->
 <div class="wrap-fluid">
      <div style="background-color: aliceblue;">
-       <iframe  width="100%"   id="mainFrame" name="mainFrame" th:src="@{'/admin/main'}" frameborder="0" marginheight="0" marginwidth="0" border="false"  ></iframe>
+       <iframe  width="100%" height="100%"   id="mainFrame" name="mainFrame" th:src="@{'/admin/main'}" frameborder="0" marginheight="0" marginwidth="0" border="false"  ></iframe>
   
      </div>
       
-     <!-- 页脚 通用-->
-     <div th:replace="admin/common/html/footer :: footer">
-     </div>
-     <!-- 结束页脚通用 -->
+
 </div>
 <!-- 结束右边内容 -->
 
 <!-- ###############################代码编写出############################### -->
 
-<!-- 右侧隐藏滑块内容 -->
-<div th:include="admin/common/html/rightHide :: rightHide">
-</div>
-   <!-- END 右侧隐藏滑块内容-->
 
 <!-- 通用js -->
 <div th:include="admin/common/html/js :: onload_js"> 

+ 0 - 129
src/main/resources/templates/admin/main.html

@@ -45,135 +45,6 @@
                         <div class="body-nest" id="Blank_Page_Content">
 
 
- <p>先看文档,不懂在群里@我。本群进入后如果退出会有黑名单,永不在服务。浪费我时间,切用切珍惜! </p>
- <p>脚手架需要java基础,maven基础,springboot基础 </p>
- <p>请使用前先看 <b style="font-size:18px;color: red;">文档库</b>:再看  <b style="font-size:18px;color: red;">组织架构</b>,方便自己理解,很浅显了,不是很难,小白专用了。 </p>
- <p>自动生成代码有个bug列表 </p>
- <p>1、主键必须字符串 </p>
- <p>2、不根据规则来生成的一律出错不管 </p>
- <p>3、最好用mybatis-generator.xml 来生成model、dao【半自动】 </p>
- <p>4、在用自动生成 controller.java\service.java\html模板\sql【全自动】 </p>
- <p>欢迎fork后提交Pull Requests 审核通过进入开发小组进入v2的荣誉殿堂。</p>
- <p>生成顺序先全自动,在半自动。永远不会错 </p>
- <p>
- 	<h4>分支介绍:</h4>
- 	 <p><b style="font-size:15px;color: red;">master:</b> 开发者在一直更新维护</p>
- 	 <p><b style="font-size:15px;color: red;">dmd:</b> 有标签页面【就点击后右边有table标签】 暂停维护</p>
- 	 <p><b style="font-size:15px;color: red;">不局部刷新:</b> 老版本点击一些列表就会刷新整个页面 暂停更新</p>
- 	
- </p>
-<h4>文档库:https://gitee.com/bdj/Gyee_Frame_NX/wikis/</h4>
-<h4>更新日志: https://gitee.com/bdj/Gyee_Frame_NX/wikis/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97?sort_id=1452970</h4>
-<h4>更新日志: https://gitee.com/bdj/Gyee_Frame_NX/wikis/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97?sort_id=1452970</h4>
-
-<div>
-<h3>
-<a id="前言" class="anchor" href="#%E5%89%8D%E8%A8%80"></a>前言</h3>
-<p>Gyee_Frame_NX项目是努力打造springboot框架的极致细腻的脚手架。包括一套漂亮的前台。无其他杂七杂八的功能,原生纯净。</p>
-<h3>
-<a id="项目介绍" class="anchor" href="#%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D"></a>项目介绍</h3>
-<p>基于springboot的一款纯净脚手架。努力打造一款免费开源、注释全、文档全适合新手学习、方便快速二次开发的框架。</p>
-<h5>
-<a id="1-没有基础版没有vip版本没有付费群没有收费二维码" class="anchor" href="#1-%E6%B2%A1%E6%9C%89%E5%9F%BA%E7%A1%80%E7%89%88%E6%B2%A1%E6%9C%89vip%E7%89%88%E6%9C%AC%E6%B2%A1%E6%9C%89%E4%BB%98%E8%B4%B9%E7%BE%A4%E6%B2%A1%E6%9C%89%E6%94%B6%E8%B4%B9%E4%BA%8C%E7%BB%B4%E7%A0%81"></a>1. 没有基础版、没有vip版本、没有付费群、没有收费二维码</h5>
-<h5>
-<a id="2-遵循开源真谛一切免费才是真开源" class="anchor" href="#2-%E9%81%B5%E5%BE%AA%E5%BC%80%E6%BA%90%E7%9C%9F%E8%B0%9B%E4%B8%80%E5%88%87%E5%85%8D%E8%B4%B9%E6%89%8D%E6%98%AF%E7%9C%9F%E5%BC%80%E6%BA%90"></a>2. 遵循开源真谛,一切免费才是真开源</h5>
-<h5>
-<a id="3-不求回报你使用快乐就是这个项目最大的快乐" class="anchor" href="#3-%E4%B8%8D%E6%B1%82%E5%9B%9E%E6%8A%A5%E4%BD%A0%E4%BD%BF%E7%94%A8%E5%BF%AB%E4%B9%90%E5%B0%B1%E6%98%AF%E8%BF%99%E4%B8%AA%E9%A1%B9%E7%9B%AE%E6%9C%80%E5%A4%A7%E7%9A%84%E5%BF%AB%E4%B9%90"></a>3. 不求回报,你使用快乐就是这个项目最大的快乐!</h5>
-<h3>
-<a id="组织架构" class="anchor" href="#%E7%BB%84%E7%BB%87%E6%9E%B6%E6%9E%84"></a>组织架构</h3>
-<div class="white"><div class="highlight"><pre><span id="LC1" class="line">Springboot</span>
-<span id="LC2" class="line">├─doc  项目SQL语句以及文档</span>
-<span id="LC3" class="line">│</span>
-<span id="LC4" class="line">├─common 公共模块</span>
-<span id="LC5" class="line">│  ├─base Base继承通用类</span>
-<span id="LC6" class="line">│  ├─conf springBoot所有配置</span>
-<span id="LC7" class="line">│  ├─domain 前台返回包</span>
-<span id="LC8" class="line">│  ├─druid druid连接池</span>
-<span id="LC9" class="line">│  ├─exception 异常处理包</span>
-<span id="LC10" class="line">│  ├─file 文件上传</span>
-<span id="LC11" class="line">│  ├─interceptor 拦截器</span>
-<span id="LC12" class="line">│  ├─log 日志记录AOP</span>
-<span id="LC13" class="line">│  ├─domain 前台返回包</span>
-<span id="LC14" class="line">│  ├─quartz Spring定时器</span>
-<span id="LC15" class="line">│  └─support 工具包</span>
-<span id="LC16" class="line">│</span>
-<span id="LC17" class="line">├─controller 请求访问模块</span>
-<span id="LC18" class="line">│  ├─admin 模版后台请求包</span>
-<span id="LC19" class="line">│  ├─websocket websoket消息请求</span>
-<span id="LC20" class="line">│  └─HomeController.java 首页访问类</span>
-<span id="LC21" class="line">│</span>
-<span id="LC22" class="line">├─Mapper Dao模块</span>
-<span id="LC23" class="line">│  ├─auto mybatis-generator.xml自动生成Dao</span>
-<span id="LC24" class="line">│  └─custom 自定义Dao</span>
-<span id="LC25" class="line">│</span>
-<span id="LC26" class="line">├─Model 实体类模块</span>
-<span id="LC27" class="line">│  ├─auto mybatis-generator.xml自动生成实体包</span>
-<span id="LC28" class="line">│  └─custom 自定义实体</span>
-<span id="LC29" class="line">│</span>
-<span id="LC30" class="line">├─Service 服务层模块[没写抽象模块,因为我觉得没什么用,可能我能力不足]</span>
-<span id="LC31" class="line">│</span>
-<span id="LC32" class="line">├─shiro 权限模块</span>
-<span id="LC33" class="line">│  ├─config shiro配置</span>
-<span id="LC34" class="line">│  ├─service shiro服务层</span>
-<span id="LC35" class="line">│  └─util shiro通用方法</span>
-<span id="LC36" class="line">│</span>
-<span id="LC37" class="line">├─util 工具模块</span>
-<span id="LC38" class="line">│</span>
-<span id="LC39" class="line">├─SpringbootSwagger2Application 启动类</span>
-<span id="LC40" class="line">│ </span>
-<span id="LC41" class="line">├─SpringbootWebInitializer tomcat启动类</span>
-<span id="LC42" class="line">│</span>
-<span id="LC43" class="line">├─test 测试类</span>
-<span id="LC44" class="line">│</span>
-<span id="LC45" class="line">├─resources 配置文件夹</span>
-<span id="LC46" class="line">│  ├─ehcache shiro权限缓存配置</span>
-<span id="LC47" class="line">│  ├─generator 自动生成模板以及配置目录</span>
-<span id="LC48" class="line">│  │   ├─MyBatisGenerator mybates半自动生成工具</span>
-<span id="LC49" class="line">│  │   │   ├─1.bat 执行批处理</span>
-<span id="LC50" class="line">│  │   │   ├─generator.xml generator配置文件</span>
-<span id="LC51" class="line">│  │   │   ├─mybatis-generator-core-1.3.2.jar generator1.3.2版本</span>
-<span id="LC52" class="line">│  │   │   ├─mybatis-generator-core-1.3.7.jar generator1.3.7版本【默认】</span>
-<span id="LC53" class="line">│  │   │   └─mysqldriver.jar mysql驱动【该驱动为8.0一下的版本不支持8.0自行替换】</span>
-<span id="LC54" class="line">│  │   │</span>
-<span id="LC55" class="line">│  │   ├─template 模板文件假</span>
-<span id="LC56" class="line">│  │   │   ├─controller anction模板</span>
-<span id="LC57" class="line">│  │   │   ├─html html页面模板</span>
-<span id="LC58" class="line">│  │   │   ├─mapper dao模板</span>
-<span id="LC59" class="line">│  │   │   ├─mapperxml daoxml模板</span>
-<span id="LC60" class="line">│  │   │   ├─model 实体模板</span>
-<span id="LC61" class="line">│  │   │   ├─service service模板</span>
-<span id="LC62" class="line">│  │   │   └─sql sql模板</span>
-<span id="LC63" class="line">│  │   │</span>
-<span id="LC64" class="line">│  │   └─generator.properties 自动生成配置文件</span>
-<span id="LC65" class="line">│  │</span>
-<span id="LC66" class="line">│  ├─mybatis mybatis Mapper.xml生成文件夹</span>
-<span id="LC67" class="line">│  │   ├─auto自动生成的Mapper.xml文件夹</span>
-<span id="LC68" class="line">│  │   └─custom 手写Mapper.xml文件夹</span>
-<span id="LC69" class="line">│  │</span>
-<span id="LC70" class="line">│  ├─static 静态文件存放文件夹[后台模版就放在此文件夹下面。所有的模版页面都在下面]</span>
-<span id="LC71" class="line">│  │   ├─admin 后台目录存放</span>
-<span id="LC72" class="line">│  │   │  ├─assets js、css存放路径</span>
-<span id="LC73" class="line">│  │   │  ├─assets js、css存放路径</span>
-<span id="LC74" class="line">│  │   │  └─bootstarp 后台模板存放路径</span>
-<span id="LC75" class="line">│  │   ├─js js存放</span>
-<span id="LC76" class="line">│  │   └─login 登录页面js、css、image</span>
-<span id="LC77" class="line">│  │</span>
-<span id="LC78" class="line">│  ├─templates 前台HTML存放文件夹</span>
-<span id="LC79" class="line">│  │   ├─admin 动态后台html模板</span>
-<span id="LC80" class="line">│  │   ├─error 错误页面html模板</span>
-<span id="LC81" class="line">│  │   └─login.html 登录html页面</span>
-<span id="LC82" class="line">│  │</span>
-<span id="LC83" class="line">│  ├─application-dev.yml 开发环境配置</span>
-<span id="LC84" class="line">│  ├─application-prod.yml 生产环境配置</span>
-<span id="LC85" class="line">│  ├─application.yml springboot配置</span>
-<span id="LC86" class="line">│  ├─banner1.txt springboot 启动动画</span>
-<span id="LC87" class="line">│  ├─logback.xml log4j配置文件</span>
-<span id="LC88" class="line">│  └─mybatis-generator.xml mybates自动生成 xml、dao、model</span>
-<span id="LC89" class="line">│  </span>
-<span id="LC90" class="line">└─pom.xml   maven.xml</span>
-<span id="LC91" class="line"></span>
-<span id="LC92" class="line"></span></pre></div></div>                        	
- </div>                       	
 
                         </div>
                     </div>

+ 315 - 0
src/main/resources/templates/admin/permissionvue/add.html

@@ -0,0 +1,315 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" 
+      xmlns:sec="http://www.pollix.at/thymeleaf/shiro">
+<head th:replace="admin/common/html/tableHead :: tableHead(~{::title},~{::link},~{::style})">
+
+<title th:text=${title}></title>
+<!-- 这儿引用单独的css link -->
+<!-- Ladda for Bootstrap 3按钮加载进度插件 -->
+<link rel="stylesheet" th:href="@{/static/admin/assets/js/button/ladda/ladda.min.css}">
+<!-- bootstrap-table表单样式 -->
+<link th:href="@{/static/admin/assets/js/bootstrap/css/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
+<!-- treeview -->
+<link th:href="@{/static/admin/assets/js/bootstrap/bootstrap-treeview/css/bootstrap-treeview.css}" rel="stylesheet"/>
+
+<style type="text/css">
+.content-wrap {
+     padding: 0px;
+}
+body {
+	 color: #9ea7b3;
+    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() no-repeat top center fixed;
+    -moz-background-size: cover;
+    -webkit-background-size: cover;
+    -o-background-size: cover;
+    background-size: cover;
+}
+label.error {
+    position: absolute;
+    right: 18px;
+    top: 5px;
+    color: #ef392b;
+    font-size: 12px;
+}
+
+.ico-list .fa{
+    margin: 5px;
+    padding: 5px;
+    cursor:pointer;
+    font-size: 18px;
+    width: 28px;
+    border-radius: 3px;
+}
+.ico-list .fa:hover {
+    background-color: #1d9d74;
+    color: #ffffff;
+}   
+</style>
+
+</head>
+<body>
+
+<div id="fcapp" class="content-wrap">
+	<div class="row">
+		<div class="col-sm-12">
+			<div class="nest" id="elementClose">
+				<div class="">
+				</div>
+				<div class="body-nest" id="element">
+					<div class="panel-body">
+						<form  class="form-horizontal m" id="form-add">
+							<div class="form-group">
+								<label class="col-sm-3 control-label">类型:</label>
+								<div class="col-sm-8">
+									<label class="radio-inline"><input type="radio" name="type" value="0" v-model="menu.type"> 目录</label> 
+									<label class="radio-inline"><input type="radio" name="type" value="1" v-model="menu.type"> 菜单</label> 
+									<label class="radio-inline"><input type="radio" name="type" value="2" v-model="menu.type"> 按钮</label>
+								</div>
+							</div>
+							<div class="form-group">
+								<label class="col-sm-3 control-label ">权限名称:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="text" id="name" name="name"/>
+								</div>
+							</div>
+							<div  v-if="menu.type == 1 || menu.type == 2" class="form-group">
+								<label class="col-sm-3 control-label ">上级菜单:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="hidden" id="pid" name="pid"/>
+									<input class="form-control" readonly="true" type="text" id="pidName" onclick="selectMenuTree()" />
+								</div>
+							</div>
+							
+							
+							<div  v-if="menu.type == 1 || menu.type == 2" class="form-group">
+								<label class="col-sm-3 control-label ">权限URL:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="text" id="url" name="url"/>
+								</div>
+							</div>
+							<div  v-if="menu.type == 1" class="form-group">
+								<label class="col-sm-3 control-label ">打开方式:</label>
+								<div class="col-sm-8">
+									 <select class="form-control" id="isBlank" name="isBlank"  >
+	                                    <option value="0">签页</option>
+	                                    <option value="1">新窗口</option>
+	                                </select>
+								</div>
+							</div>
+							<div v-if="menu.type == 1 || menu.type == 2" class="form-group">
+								<label class="col-sm-3 control-label ">权限关键字:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="text" id="perms" name="perms" placeholder="多个用逗号分隔,如:user:list,user:create"/>
+								</div>
+							</div>
+							<div v-if="menu.type != 2" class="form-group">
+								<label class="col-sm-3 control-label ">排序:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="number" id="orderNum" name="orderNum"/>
+								</div>
+							</div>
+							<div v-if="menu.type != 2" class="form-group">
+								<label class="col-sm-3 control-label ">图标:</label>
+								<div class="col-sm-8">
+									<input class="form-control" onfocus="showdrop();" type="text" id="icon" name="icon"/>
+									<!-- 
+									<code style="margin-top: 4px; display: block;">获取图标:https://fontawesome.com/v4.7.0/icons/</code>
+									 -->
+									 <div class="ms-parent" style="width: 100%;">
+				                        <div class="icon-drop animated flipInX" style="display: none;max-height:200px;overflow-y:auto">
+				                            <div data-th-include="admin/permission/icon"></div>
+				                        </div>
+				                    </div>
+									
+								</div>
+							</div>
+							<div class="form-group">
+								<label class="col-sm-3 control-label ">权限描述:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="text" id="descripion" name="descripion"/>
+								</div>
+							</div>
+							<div class="form-group">
+								<label class="col-sm-3 control-label ">菜单状态:</label>
+								<div class="col-sm-8">
+									 <select class="form-control" id="visible" name="visible"  >
+	                                    <option value="0">显示</option>
+	                                    <option value="1">隐藏</option>
+	                                </select>
+								</div>
+							</div>
+							<div class="form-group">
+								<div class="form-control-static col-sm-offset-9">
+									<button type="submit" class="btn btn-primary">提交</button>
+									<button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button>
+								</div>
+							</div>
+						</form>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<!-- 通用js -->
+<div th:include="admin/common/html/js :: onload_js">
+   
+</div>
+<!-- bootstarp 表格 -->
+<script th:src="@{/static/admin/assets/js/bootstrap/js/bootstrap-table/bootstrap-table.min.js}" type="text/javascript"></script>
+<script th:src="@{/static/admin/assets/js/bootstrap/js/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}" type="text/javascript"></script>
+<script th:src="@{/static/admin/assets/js/bootstrap/js/base_list.js}" type="text/javascript"></script>
+<!-- 弹窗 -->
+<script th:src="@{/static/admin/assets/js/layer/layer.js}" type="text/javascript"></script>
+<!-- 遮罩层 -->
+<script th:src="@{/static/admin/assets/js/blockUI/jquery.blockUI.js}" type="text/javascript"></script>
+<!--bootstarp threeView -->
+<script th:src="@{/static/admin/assets/js/bootstrap/bootstrap-treeview/js/bootstrap-treeview.js}" type="text/javascript"></script>
+
+
+<script type="text/javascript">
+$(function(){
+	//初始化vue
+	var vm = new Vue({
+		el:"#fcapp",
+	 	data: {
+		    "menu":{
+		    	type:0
+		    }
+		}
+		
+	});
+	//验证方法
+	$("#form-add").validate({
+		rules:{
+			name:{
+				required:true,
+				minlength: 2,
+				maxlength: 20,
+				remote: {
+	                url: rootPath + "/PermissionVueController/checkNameUnique",
+	                type: "post",
+	                dataType: "json",
+	                dataFilter: function(data, type) {
+	                    if (data == "0")
+	                    	return true;
+	                    else 
+	                    	return false;
+	                }
+	            }
+			},
+			url:{
+				required:true,
+				minlength: 1,
+				maxlength: 100,
+				remote: {
+	                url: rootPath + "/PermissionVueController/checkURLUnique",
+	                type: "post",
+	                dataType: "json",
+	                dataFilter: function(data, type) {
+	                	var u=$("#url").val();
+	                    if (data == "0" || u== "#")
+	                    	return true;
+	                    else 
+	                    	return false;
+	                }
+	            }
+			},perms:{
+				required:true,
+				minlength: 1,
+				maxlength: 100,
+				remote: {
+	                url: rootPath + "/PermissionVueController/checkPermsUnique",
+	                type: "post",
+	                dataType: "json",
+	                dataFilter: function(data, type) {
+	                	var u=$("#perms").val();
+	                    if (data == "0" || u== "#")
+	                    	return true;
+	                    else 
+	                    	return false;
+	                }
+	            }
+			}
+			
+		},
+		messages: {
+	        "name": {
+	            remote: "权限名字已经存在"
+	        },
+	        "url": {
+	            remote: "权限地址已经存在"
+	        },
+	        "perms": {
+	            remote: "权限关键字已经存在"
+	        }
+	    },
+		submitHandler:function(form){
+			add();
+		}
+	});
+	
+})
+
+//添加方法
+function add() {
+	var dataFormJson=$("#form-add").serialize();
+	$.ajax({
+		cache : true,
+		type : "POST",
+		url : rootPath + "/PermissionVueController/add",
+		data :dataFormJson,
+		async : false,
+		error : function(request) {
+			$.modal.alertError("系统错误");
+		},
+		success : function(data) {
+			$.operate.saveSuccess(data);
+		}
+	});
+}
+
+
+/*菜单管理-修改-选择菜单树*/
+function selectMenuTree() {
+	var url =  rootPath+ "/PermissionVueController/tree";
+	$.modal.open("选择菜单", url, '380', '380');
+}
+
+
+//显示图标
+function showdrop(){
+     $(".icon-drop").show();
+}
+
+$(function() {
+	
+	$("#form-add").click(function(event) {
+	    var obj = event.srcElement || event.target;
+	    if (!$(obj).is("input[name='icon']")) {
+	    	$(".icon-drop").hide();
+	    }
+	});
+	$(".icon-drop").find(".ico-list i").on("click", function() {
+		$('#icon').val($(this).attr('class'));
+    });
+  
+});
+
+
+
+</script>
+
+
+</body>
+
+
+</html>

+ 331 - 0
src/main/resources/templates/admin/permissionvue/edit.html

@@ -0,0 +1,331 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org"
+>
+<head th:replace="admin/common/html/tableHead :: tableHead(~{::title},~{::link},~{::style})">
+
+	<title th:text=${title}></title>
+	<!-- 这儿引用单独的css link -->
+	<!-- Ladda for Bootstrap 3按钮加载进度插件 -->
+	<link rel="stylesheet" th:href="@{/static/admin/assets/js/button/ladda/ladda.min.css}">
+	<!-- bootstrap-table表单样式 -->
+	<link th:href="@{/static/admin/assets/js/bootstrap/css/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
+
+	<style type="text/css">
+
+		body {
+			color: #9ea7b3;
+			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-image: none;
+			-moz-background-size: cover;
+			-webkit-background-size: cover;
+			-o-background-size: cover;
+			background-size: cover;
+		}
+
+		label.error {
+			position: absolute;
+			right: 18px;
+			top: 5px;
+			color: #ef392b;
+			font-size: 12px;
+		}
+
+		.ico-list .fa {
+			margin: 5px;
+			padding: 5px;
+			cursor: pointer;
+			font-size: 18px;
+			width: 28px;
+			border-radius: 3px;
+		}
+
+		.ico-list .fa:hover {
+			background-color: #1d9d74;
+			color: #ffffff;
+		}
+	</style>
+
+</head>
+
+<body>
+
+<div id="fcapp" class="content-wrap">
+	<div class="row">
+		<div class="col-sm-12">
+			<div class="nest" id="elementClose">
+				<div class="">
+				</div>
+				<div class="body-nest" id="element">
+					<div class="panel-body">
+						<form class="form-horizontal m" id="form-edit" th:object="${TvuePermission}">
+							<input id="id" name="id" type="hidden" th:field="*{id}"/>
+							<div class="form-group">
+								<label class="col-sm-3 control-label">类型:</label>
+								<div class="col-sm-8">
+									<label class="radio-inline"><input type="radio" name="type" value="0" v-model="menu.type"> 目录</label>
+									<label class="radio-inline"><input type="radio" name="type" value="1" v-model="menu.type"> 菜单</label>
+									<label class="radio-inline"><input type="radio" name="type" value="2" v-model="menu.type"> 按钮</label>
+								</div>
+							</div>
+							<div class="form-group">
+								<!-- 验证用 -->
+								<input class="form-control" type="hidden" id="checkname" name="checkname" th:value="*{name}"/>
+								<label class="col-sm-3 control-label ">权限名称:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="text" id="name" name="name" th:value="*{name}"/>
+								</div>
+							</div>
+							<div class="form-group">
+								<label class="col-sm-3 control-label ">上级菜单:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="hidden" id="pid" name="pid" th:value="*{pid}"/>
+									<input class="form-control" readonly="true" type="text" id="pidName" th:value="${pattsysPermission.name}" onclick="selectMenuTree()"/>
+
+								</div>
+							</div>
+							<div v-if="menu.type == 1 || menu.type == 2" class="form-group">
+								<!-- 验证用 -->
+								<input class="form-control" type="hidden" id="checkurl" th:value="*{url}"/>
+								<label class="col-sm-3 control-label ">权限URL:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="text" id="url" name="url" th:value="*{url}"/>
+								</div>
+							</div>
+							<div v-if="menu.type == 1" class="form-group">
+								<label class="col-sm-3 control-label ">打开方式:</label>
+								<div class="col-sm-8">
+									<select class="form-control" id="isBlank" name="isBlank" th:field="*{isBlank}">
+										<option value="0" th:selected="${TvuePermission.isBlank ==0}">签页</option>
+										<option value="1" th:selected="${TvuePermission.isBlank ==1}">新窗口</option>
+									</select>
+								</div>
+							</div>
+							<div v-if="menu.type == 1 || menu.type == 2" class="form-group">
+								<!-- 验证用 -->
+								<input class="form-control" type="hidden" id="checkurl" th:value="*{url}"/>
+								<label class="col-sm-3 control-label ">权限关键字:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="text" id="perms" name="perms" th:value="*{perms}" placeholder="多个用逗号分隔,如:user:list,user:create"/>
+								</div>
+							</div>
+							<div v-if="menu.type != 2" class="form-group">
+								<label class="col-sm-3 control-label ">排序:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="number" id="orderNum" name="orderNum" th:value="*{orderNum}"/>
+								</div>
+							</div>
+							<div v-if="menu.type != 2" class="form-group">
+								<label class="col-sm-3 control-label ">图标:</label>
+								<div class="col-sm-8">
+									<input class="form-control" onfocus="showdrop();" type="text" id="icon" name="icon" th:value="*{icon}"/>
+									<!-- 
+										<code style="margin-top: 4px; display: block;">获取图标:https://fontawesome.com/v4.7.0/icons/</code>
+									 -->
+									<div class="ms-parent" style="width: 100%;">
+										<div class="icon-drop animated flipInX" style="display: none;max-height:200px;overflow-y:auto">
+											<div data-th-include="admin/permission/icon"></div>
+										</div>
+									</div>
+								</div>
+							</div>
+							<div class="form-group">
+								<label class="col-sm-3 control-label ">权限描述:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="text" id="descripion" name="descripion" th:value="*{descripion}"/>
+								</div>
+							</div>
+							<div class="form-group">
+								<label class="col-sm-3 control-label ">菜单状态:</label>
+								<div class="col-sm-8">
+									<select class="form-control" id="visible" name="visible" th:field="*{visible}">
+										<option value="0">显示</option>
+										<option value="1">隐藏</option>
+									</select>
+								</div>
+							</div>
+							<div class="form-group">
+								<div class="form-control-static col-sm-offset-9">
+									<button type="submit" class="btn btn-primary">提交</button>
+									<button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button>
+								</div>
+							</div>
+						</form>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<!-- 通用js -->
+<div th:include="admin/common/html/js :: onload_js">
+
+</div>
+<!-- bootstarp 表格 -->
+<script th:src="@{/static/admin/assets/js/bootstrap/js/bootstrap-table/bootstrap-table.min.js}" type="text/javascript"></script>
+<script th:src="@{/static/admin/assets/js/bootstrap/js/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}" type="text/javascript"></script>
+<script th:src="@{/static/admin/assets/js/bootstrap/js/base_list.js}" type="text/javascript"></script>
+
+
+<!-- 弹窗 -->
+<script th:src="@{/static/admin/assets/js/layer/layer.js}" type="text/javascript"></script>
+<!-- 遮罩层 -->
+<script th:src="@{/static/admin/assets/js/blockUI/jquery.blockUI.js}" type="text/javascript"></script>
+
+
+<script type="text/javascript">
+	$(function () {
+		var vm = new Vue({
+			el: "#fcapp",
+			data: {
+				"menu": {
+					type: [[${TvuePermission.type}]]
+				}
+			}
+
+		});
+
+		//表单验证
+		$("#form-edit").validate({
+			rules: {
+				name: {
+					required: true,
+					minlength: 2,
+					maxlength: 20,
+					remote: {
+						url: rootPath + "/PermissionVueController/checkNameUnique",
+						type: "post",
+						dataType: "json",
+						dataFilter: function (data, type) {
+							if ($("#checkname").val() == $("#name").val()) {
+								return true;
+							} else {
+								if (data == "0") {
+									return true;
+								} else {
+									return false;
+								}
+							}
+
+						}
+					}
+				},
+				url: {
+					required: true,
+					minlength: 1,
+					maxlength: 100,
+					remote: {
+						url: rootPath + "/PermissionVueController/checkURLUnique",
+						type: "post",
+						dataType: "json",
+						dataFilter: function (data, type) {
+							var u = $("#url").val();
+							if ($("#checkurl").val() == $("#url").val()) {
+								return true;
+							} else {
+								if (data == "0" || u == "#") {
+									return true;
+								} else {
+									return false;
+								}
+							}
+						}
+					}
+				},
+				perms: {
+					required: true,
+					minlength: 1,
+					maxlength: 100,
+					remote: {
+						url: rootPath + "/PermissionVueController/checkPermsUnique",
+						type: "post",
+						dataType: "json",
+						dataFilter: function (data, type) {
+							var u = $("#url").val();
+							if ($("#perms").val() == $("#perms").val()) {
+								return true;
+							} else {
+								if (data == "0" || u == "#") {
+									return true;
+								} else {
+									return false;
+								}
+							}
+						}
+					}
+				}
+
+			},
+			messages: {
+				"name": {
+					remote: "权限名字已经存在"
+				},
+				"url": {
+					remote: "权限地址已经存在"
+				},
+				"perms": {
+					remote: "权限关键字已经存在"
+				}
+			},
+			submitHandler: function (form) {
+				edit();
+			}
+		});
+
+	});
+
+	//提交修改方法
+	function edit() {
+		var dataFormJson = $("#form-edit").serialize();
+		$.ajax({
+			cache: true,
+			type: "POST",
+			url: rootPath + "/PermissionVueController/edit",
+			data: dataFormJson,
+			async: false,
+			error: function (request) {
+				$.modal.alertError("系统错误");
+			},
+			success: function (data) {
+				$.operate.saveSuccess(data);
+			}
+		});
+	}
+
+	/*菜单管理-修改-选择菜单树*/
+	function selectMenuTree() {
+		var url = rootPath + "/PermissionVueController/tree";
+		$.modal.open("选择菜单", url, '380', '380');
+	}
+
+	//显示图标
+	function showdrop() {
+		$(".icon-drop").show();
+	}
+
+	$(function () {
+
+		$("#form-edit").click(function (event) {
+			var obj = event.srcElement || event.target;
+			if (!$(obj).is("input[name='icon']")) {
+				$(".icon-drop").hide();
+			}
+		});
+		$(".icon-drop").find(".ico-list i").on("click", function () {
+			$('#icon').val($(this).attr('class'));
+		});
+
+	});
+</script>
+
+
+</body>
+
+
+</html>

+ 796 - 0
src/main/resources/templates/admin/permissionvue/icon.html

@@ -0,0 +1,796 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+    <title>Font Awesome Ico list</title>
+</head>
+<body>
+<div class="ico-list">
+<i class="fa fa-500px" aria-hidden="true"></i>
+<i class="fa fa-address-book" aria-hidden="true"></i>
+<i class="fa fa-address-book-o" aria-hidden="true"></i>
+<i class="fa fa-address-card" aria-hidden="true"></i>
+<i class="fa fa-address-card-o" aria-hidden="true"></i>
+<i class="fa fa-adjust" aria-hidden="true"></i>
+<i class="fa fa-adn" aria-hidden="true"></i>
+<i class="fa fa-align-center" aria-hidden="true"></i>
+<i class="fa fa-align-justify" aria-hidden="true"></i>
+<i class="fa fa-align-left" aria-hidden="true"></i>
+<i class="fa fa-align-right" aria-hidden="true"></i>
+<i class="fa fa-amazon" aria-hidden="true"></i>
+<i class="fa fa-ambulance" aria-hidden="true"></i>
+<i class="fa fa-american-sign-language-interpreting" aria-hidden="true"></i>
+<i class="fa fa-anchor" aria-hidden="true"></i>
+<i class="fa fa-android" aria-hidden="true"></i>
+<i class="fa fa-angellist" aria-hidden="true"></i>
+<i class="fa fa-angle-double-down" aria-hidden="true"></i>
+<i class="fa fa-angle-double-left" aria-hidden="true"></i>
+<i class="fa fa-angle-double-right" aria-hidden="true"></i>
+<i class="fa fa-angle-double-up" aria-hidden="true"></i>
+<i class="fa fa-angle-down" aria-hidden="true"></i>
+<i class="fa fa-angle-left" aria-hidden="true"></i>
+<i class="fa fa-angle-right" aria-hidden="true"></i>
+<i class="fa fa-angle-up" aria-hidden="true"></i>
+<i class="fa fa-apple" aria-hidden="true"></i>
+<i class="fa fa-archive" aria-hidden="true"></i>
+<i class="fa fa-area-chart" aria-hidden="true"></i>
+<i class="fa fa-arrow-circle-down" aria-hidden="true"></i>
+<i class="fa fa-arrow-circle-left" aria-hidden="true"></i>
+<i class="fa fa-arrow-circle-o-down" aria-hidden="true"></i>
+<i class="fa fa-arrow-circle-o-left" aria-hidden="true"></i>
+<i class="fa fa-arrow-circle-o-right" aria-hidden="true"></i>
+<i class="fa fa-arrow-circle-o-up" aria-hidden="true"></i>
+<i class="fa fa-arrow-circle-right" aria-hidden="true"></i>
+<i class="fa fa-arrow-circle-up" aria-hidden="true"></i>
+<i class="fa fa-arrow-down" aria-hidden="true"></i>
+<i class="fa fa-arrow-left" aria-hidden="true"></i>
+<i class="fa fa-arrow-right" aria-hidden="true"></i>
+<i class="fa fa-arrow-up" aria-hidden="true"></i>
+<i class="fa fa-arrows" aria-hidden="true"></i>
+<i class="fa fa-arrows-alt" aria-hidden="true"></i>
+<i class="fa fa-arrows-h" aria-hidden="true"></i>
+<i class="fa fa-arrows-v" aria-hidden="true"></i>
+<i class="fa fa-asl-interpreting" aria-hidden="true"></i>
+<i class="fa fa-assistive-listening-systems" aria-hidden="true"></i>
+<i class="fa fa-asterisk" aria-hidden="true"></i>
+<i class="fa fa-at" aria-hidden="true"></i>
+<i class="fa fa-audio-description" aria-hidden="true"></i>
+<i class="fa fa-automobile" aria-hidden="true"></i>
+<i class="fa fa-backward" aria-hidden="true"></i>
+<i class="fa fa-balance-scale" aria-hidden="true"></i>
+<i class="fa fa-ban" aria-hidden="true"></i>
+<i class="fa fa-bandcamp" aria-hidden="true"></i>
+<i class="fa fa-bank" aria-hidden="true"></i>
+<i class="fa fa-bar-chart" aria-hidden="true"></i>
+<i class="fa fa-bar-chart-o" aria-hidden="true"></i>
+<i class="fa fa-barcode" aria-hidden="true"></i>
+<i class="fa fa-bars" aria-hidden="true"></i>
+<i class="fa fa-bath" aria-hidden="true"></i>
+<i class="fa fa-bathtub" aria-hidden="true"></i>
+<i class="fa fa-battery" aria-hidden="true"></i>
+<i class="fa fa-battery-0" aria-hidden="true"></i>
+<i class="fa fa-battery-1" aria-hidden="true"></i>
+<i class="fa fa-battery-2" aria-hidden="true"></i>
+<i class="fa fa-battery-3" aria-hidden="true"></i>
+<i class="fa fa-battery-4" aria-hidden="true"></i>
+<i class="fa fa-battery-empty" aria-hidden="true"></i>
+<i class="fa fa-battery-full" aria-hidden="true"></i>
+<i class="fa fa-battery-half" aria-hidden="true"></i>
+<i class="fa fa-battery-quarter" aria-hidden="true"></i>
+<i class="fa fa-battery-three-quarters" aria-hidden="true"></i>
+<i class="fa fa-bed" aria-hidden="true"></i>
+<i class="fa fa-beer" aria-hidden="true"></i>
+<i class="fa fa-behance" aria-hidden="true"></i>
+<i class="fa fa-behance-square" aria-hidden="true"></i>
+<i class="fa fa-bell" aria-hidden="true"></i>
+<i class="fa fa-bell-o" aria-hidden="true"></i>
+<i class="fa fa-bell-slash" aria-hidden="true"></i>
+<i class="fa fa-bell-slash-o" aria-hidden="true"></i>
+<i class="fa fa-bicycle" aria-hidden="true"></i>
+<i class="fa fa-binoculars" aria-hidden="true"></i>
+<i class="fa fa-birthday-cake" aria-hidden="true"></i>
+<i class="fa fa-bitbucket" aria-hidden="true"></i>
+<i class="fa fa-bitbucket-square" aria-hidden="true"></i>
+<i class="fa fa-bitcoin" aria-hidden="true"></i>
+<i class="fa fa-black-tie" aria-hidden="true"></i>
+<i class="fa fa-blind" aria-hidden="true"></i>
+<i class="fa fa-bluetooth" aria-hidden="true"></i>
+<i class="fa fa-bluetooth-b" aria-hidden="true"></i>
+<i class="fa fa-bold" aria-hidden="true"></i>
+<i class="fa fa-bolt" aria-hidden="true"></i>
+<i class="fa fa-bomb" aria-hidden="true"></i>
+<i class="fa fa-book" aria-hidden="true"></i>
+<i class="fa fa-bookmark" aria-hidden="true"></i>
+<i class="fa fa-bookmark-o" aria-hidden="true"></i>
+<i class="fa fa-braille" aria-hidden="true"></i>
+<i class="fa fa-briefcase" aria-hidden="true"></i>
+<i class="fa fa-btc" aria-hidden="true"></i>
+<i class="fa fa-bug" aria-hidden="true"></i>
+<i class="fa fa-building" aria-hidden="true"></i>
+<i class="fa fa-building-o" aria-hidden="true"></i>
+<i class="fa fa-bullhorn" aria-hidden="true"></i>
+<i class="fa fa-bullseye" aria-hidden="true"></i>
+<i class="fa fa-bus" aria-hidden="true"></i>
+<i class="fa fa-buysellads" aria-hidden="true"></i>
+<i class="fa fa-cab" aria-hidden="true"></i>
+<i class="fa fa-calculator" aria-hidden="true"></i>
+<i class="fa fa-calendar" aria-hidden="true"></i>
+<i class="fa fa-calendar-check-o" aria-hidden="true"></i>
+<i class="fa fa-calendar-minus-o" aria-hidden="true"></i>
+<i class="fa fa-calendar-o" aria-hidden="true"></i>
+<i class="fa fa-calendar-plus-o" aria-hidden="true"></i>
+<i class="fa fa-calendar-times-o" aria-hidden="true"></i>
+<i class="fa fa-camera" aria-hidden="true"></i>
+<i class="fa fa-camera-retro" aria-hidden="true"></i>
+<i class="fa fa-car" aria-hidden="true"></i>
+<i class="fa fa-caret-down" aria-hidden="true"></i>
+<i class="fa fa-caret-left" aria-hidden="true"></i>
+<i class="fa fa-caret-right" aria-hidden="true"></i>
+<i class="fa fa-caret-square-o-down" aria-hidden="true"></i>
+<i class="fa fa-caret-square-o-left" aria-hidden="true"></i>
+<i class="fa fa-caret-square-o-right" aria-hidden="true"></i>
+<i class="fa fa-caret-square-o-up" aria-hidden="true"></i>
+<i class="fa fa-caret-up" aria-hidden="true"></i>
+<i class="fa fa-cart-arrow-down" aria-hidden="true"></i>
+<i class="fa fa-cart-plus" aria-hidden="true"></i>
+<i class="fa fa-cc" aria-hidden="true"></i>
+<i class="fa fa-cc-amex" aria-hidden="true"></i>
+<i class="fa fa-cc-diners-club" aria-hidden="true"></i>
+<i class="fa fa-cc-discover" aria-hidden="true"></i>
+<i class="fa fa-cc-jcb" aria-hidden="true"></i>
+<i class="fa fa-cc-mastercard" aria-hidden="true"></i>
+<i class="fa fa-cc-paypal" aria-hidden="true"></i>
+<i class="fa fa-cc-stripe" aria-hidden="true"></i>
+<i class="fa fa-cc-visa" aria-hidden="true"></i>
+<i class="fa fa-certificate" aria-hidden="true"></i>
+<i class="fa fa-chain" aria-hidden="true"></i>
+<i class="fa fa-chain-broken" aria-hidden="true"></i>
+<i class="fa fa-check" aria-hidden="true"></i>
+<i class="fa fa-check-circle" aria-hidden="true"></i>
+<i class="fa fa-check-circle-o" aria-hidden="true"></i>
+<i class="fa fa-check-square" aria-hidden="true"></i>
+<i class="fa fa-check-square-o" aria-hidden="true"></i>
+<i class="fa fa-chevron-circle-down" aria-hidden="true"></i>
+<i class="fa fa-chevron-circle-left" aria-hidden="true"></i>
+<i class="fa fa-chevron-circle-right" aria-hidden="true"></i>
+<i class="fa fa-chevron-circle-up" aria-hidden="true"></i>
+<i class="fa fa-chevron-down" aria-hidden="true"></i>
+<i class="fa fa-chevron-left" aria-hidden="true"></i>
+<i class="fa fa-chevron-right" aria-hidden="true"></i>
+<i class="fa fa-chevron-up" aria-hidden="true"></i>
+<i class="fa fa-child" aria-hidden="true"></i>
+<i class="fa fa-chrome" aria-hidden="true"></i>
+<i class="fa fa-circle" aria-hidden="true"></i>
+<i class="fa fa-circle-o" aria-hidden="true"></i>
+<i class="fa fa-circle-o-notch" aria-hidden="true"></i>
+<i class="fa fa-circle-thin" aria-hidden="true"></i>
+<i class="fa fa-clipboard" aria-hidden="true"></i>
+<i class="fa fa-clock-o" aria-hidden="true"></i>
+<i class="fa fa-clone" aria-hidden="true"></i>
+<i class="fa fa-close" aria-hidden="true"></i>
+<i class="fa fa-cloud" aria-hidden="true"></i>
+<i class="fa fa-cloud-download" aria-hidden="true"></i>
+<i class="fa fa-cloud-upload" aria-hidden="true"></i>
+<i class="fa fa-cny" aria-hidden="true"></i>
+<i class="fa fa-code" aria-hidden="true"></i>
+<i class="fa fa-code-fork" aria-hidden="true"></i>
+<i class="fa fa-codepen" aria-hidden="true"></i>
+<i class="fa fa-codiepie" aria-hidden="true"></i>
+<i class="fa fa-coffee" aria-hidden="true"></i>
+<i class="fa fa-cog" aria-hidden="true"></i>
+<i class="fa fa-cogs" aria-hidden="true"></i>
+<i class="fa fa-columns" aria-hidden="true"></i>
+<i class="fa fa-comment" aria-hidden="true"></i>
+<i class="fa fa-comment-o" aria-hidden="true"></i>
+<i class="fa fa-commenting" aria-hidden="true"></i>
+<i class="fa fa-commenting-o" aria-hidden="true"></i>
+<i class="fa fa-comments" aria-hidden="true"></i>
+<i class="fa fa-comments-o" aria-hidden="true"></i>
+<i class="fa fa-compass" aria-hidden="true"></i>
+<i class="fa fa-compress" aria-hidden="true"></i>
+<i class="fa fa-connectdevelop" aria-hidden="true"></i>
+<i class="fa fa-contao" aria-hidden="true"></i>
+<i class="fa fa-copy" aria-hidden="true"></i>
+<i class="fa fa-copyright" aria-hidden="true"></i>
+<i class="fa fa-creative-commons" aria-hidden="true"></i>
+<i class="fa fa-credit-card" aria-hidden="true"></i>
+<i class="fa fa-credit-card-alt" aria-hidden="true"></i>
+<i class="fa fa-crop" aria-hidden="true"></i>
+<i class="fa fa-crosshairs" aria-hidden="true"></i>
+<i class="fa fa-css3" aria-hidden="true"></i>
+<i class="fa fa-cube" aria-hidden="true"></i>
+<i class="fa fa-cubes" aria-hidden="true"></i>
+<i class="fa fa-cut" aria-hidden="true"></i>
+<i class="fa fa-cutlery" aria-hidden="true"></i>
+<i class="fa fa-dashboard" aria-hidden="true"></i>
+<i class="fa fa-dashcube" aria-hidden="true"></i>
+<i class="fa fa-database" aria-hidden="true"></i>
+<i class="fa fa-deaf" aria-hidden="true"></i>
+<i class="fa fa-deafness" aria-hidden="true"></i>
+<i class="fa fa-dedent" aria-hidden="true"></i>
+<i class="fa fa-delicious" aria-hidden="true"></i>
+<i class="fa fa-desktop" aria-hidden="true"></i>
+<i class="fa fa-deviantart" aria-hidden="true"></i>
+<i class="fa fa-diamond" aria-hidden="true"></i>
+<i class="fa fa-digg" aria-hidden="true"></i>
+<i class="fa fa-dollar" aria-hidden="true"></i>
+<i class="fa fa-dot-circle-o" aria-hidden="true"></i>
+<i class="fa fa-download" aria-hidden="true"></i>
+<i class="fa fa-dribbble" aria-hidden="true"></i>
+<i class="fa fa-drivers-license" aria-hidden="true"></i>
+<i class="fa fa-drivers-license-o" aria-hidden="true"></i>
+<i class="fa fa-dropbox" aria-hidden="true"></i>
+<i class="fa fa-drupal" aria-hidden="true"></i>
+<i class="fa fa-edge" aria-hidden="true"></i>
+<i class="fa fa-edit" aria-hidden="true"></i>
+<i class="fa fa-eercast" aria-hidden="true"></i>
+<i class="fa fa-eject" aria-hidden="true"></i>
+<i class="fa fa-ellipsis-h" aria-hidden="true"></i>
+<i class="fa fa-ellipsis-v" aria-hidden="true"></i>
+<i class="fa fa-empire" aria-hidden="true"></i>
+<i class="fa fa-envelope" aria-hidden="true"></i>
+<i class="fa fa-envelope-o" aria-hidden="true"></i>
+<i class="fa fa-envelope-open" aria-hidden="true"></i>
+<i class="fa fa-envelope-open-o" aria-hidden="true"></i>
+<i class="fa fa-envelope-square" aria-hidden="true"></i>
+<i class="fa fa-envira" aria-hidden="true"></i>
+<i class="fa fa-eraser" aria-hidden="true"></i>
+<i class="fa fa-etsy" aria-hidden="true"></i>
+<i class="fa fa-eur" aria-hidden="true"></i>
+<i class="fa fa-euro" aria-hidden="true"></i>
+<i class="fa fa-exchange" aria-hidden="true"></i>
+<i class="fa fa-exclamation" aria-hidden="true"></i>
+<i class="fa fa-exclamation-circle" aria-hidden="true"></i>
+<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
+<i class="fa fa-expand" aria-hidden="true"></i>
+<i class="fa fa-expeditedssl" aria-hidden="true"></i>
+<i class="fa fa-external-link" aria-hidden="true"></i>
+<i class="fa fa-external-link-square" aria-hidden="true"></i>
+<i class="fa fa-eye" aria-hidden="true"></i>
+<i class="fa fa-eye-slash" aria-hidden="true"></i>
+<i class="fa fa-eyedropper" aria-hidden="true"></i>
+<i class="fa fa-fa" aria-hidden="true"></i>
+<i class="fa fa-facebook" aria-hidden="true"></i>
+<i class="fa fa-facebook-f" aria-hidden="true"></i>
+<i class="fa fa-facebook-official" aria-hidden="true"></i>
+<i class="fa fa-facebook-square" aria-hidden="true"></i>
+<i class="fa fa-fast-backward" aria-hidden="true"></i>
+<i class="fa fa-fast-forward" aria-hidden="true"></i>
+<i class="fa fa-fax" aria-hidden="true"></i>
+<i class="fa fa-feed" aria-hidden="true"></i>
+<i class="fa fa-female" aria-hidden="true"></i>
+<i class="fa fa-fighter-jet" aria-hidden="true"></i>
+<i class="fa fa-file" aria-hidden="true"></i>
+<i class="fa fa-file-archive-o" aria-hidden="true"></i>
+<i class="fa fa-file-audio-o" aria-hidden="true"></i>
+<i class="fa fa-file-code-o" aria-hidden="true"></i>
+<i class="fa fa-file-excel-o" aria-hidden="true"></i>
+<i class="fa fa-file-image-o" aria-hidden="true"></i>
+<i class="fa fa-file-movie-o" aria-hidden="true"></i>
+<i class="fa fa-file-o" aria-hidden="true"></i>
+<i class="fa fa-file-pdf-o" aria-hidden="true"></i>
+<i class="fa fa-file-photo-o" aria-hidden="true"></i>
+<i class="fa fa-file-picture-o" aria-hidden="true"></i>
+<i class="fa fa-file-powerpoint-o" aria-hidden="true"></i>
+<i class="fa fa-file-sound-o" aria-hidden="true"></i>
+<i class="fa fa-file-text" aria-hidden="true"></i>
+<i class="fa fa-file-text-o" aria-hidden="true"></i>
+<i class="fa fa-file-video-o" aria-hidden="true"></i>
+<i class="fa fa-file-word-o" aria-hidden="true"></i>
+<i class="fa fa-file-zip-o" aria-hidden="true"></i>
+<i class="fa fa-files-o" aria-hidden="true"></i>
+<i class="fa fa-film" aria-hidden="true"></i>
+<i class="fa fa-filter" aria-hidden="true"></i>
+<i class="fa fa-fire" aria-hidden="true"></i>
+<i class="fa fa-fire-extinguisher" aria-hidden="true"></i>
+<i class="fa fa-firefox" aria-hidden="true"></i>
+<i class="fa fa-first-order" aria-hidden="true"></i>
+<i class="fa fa-flag" aria-hidden="true"></i>
+<i class="fa fa-flag-checkered" aria-hidden="true"></i>
+<i class="fa fa-flag-o" aria-hidden="true"></i>
+<i class="fa fa-flash" aria-hidden="true"></i>
+<i class="fa fa-flask" aria-hidden="true"></i>
+<i class="fa fa-flickr" aria-hidden="true"></i>
+<i class="fa fa-floppy-o" aria-hidden="true"></i>
+<i class="fa fa-folder" aria-hidden="true"></i>
+<i class="fa fa-folder-o" aria-hidden="true"></i>
+<i class="fa fa-folder-open" aria-hidden="true"></i>
+<i class="fa fa-folder-open-o" aria-hidden="true"></i>
+<i class="fa fa-font" aria-hidden="true"></i>
+<i class="fa fa-font-awesome" aria-hidden="true"></i>
+<i class="fa fa-fonticons" aria-hidden="true"></i>
+<i class="fa fa-fort-awesome" aria-hidden="true"></i>
+<i class="fa fa-forumbee" aria-hidden="true"></i>
+<i class="fa fa-forward" aria-hidden="true"></i>
+<i class="fa fa-foursquare" aria-hidden="true"></i>
+<i class="fa fa-free-code-camp" aria-hidden="true"></i>
+<i class="fa fa-frown-o" aria-hidden="true"></i>
+<i class="fa fa-futbol-o" aria-hidden="true"></i>
+<i class="fa fa-gamepad" aria-hidden="true"></i>
+<i class="fa fa-gavel" aria-hidden="true"></i>
+<i class="fa fa-gbp" aria-hidden="true"></i>
+<i class="fa fa-ge" aria-hidden="true"></i>
+<i class="fa fa-gear" aria-hidden="true"></i>
+<i class="fa fa-gears" aria-hidden="true"></i>
+<i class="fa fa-genderless" aria-hidden="true"></i>
+<i class="fa fa-get-pocket" aria-hidden="true"></i>
+<i class="fa fa-gg" aria-hidden="true"></i>
+<i class="fa fa-gg-circle" aria-hidden="true"></i>
+<i class="fa fa-gift" aria-hidden="true"></i>
+<i class="fa fa-git" aria-hidden="true"></i>
+<i class="fa fa-git-square" aria-hidden="true"></i>
+<i class="fa fa-github" aria-hidden="true"></i>
+<i class="fa fa-github-alt" aria-hidden="true"></i>
+<i class="fa fa-github-square" aria-hidden="true"></i>
+<i class="fa fa-gitlab" aria-hidden="true"></i>
+<i class="fa fa-gittip" aria-hidden="true"></i>
+<i class="fa fa-glass" aria-hidden="true"></i>
+<i class="fa fa-glide" aria-hidden="true"></i>
+<i class="fa fa-glide-g" aria-hidden="true"></i>
+<i class="fa fa-globe" aria-hidden="true"></i>
+<i class="fa fa-google" aria-hidden="true"></i>
+<i class="fa fa-google-plus" aria-hidden="true"></i>
+<i class="fa fa-google-plus-circle" aria-hidden="true"></i>
+<i class="fa fa-google-plus-official" aria-hidden="true"></i>
+<i class="fa fa-google-plus-square" aria-hidden="true"></i>
+<i class="fa fa-google-wallet" aria-hidden="true"></i>
+<i class="fa fa-graduation-cap" aria-hidden="true"></i>
+<i class="fa fa-gratipay" aria-hidden="true"></i>
+<i class="fa fa-grav" aria-hidden="true"></i>
+<i class="fa fa-group" aria-hidden="true"></i>
+<i class="fa fa-h-square" aria-hidden="true"></i>
+<i class="fa fa-hacker-news" aria-hidden="true"></i>
+<i class="fa fa-hand-grab-o" aria-hidden="true"></i>
+<i class="fa fa-hand-lizard-o" aria-hidden="true"></i>
+<i class="fa fa-hand-o-down" aria-hidden="true"></i>
+<i class="fa fa-hand-o-left" aria-hidden="true"></i>
+<i class="fa fa-hand-o-right" aria-hidden="true"></i>
+<i class="fa fa-hand-o-up" aria-hidden="true"></i>
+<i class="fa fa-hand-paper-o" aria-hidden="true"></i>
+<i class="fa fa-hand-peace-o" aria-hidden="true"></i>
+<i class="fa fa-hand-pointer-o" aria-hidden="true"></i>
+<i class="fa fa-hand-rock-o" aria-hidden="true"></i>
+<i class="fa fa-hand-scissors-o" aria-hidden="true"></i>
+<i class="fa fa-hand-spock-o" aria-hidden="true"></i>
+<i class="fa fa-hand-stop-o" aria-hidden="true"></i>
+<i class="fa fa-handshake-o" aria-hidden="true"></i>
+<i class="fa fa-hard-of-hearing" aria-hidden="true"></i>
+<i class="fa fa-hashtag" aria-hidden="true"></i>
+<i class="fa fa-hdd-o" aria-hidden="true"></i>
+<i class="fa fa-header" aria-hidden="true"></i>
+<i class="fa fa-headphones" aria-hidden="true"></i>
+<i class="fa fa-heart" aria-hidden="true"></i>
+<i class="fa fa-heart-o" aria-hidden="true"></i>
+<i class="fa fa-heartbeat" aria-hidden="true"></i>
+<i class="fa fa-history" aria-hidden="true"></i>
+<i class="fa fa-home" aria-hidden="true"></i>
+<i class="fa fa-hospital-o" aria-hidden="true"></i>
+<i class="fa fa-hotel" aria-hidden="true"></i>
+<i class="fa fa-hourglass" aria-hidden="true"></i>
+<i class="fa fa-hourglass-1" aria-hidden="true"></i>
+<i class="fa fa-hourglass-2" aria-hidden="true"></i>
+<i class="fa fa-hourglass-3" aria-hidden="true"></i>
+<i class="fa fa-hourglass-end" aria-hidden="true"></i>
+<i class="fa fa-hourglass-half" aria-hidden="true"></i>
+<i class="fa fa-hourglass-o" aria-hidden="true"></i>
+<i class="fa fa-hourglass-start" aria-hidden="true"></i>
+<i class="fa fa-houzz" aria-hidden="true"></i>
+<i class="fa fa-html5" aria-hidden="true"></i>
+<i class="fa fa-i-cursor" aria-hidden="true"></i>
+<i class="fa fa-id-badge" aria-hidden="true"></i>
+<i class="fa fa-id-card" aria-hidden="true"></i>
+<i class="fa fa-id-card-o" aria-hidden="true"></i>
+<i class="fa fa-ils" aria-hidden="true"></i>
+<i class="fa fa-image" aria-hidden="true"></i>
+<i class="fa fa-imdb" aria-hidden="true"></i>
+<i class="fa fa-inbox" aria-hidden="true"></i>
+<i class="fa fa-indent" aria-hidden="true"></i>
+<i class="fa fa-industry" aria-hidden="true"></i>
+<i class="fa fa-info" aria-hidden="true"></i>
+<i class="fa fa-info-circle" aria-hidden="true"></i>
+<i class="fa fa-inr" aria-hidden="true"></i>
+<i class="fa fa-instagram" aria-hidden="true"></i>
+<i class="fa fa-institution" aria-hidden="true"></i>
+<i class="fa fa-internet-explorer" aria-hidden="true"></i>
+<i class="fa fa-intersex" aria-hidden="true"></i>
+<i class="fa fa-ioxhost" aria-hidden="true"></i>
+<i class="fa fa-italic" aria-hidden="true"></i>
+<i class="fa fa-joomla" aria-hidden="true"></i>
+<i class="fa fa-jpy" aria-hidden="true"></i>
+<i class="fa fa-jsfiddle" aria-hidden="true"></i>
+<i class="fa fa-key" aria-hidden="true"></i>
+<i class="fa fa-keyboard-o" aria-hidden="true"></i>
+<i class="fa fa-krw" aria-hidden="true"></i>
+<i class="fa fa-language" aria-hidden="true"></i>
+<i class="fa fa-laptop" aria-hidden="true"></i>
+<i class="fa fa-lastfm" aria-hidden="true"></i>
+<i class="fa fa-lastfm-square" aria-hidden="true"></i>
+<i class="fa fa-leaf" aria-hidden="true"></i>
+<i class="fa fa-leanpub" aria-hidden="true"></i>
+<i class="fa fa-legal" aria-hidden="true"></i>
+<i class="fa fa-lemon-o" aria-hidden="true"></i>
+<i class="fa fa-level-down" aria-hidden="true"></i>
+<i class="fa fa-level-up" aria-hidden="true"></i>
+<i class="fa fa-life-bouy" aria-hidden="true"></i>
+<i class="fa fa-life-buoy" aria-hidden="true"></i>
+<i class="fa fa-life-ring" aria-hidden="true"></i>
+<i class="fa fa-life-saver" aria-hidden="true"></i>
+<i class="fa fa-lightbulb-o" aria-hidden="true"></i>
+<i class="fa fa-line-chart" aria-hidden="true"></i>
+<i class="fa fa-link" aria-hidden="true"></i>
+<i class="fa fa-linkedin" aria-hidden="true"></i>
+<i class="fa fa-linkedin-square" aria-hidden="true"></i>
+<i class="fa fa-linode" aria-hidden="true"></i>
+<i class="fa fa-linux" aria-hidden="true"></i>
+<i class="fa fa-list" aria-hidden="true"></i>
+<i class="fa fa-list-alt" aria-hidden="true"></i>
+<i class="fa fa-list-ol" aria-hidden="true"></i>
+<i class="fa fa-list-ul" aria-hidden="true"></i>
+<i class="fa fa-location-arrow" aria-hidden="true"></i>
+<i class="fa fa-lock" aria-hidden="true"></i>
+<i class="fa fa-long-arrow-down" aria-hidden="true"></i>
+<i class="fa fa-long-arrow-left" aria-hidden="true"></i>
+<i class="fa fa-long-arrow-right" aria-hidden="true"></i>
+<i class="fa fa-long-arrow-up" aria-hidden="true"></i>
+<i class="fa fa-low-vision" aria-hidden="true"></i>
+<i class="fa fa-magic" aria-hidden="true"></i>
+<i class="fa fa-magnet" aria-hidden="true"></i>
+<i class="fa fa-mail-forward" aria-hidden="true"></i>
+<i class="fa fa-mail-reply" aria-hidden="true"></i>
+<i class="fa fa-mail-reply-all" aria-hidden="true"></i>
+<i class="fa fa-male" aria-hidden="true"></i>
+<i class="fa fa-map" aria-hidden="true"></i>
+<i class="fa fa-map-marker" aria-hidden="true"></i>
+<i class="fa fa-map-o" aria-hidden="true"></i>
+<i class="fa fa-map-pin" aria-hidden="true"></i>
+<i class="fa fa-map-signs" aria-hidden="true"></i>
+<i class="fa fa-mars" aria-hidden="true"></i>
+<i class="fa fa-mars-double" aria-hidden="true"></i>
+<i class="fa fa-mars-stroke" aria-hidden="true"></i>
+<i class="fa fa-mars-stroke-h" aria-hidden="true"></i>
+<i class="fa fa-mars-stroke-v" aria-hidden="true"></i>
+<i class="fa fa-maxcdn" aria-hidden="true"></i>
+<i class="fa fa-meanpath" aria-hidden="true"></i>
+<i class="fa fa-medium" aria-hidden="true"></i>
+<i class="fa fa-medkit" aria-hidden="true"></i>
+<i class="fa fa-meetup" aria-hidden="true"></i>
+<i class="fa fa-meh-o" aria-hidden="true"></i>
+<i class="fa fa-mercury" aria-hidden="true"></i>
+<i class="fa fa-microchip" aria-hidden="true"></i>
+<i class="fa fa-microphone" aria-hidden="true"></i>
+<i class="fa fa-microphone-slash" aria-hidden="true"></i>
+<i class="fa fa-minus" aria-hidden="true"></i>
+<i class="fa fa-minus-circle" aria-hidden="true"></i>
+<i class="fa fa-minus-square" aria-hidden="true"></i>
+<i class="fa fa-minus-square-o" aria-hidden="true"></i>
+<i class="fa fa-mixcloud" aria-hidden="true"></i>
+<i class="fa fa-mobile" aria-hidden="true"></i>
+<i class="fa fa-mobile-phone" aria-hidden="true"></i>
+<i class="fa fa-modx" aria-hidden="true"></i>
+<i class="fa fa-money" aria-hidden="true"></i>
+<i class="fa fa-moon-o" aria-hidden="true"></i>
+<i class="fa fa-mortar-board" aria-hidden="true"></i>
+<i class="fa fa-motorcycle" aria-hidden="true"></i>
+<i class="fa fa-mouse-pointer" aria-hidden="true"></i>
+<i class="fa fa-music" aria-hidden="true"></i>
+<i class="fa fa-navicon" aria-hidden="true"></i>
+<i class="fa fa-neuter" aria-hidden="true"></i>
+<i class="fa fa-newspaper-o" aria-hidden="true"></i>
+<i class="fa fa-object-group" aria-hidden="true"></i>
+<i class="fa fa-object-ungroup" aria-hidden="true"></i>
+<i class="fa fa-odnoklassniki" aria-hidden="true"></i>
+<i class="fa fa-odnoklassniki-square" aria-hidden="true"></i>
+<i class="fa fa-opencart" aria-hidden="true"></i>
+<i class="fa fa-openid" aria-hidden="true"></i>
+<i class="fa fa-opera" aria-hidden="true"></i>
+<i class="fa fa-optin-monster" aria-hidden="true"></i>
+<i class="fa fa-outdent" aria-hidden="true"></i>
+<i class="fa fa-pagelines" aria-hidden="true"></i>
+<i class="fa fa-paint-brush" aria-hidden="true"></i>
+<i class="fa fa-paper-plane" aria-hidden="true"></i>
+<i class="fa fa-paper-plane-o" aria-hidden="true"></i>
+<i class="fa fa-paperclip" aria-hidden="true"></i>
+<i class="fa fa-paragraph" aria-hidden="true"></i>
+<i class="fa fa-paste" aria-hidden="true"></i>
+<i class="fa fa-pause" aria-hidden="true"></i>
+<i class="fa fa-pause-circle" aria-hidden="true"></i>
+<i class="fa fa-pause-circle-o" aria-hidden="true"></i>
+<i class="fa fa-paw" aria-hidden="true"></i>
+<i class="fa fa-paypal" aria-hidden="true"></i>
+<i class="fa fa-pencil" aria-hidden="true"></i>
+<i class="fa fa-pencil-square" aria-hidden="true"></i>
+<i class="fa fa-pencil-square-o" aria-hidden="true"></i>
+<i class="fa fa-percent" aria-hidden="true"></i>
+<i class="fa fa-phone" aria-hidden="true"></i>
+<i class="fa fa-phone-square" aria-hidden="true"></i>
+<i class="fa fa-photo" aria-hidden="true"></i>
+<i class="fa fa-picture-o" aria-hidden="true"></i>
+<i class="fa fa-pie-chart" aria-hidden="true"></i>
+<i class="fa fa-pied-piper" aria-hidden="true"></i>
+<i class="fa fa-pied-piper-alt" aria-hidden="true"></i>
+<i class="fa fa-pied-piper-pp" aria-hidden="true"></i>
+<i class="fa fa-pinterest" aria-hidden="true"></i>
+<i class="fa fa-pinterest-p" aria-hidden="true"></i>
+<i class="fa fa-pinterest-square" aria-hidden="true"></i>
+<i class="fa fa-plane" aria-hidden="true"></i>
+<i class="fa fa-play" aria-hidden="true"></i>
+<i class="fa fa-play-circle" aria-hidden="true"></i>
+<i class="fa fa-play-circle-o" aria-hidden="true"></i>
+<i class="fa fa-plug" aria-hidden="true"></i>
+<i class="fa fa-plus" aria-hidden="true"></i>
+<i class="fa fa-plus-circle" aria-hidden="true"></i>
+<i class="fa fa-plus-square" aria-hidden="true"></i>
+<i class="fa fa-plus-square-o" aria-hidden="true"></i>
+<i class="fa fa-podcast" aria-hidden="true"></i>
+<i class="fa fa-power-off" aria-hidden="true"></i>
+<i class="fa fa-print" aria-hidden="true"></i>
+<i class="fa fa-product-hunt" aria-hidden="true"></i>
+<i class="fa fa-puzzle-piece" aria-hidden="true"></i>
+<i class="fa fa-qq" aria-hidden="true"></i>
+<i class="fa fa-qrcode" aria-hidden="true"></i>
+<i class="fa fa-question" aria-hidden="true"></i>
+<i class="fa fa-question-circle" aria-hidden="true"></i>
+<i class="fa fa-question-circle-o" aria-hidden="true"></i>
+<i class="fa fa-quora" aria-hidden="true"></i>
+<i class="fa fa-quote-left" aria-hidden="true"></i>
+<i class="fa fa-quote-right" aria-hidden="true"></i>
+<i class="fa fa-ra" aria-hidden="true"></i>
+<i class="fa fa-random" aria-hidden="true"></i>
+<i class="fa fa-ravelry" aria-hidden="true"></i>
+<i class="fa fa-rebel" aria-hidden="true"></i>
+<i class="fa fa-recycle" aria-hidden="true"></i>
+<i class="fa fa-reddit" aria-hidden="true"></i>
+<i class="fa fa-reddit-alien" aria-hidden="true"></i>
+<i class="fa fa-reddit-square" aria-hidden="true"></i>
+<i class="fa fa-refresh" aria-hidden="true"></i>
+<i class="fa fa-registered" aria-hidden="true"></i>
+<i class="fa fa-remove" aria-hidden="true"></i>
+<i class="fa fa-renren" aria-hidden="true"></i>
+<i class="fa fa-reorder" aria-hidden="true"></i>
+<i class="fa fa-repeat" aria-hidden="true"></i>
+<i class="fa fa-reply" aria-hidden="true"></i>
+<i class="fa fa-reply-all" aria-hidden="true"></i>
+<i class="fa fa-resistance" aria-hidden="true"></i>
+<i class="fa fa-retweet" aria-hidden="true"></i>
+<i class="fa fa-rmb" aria-hidden="true"></i>
+<i class="fa fa-road" aria-hidden="true"></i>
+<i class="fa fa-rocket" aria-hidden="true"></i>
+<i class="fa fa-rotate-left" aria-hidden="true"></i>
+<i class="fa fa-rotate-right" aria-hidden="true"></i>
+<i class="fa fa-rouble" aria-hidden="true"></i>
+<i class="fa fa-rss" aria-hidden="true"></i>
+<i class="fa fa-rss-square" aria-hidden="true"></i>
+<i class="fa fa-rub" aria-hidden="true"></i>
+<i class="fa fa-ruble" aria-hidden="true"></i>
+<i class="fa fa-rupee" aria-hidden="true"></i>
+<i class="fa fa-s15" aria-hidden="true"></i>
+<i class="fa fa-safari" aria-hidden="true"></i>
+<i class="fa fa-save" aria-hidden="true"></i>
+<i class="fa fa-scissors" aria-hidden="true"></i>
+<i class="fa fa-scribd" aria-hidden="true"></i>
+<i class="fa fa-search" aria-hidden="true"></i>
+<i class="fa fa-search-minus" aria-hidden="true"></i>
+<i class="fa fa-search-plus" aria-hidden="true"></i>
+<i class="fa fa-sellsy" aria-hidden="true"></i>
+<i class="fa fa-send" aria-hidden="true"></i>
+<i class="fa fa-send-o" aria-hidden="true"></i>
+<i class="fa fa-server" aria-hidden="true"></i>
+<i class="fa fa-share" aria-hidden="true"></i>
+<i class="fa fa-share-alt" aria-hidden="true"></i>
+<i class="fa fa-share-alt-square" aria-hidden="true"></i>
+<i class="fa fa-share-square" aria-hidden="true"></i>
+<i class="fa fa-share-square-o" aria-hidden="true"></i>
+<i class="fa fa-shekel" aria-hidden="true"></i>
+<i class="fa fa-sheqel" aria-hidden="true"></i>
+<i class="fa fa-shield" aria-hidden="true"></i>
+<i class="fa fa-ship" aria-hidden="true"></i>
+<i class="fa fa-shirtsinbulk" aria-hidden="true"></i>
+<i class="fa fa-shopping-bag" aria-hidden="true"></i>
+<i class="fa fa-shopping-basket" aria-hidden="true"></i>
+<i class="fa fa-shopping-cart" aria-hidden="true"></i>
+<i class="fa fa-shower" aria-hidden="true"></i>
+<i class="fa fa-sign-in" aria-hidden="true"></i>
+<i class="fa fa-sign-language" aria-hidden="true"></i>
+<i class="fa fa-sign-out" aria-hidden="true"></i>
+<i class="fa fa-signal" aria-hidden="true"></i>
+<i class="fa fa-signing" aria-hidden="true"></i>
+<i class="fa fa-simplybuilt" aria-hidden="true"></i>
+<i class="fa fa-sitemap" aria-hidden="true"></i>
+<i class="fa fa-skyatlas" aria-hidden="true"></i>
+<i class="fa fa-skype" aria-hidden="true"></i>
+<i class="fa fa-slack" aria-hidden="true"></i>
+<i class="fa fa-sliders" aria-hidden="true"></i>
+<i class="fa fa-slideshare" aria-hidden="true"></i>
+<i class="fa fa-smile-o" aria-hidden="true"></i>
+<i class="fa fa-snapchat" aria-hidden="true"></i>
+<i class="fa fa-snapchat-ghost" aria-hidden="true"></i>
+<i class="fa fa-snapchat-square" aria-hidden="true"></i>
+<i class="fa fa-snowflake-o" aria-hidden="true"></i>
+<i class="fa fa-soccer-ball-o" aria-hidden="true"></i>
+<i class="fa fa-sort" aria-hidden="true"></i>
+<i class="fa fa-sort-alpha-asc" aria-hidden="true"></i>
+<i class="fa fa-sort-alpha-desc" aria-hidden="true"></i>
+<i class="fa fa-sort-amount-asc" aria-hidden="true"></i>
+<i class="fa fa-sort-amount-desc" aria-hidden="true"></i>
+<i class="fa fa-sort-asc" aria-hidden="true"></i>
+<i class="fa fa-sort-desc" aria-hidden="true"></i>
+<i class="fa fa-sort-down" aria-hidden="true"></i>
+<i class="fa fa-sort-numeric-asc" aria-hidden="true"></i>
+<i class="fa fa-sort-numeric-desc" aria-hidden="true"></i>
+<i class="fa fa-sort-up" aria-hidden="true"></i>
+<i class="fa fa-soundcloud" aria-hidden="true"></i>
+<i class="fa fa-space-shuttle" aria-hidden="true"></i>
+<i class="fa fa-spinner" aria-hidden="true"></i>
+<i class="fa fa-spoon" aria-hidden="true"></i>
+<i class="fa fa-spotify" aria-hidden="true"></i>
+<i class="fa fa-square" aria-hidden="true"></i>
+<i class="fa fa-square-o" aria-hidden="true"></i>
+<i class="fa fa-stack-exchange" aria-hidden="true"></i>
+<i class="fa fa-stack-overflow" aria-hidden="true"></i>
+<i class="fa fa-star" aria-hidden="true"></i>
+<i class="fa fa-star-half" aria-hidden="true"></i>
+<i class="fa fa-star-half-empty" aria-hidden="true"></i>
+<i class="fa fa-star-half-full" aria-hidden="true"></i>
+<i class="fa fa-star-half-o" aria-hidden="true"></i>
+<i class="fa fa-star-o" aria-hidden="true"></i>
+<i class="fa fa-steam" aria-hidden="true"></i>
+<i class="fa fa-steam-square" aria-hidden="true"></i>
+<i class="fa fa-step-backward" aria-hidden="true"></i>
+<i class="fa fa-step-forward" aria-hidden="true"></i>
+<i class="fa fa-stethoscope" aria-hidden="true"></i>
+<i class="fa fa-sticky-note" aria-hidden="true"></i>
+<i class="fa fa-sticky-note-o" aria-hidden="true"></i>
+<i class="fa fa-stop" aria-hidden="true"></i>
+<i class="fa fa-stop-circle" aria-hidden="true"></i>
+<i class="fa fa-stop-circle-o" aria-hidden="true"></i>
+<i class="fa fa-street-view" aria-hidden="true"></i>
+<i class="fa fa-strikethrough" aria-hidden="true"></i>
+<i class="fa fa-stumbleupon" aria-hidden="true"></i>
+<i class="fa fa-stumbleupon-circle" aria-hidden="true"></i>
+<i class="fa fa-subscript" aria-hidden="true"></i>
+<i class="fa fa-subway" aria-hidden="true"></i>
+<i class="fa fa-suitcase" aria-hidden="true"></i>
+<i class="fa fa-sun-o" aria-hidden="true"></i>
+<i class="fa fa-superpowers" aria-hidden="true"></i>
+<i class="fa fa-superscript" aria-hidden="true"></i>
+<i class="fa fa-support" aria-hidden="true"></i>
+<i class="fa fa-table" aria-hidden="true"></i>
+<i class="fa fa-tablet" aria-hidden="true"></i>
+<i class="fa fa-tachometer" aria-hidden="true"></i>
+<i class="fa fa-tag" aria-hidden="true"></i>
+<i class="fa fa-tags" aria-hidden="true"></i>
+<i class="fa fa-tasks" aria-hidden="true"></i>
+<i class="fa fa-taxi" aria-hidden="true"></i>
+<i class="fa fa-telegram" aria-hidden="true"></i>
+<i class="fa fa-television" aria-hidden="true"></i>
+<i class="fa fa-tencent-weibo" aria-hidden="true"></i>
+<i class="fa fa-terminal" aria-hidden="true"></i>
+<i class="fa fa-text-height" aria-hidden="true"></i>
+<i class="fa fa-text-width" aria-hidden="true"></i>
+<i class="fa fa-th" aria-hidden="true"></i>
+<i class="fa fa-th-large" aria-hidden="true"></i>
+<i class="fa fa-th-list" aria-hidden="true"></i>
+<i class="fa fa-themeisle" aria-hidden="true"></i>
+<i class="fa fa-thermometer" aria-hidden="true"></i>
+<i class="fa fa-thermometer-0" aria-hidden="true"></i>
+<i class="fa fa-thermometer-1" aria-hidden="true"></i>
+<i class="fa fa-thermometer-2" aria-hidden="true"></i>
+<i class="fa fa-thermometer-3" aria-hidden="true"></i>
+<i class="fa fa-thermometer-4" aria-hidden="true"></i>
+<i class="fa fa-thermometer-empty" aria-hidden="true"></i>
+<i class="fa fa-thermometer-full" aria-hidden="true"></i>
+<i class="fa fa-thermometer-half" aria-hidden="true"></i>
+<i class="fa fa-thermometer-quarter" aria-hidden="true"></i>
+<i class="fa fa-thermometer-three-quarters" aria-hidden="true"></i>
+<i class="fa fa-thumb-tack" aria-hidden="true"></i>
+<i class="fa fa-thumbs-down" aria-hidden="true"></i>
+<i class="fa fa-thumbs-o-down" aria-hidden="true"></i>
+<i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
+<i class="fa fa-thumbs-up" aria-hidden="true"></i>
+<i class="fa fa-ticket" aria-hidden="true"></i>
+<i class="fa fa-times" aria-hidden="true"></i>
+<i class="fa fa-times-circle" aria-hidden="true"></i>
+<i class="fa fa-times-circle-o" aria-hidden="true"></i>
+<i class="fa fa-times-rectangle" aria-hidden="true"></i>
+<i class="fa fa-times-rectangle-o" aria-hidden="true"></i>
+<i class="fa fa-tint" aria-hidden="true"></i>
+<i class="fa fa-toggle-down" aria-hidden="true"></i>
+<i class="fa fa-toggle-left" aria-hidden="true"></i>
+<i class="fa fa-toggle-off" aria-hidden="true"></i>
+<i class="fa fa-toggle-on" aria-hidden="true"></i>
+<i class="fa fa-toggle-right" aria-hidden="true"></i>
+<i class="fa fa-toggle-up" aria-hidden="true"></i>
+<i class="fa fa-trademark" aria-hidden="true"></i>
+<i class="fa fa-train" aria-hidden="true"></i>
+<i class="fa fa-transgender" aria-hidden="true"></i>
+<i class="fa fa-transgender-alt" aria-hidden="true"></i>
+<i class="fa fa-trash" aria-hidden="true"></i>
+<i class="fa fa-trash-o" aria-hidden="true"></i>
+<i class="fa fa-tree" aria-hidden="true"></i>
+<i class="fa fa-trello" aria-hidden="true"></i>
+<i class="fa fa-tripadvisor" aria-hidden="true"></i>
+<i class="fa fa-trophy" aria-hidden="true"></i>
+<i class="fa fa-truck" aria-hidden="true"></i>
+<i class="fa fa-try" aria-hidden="true"></i>
+<i class="fa fa-tty" aria-hidden="true"></i>
+<i class="fa fa-tumblr" aria-hidden="true"></i>
+<i class="fa fa-tumblr-square" aria-hidden="true"></i>
+<i class="fa fa-turkish-lira" aria-hidden="true"></i>
+<i class="fa fa-tv" aria-hidden="true"></i>
+<i class="fa fa-twitch" aria-hidden="true"></i>
+<i class="fa fa-twitter" aria-hidden="true"></i>
+<i class="fa fa-twitter-square" aria-hidden="true"></i>
+<i class="fa fa-umbrella" aria-hidden="true"></i>
+<i class="fa fa-underline" aria-hidden="true"></i>
+<i class="fa fa-undo" aria-hidden="true"></i>
+<i class="fa fa-universal-access" aria-hidden="true"></i>
+<i class="fa fa-university" aria-hidden="true"></i>
+<i class="fa fa-unlink" aria-hidden="true"></i>
+<i class="fa fa-unlock" aria-hidden="true"></i>
+<i class="fa fa-unlock-alt" aria-hidden="true"></i>
+<i class="fa fa-unsorted" aria-hidden="true"></i>
+<i class="fa fa-upload" aria-hidden="true"></i>
+<i class="fa fa-usb" aria-hidden="true"></i>
+<i class="fa fa-usd" aria-hidden="true"></i>
+<i class="fa fa-user" aria-hidden="true"></i>
+<i class="fa fa-user-circle" aria-hidden="true"></i>
+<i class="fa fa-user-circle-o" aria-hidden="true"></i>
+<i class="fa fa-user-md" aria-hidden="true"></i>
+<i class="fa fa-user-o" aria-hidden="true"></i>
+<i class="fa fa-user-plus" aria-hidden="true"></i>
+<i class="fa fa-user-secret" aria-hidden="true"></i>
+<i class="fa fa-user-times" aria-hidden="true"></i>
+<i class="fa fa-users" aria-hidden="true"></i>
+<i class="fa fa-vcard" aria-hidden="true"></i>
+<i class="fa fa-vcard-o" aria-hidden="true"></i>
+<i class="fa fa-venus" aria-hidden="true"></i>
+<i class="fa fa-venus-double" aria-hidden="true"></i>
+<i class="fa fa-venus-mars" aria-hidden="true"></i>
+<i class="fa fa-viacoin" aria-hidden="true"></i>
+<i class="fa fa-viadeo" aria-hidden="true"></i>
+<i class="fa fa-viadeo-square" aria-hidden="true"></i>
+<i class="fa fa-video-camera" aria-hidden="true"></i>
+<i class="fa fa-vimeo" aria-hidden="true"></i>
+<i class="fa fa-vimeo-square" aria-hidden="true"></i>
+<i class="fa fa-vine" aria-hidden="true"></i>
+<i class="fa fa-vk" aria-hidden="true"></i>
+<i class="fa fa-volume-control-phone" aria-hidden="true"></i>
+<i class="fa fa-volume-down" aria-hidden="true"></i>
+<i class="fa fa-volume-off" aria-hidden="true"></i>
+<i class="fa fa-volume-up" aria-hidden="true"></i>
+<i class="fa fa-warning" aria-hidden="true"></i>
+<i class="fa fa-wechat" aria-hidden="true"></i>
+<i class="fa fa-weibo" aria-hidden="true"></i>
+<i class="fa fa-weixin" aria-hidden="true"></i>
+<i class="fa fa-whatsapp" aria-hidden="true"></i>
+<i class="fa fa-wheelchair" aria-hidden="true"></i>
+<i class="fa fa-wheelchair-alt" aria-hidden="true"></i>
+<i class="fa fa-wifi" aria-hidden="true"></i>
+<i class="fa fa-wikipedia-w" aria-hidden="true"></i>
+<i class="fa fa-window-close" aria-hidden="true"></i>
+<i class="fa fa-window-close-o" aria-hidden="true"></i>
+<i class="fa fa-window-maximize" aria-hidden="true"></i>
+<i class="fa fa-window-minimize" aria-hidden="true"></i>
+<i class="fa fa-window-restore" aria-hidden="true"></i>
+<i class="fa fa-windows" aria-hidden="true"></i>
+<i class="fa fa-won" aria-hidden="true"></i>
+<i class="fa fa-wordpress" aria-hidden="true"></i>
+<i class="fa fa-wpbeginner" aria-hidden="true"></i>
+<i class="fa fa-wpexplorer" aria-hidden="true"></i>
+<i class="fa fa-wpforms" aria-hidden="true"></i>
+<i class="fa fa-wrench" aria-hidden="true"></i>
+<i class="fa fa-xing" aria-hidden="true"></i>
+<i class="fa fa-xing-square" aria-hidden="true"></i>
+<i class="fa fa-y-combinator" aria-hidden="true"></i>
+<i class="fa fa-y-combinator-square" aria-hidden="true"></i>
+<i class="fa fa-yahoo" aria-hidden="true"></i>
+<i class="fa fa-yc" aria-hidden="true"></i>
+<i class="fa fa-yc-square" aria-hidden="true"></i>
+<i class="fa fa-yelp" aria-hidden="true"></i>
+<i class="fa fa-yen" aria-hidden="true"></i>
+<i class="fa fa-yoast" aria-hidden="true"></i>
+<i class="fa fa-youtube" aria-hidden="true"></i>
+<i class="fa fa-youtube-play" aria-hidden="true"></i>
+<i class="fa fa-youtube-square" aria-hidden="true"></i>
+</div>
+</body>
+</html>

+ 371 - 0
src/main/resources/templates/admin/permissionvue/list.html

@@ -0,0 +1,371 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" 
+      xmlns:sec="http://www.pollix.at/thymeleaf/shiro">
+<head th:replace="admin/common/html/head:: Head_Premiss(~{::title},~{::link},~{::style})">
+
+<title th:text=${title}></title>
+<!-- 这儿引用单独的css link -->
+<!-- Ladda for Bootstrap 3按钮加载进度插件 -->
+<link rel="stylesheet" th:href="@{/static/admin/assets/js/button/ladda/ladda.min.css}">
+
+<link rel="stylesheet" th:href="@{/static/js/bootstrap-treetable/bootstrap-treetable.min.css}">
+
+<style type="text/css">
+/**
+*这里写单独的css样式
+*/
+</style>
+</head>
+
+<body id="listbody">
+<!-- ###############################代码编写处############################### -->
+<!-- 右边内容 -->
+<div class="wrap-fluid">
+ <div class="container-fluid paper-wrap bevel tlbr">
+        <!-- 内容 -->
+        <!--标题 通用-->
+        <div th:replace="admin/common/html/title :: title(${title},${parenttitle},${isMsg},${msgHTML})">
+        </div>
+        <!-- 结束标题 通用-->
+        <div class="content-wrap">
+            <!-- 结束内容 -->
+            <div class="row">
+                <div class="col-sm-12">
+                <!-- 搜索条件 -->
+                
+                	 <div class="nest" id="inlineClose">
+                            <div class="title-alt">
+                                <h6>搜索条件</h6>
+                                <div class="titleClose">
+                                    <a class="gone" href="#inlineClose">
+                                        <span class="entypo-cancel"></span>
+                                    </a>
+                                </div>
+                                <div class="titleToggle">
+                                    <a class="nav-toggle-alt" href="#search_div">
+                                        <span class="entypo-down-open"></span>
+                                    </a>
+                                </div>
+                            </div>
+
+                            <div class="body-nest" id="search_div" style="display: none">
+                                <div class="form_left">
+                                    <form role="form" class="form-inline">
+                                        <div class="form-group">
+                                            <label for="exampleInputEmail2" class="sr-only">权限名字</label>
+                                            <input type="text" name="searchText" placeholder="权限名字"class="form-control">
+                                        </div>
+                                        <button onclick="$.table.search(this)" class="btn btn-success" type="button"><i class="fa fa-search"></i>&nbsp;搜索</button>
+                                    </form>
+                                </div>
+                            </div>
+                        </div>
+                	<!-- END搜索条件 -->
+                    <!-- 空白页开始-->
+                    <div class="nest" id="Blank_PageClose">
+                        <div class="title-alt">
+                            <h6>表单</h6>
+                            <div class="titleClose">
+                                <a class="gone" href="#Blank_PageClose">
+                                    <span class="entypo-cancel"></span>
+                                </a>
+                            </div>
+                            <div class="titleToggle">
+                                <a class="nav-toggle-alt" href="#Blank_Page_Content">
+                                    <span class="entypo-up-open"></span>
+                                </a>
+                            </div>
+                        </div>
+                        
+                        <div class="body-nest" id="Blank_Page_Content">
+                            <!-- 工具条 -->
+                            <div class="btn-group hidden-xs" id="exampleTableEventsToolbar" role="group">
+                            	<button onclick="add()" type="button" class="btn btn-primary">
+                                    <span class="entypo-plus-squared"></span>&nbsp;&nbsp;新增
+                                </button>
+                               <button onclick="batRemove()" type="button" class="btn btn-info">
+                                    <span class="entypo-trash"></span>&nbsp;&nbsp;删除
+                               </button>
+                               <button id="expandAllBtn"  type="button" class="btn btn-success">
+                                    <span class="entypo-shuffle"></span>&nbsp;&nbsp;展开/折叠
+                               </button>
+                               
+                           </div>
+                            <!-- 工具条 end-->
+                           <table id="demo" class="table-striped footable-res footable metro-blue" data-page-size="6">
+                                   
+                                    
+                           </table>
+                           
+                           
+                        </div>
+                    </div>
+                </div>
+                <!-- 空白页结束 -->
+            </div>
+            <!-- 结束内容 -->
+        </div>
+    </div>
+</div>
+<!-- 结束右边内容 -->
+<!-- ###############################代码编写处end############################### -->
+
+
+
+
+
+
+
+<!-- 右侧隐藏滑块内容 -->
+<div th:include="admin/common/html/rightHide :: rightHide">
+    
+</div>
+   <!-- END 右侧隐藏滑块内容-->
+
+<!-- 通用js -->
+<div th:include="admin/common/html/js :: onload_js_Premiss">
+   
+</div>
+<script th:src="@{/static/js/bootstrap-treetable/bootstrap-treetable.min.js}" type="text/javascript"></script>
+	
+<script type="text/javascript">
+var dataUrl=window.rootPath+"/PermissionVueController/list2";
+var removeUrl=window.rootPath+"/PermissionVueController/remove";
+var createUrl=window.rootPath+"/PermissionVueController/add";
+var updateUrl=window.rootPath+"/PermissionVueController/edit/{id}";
+var exportUrl=window.rootPath+"/PermissionVueController/export";
+/**
+                    rootIdValue: null,//设置根节点id值----可指定根节点,默认为null,"",0,"0"
+                    id : "id",               // 选取记录返回的值,用于设置父子关系
+                    parentId : "parentId",       // 用于设置父子关系
+                    type: 'get',                   // 请求方式(*)
+                    url: "./data.json",             // 请求后台的URL(*)
+                    ajaxParams : {},               // 请求数据的ajax的data属性
+                    expandColumn : 0,            // 在哪一列上面显示展开按钮
+                    expandAll : false,                // 是否全部展开
+                    expandFirst : true, // 是否默认第一级展开--expandAll为false时生效
+                    toolbar: null,//顶部工具条
+                    height: 0,
+                    expanderExpandedClass : 'glyphicon glyphicon-chevron-down',// 展开的按钮的图标
+                    expanderCollapsedClass : 'glyphicon glyphicon-chevron-right',// 缩起的按钮的图标
+**/
+                var treeTable = $('#demo').bootstrapTreeTable({
+                    toolbar: "#demo-toolbar",//顶部工具条
+                    expandColumn : 2,// 在哪一列上面显示展开按钮
+                    url: dataUrl,// 请求后台的URL(*)
+                    type: 'post',
+                    id : "id",
+                    rootIdValue: '0',
+                    parentId: 'pid',
+                    striped:true,
+                    columns: [
+                    	{
+            			    checkbox: true
+            			},                   
+            			{
+            			    field: 'id',
+            			    width: '150',
+            			    title: '序号'
+            			},{
+            			    field: 'name',
+            			    title: '权限名称',
+            			    width: '230',
+            			    formatter: function (value, row, index) {
+            			        var actions = [];
+            			        actions.push(value+' <i class="'+row.icon+'"></i>');
+            			      	return actions.join('');			    
+            				 }
+            			},
+            			{
+            				field: 'url',
+                            title: '请求地址',
+            			},
+            			{
+            			    field: 'isBlank',
+            			    title: '跳转',
+            			    width: '50',
+            			    formatter: function (value, row, index) {
+            			        var actions = [];
+            			        if(value==0){
+            			        	 actions.push('<span class="label label-primary">否</span>');
+            			        }else if(value==1){
+            			        	 actions.push('<span class="label label-danger">是</span>');
+            			        }
+            			      	return actions.join('');			    
+            				 }
+            			},
+            			{
+            			    field: 'perms',
+            			    title: '权限关键字'
+            			},
+            			{
+            				 field: 'type',
+            				 title: '菜单类型',
+            				 width: '80',
+            				 formatter: function (value, row, index) {
+            			        var actions = [];
+            			        if(value==0){
+            			        	 actions.push('<span class="label label-primary">目录</span>');
+            			        }else if(value==1){
+            			        	 actions.push('<span class="label label-success">菜单</span>');
+            			        }else if(value==2){
+            			        	 actions.push('<span class="label label-warning">按钮</span>');
+            			        }
+            			      	return actions.join('');			    
+            				 }
+            			},
+            			{
+            				 field: 'visible',
+            				 title: '可见',
+            				 width: '80',
+            				 formatter: function (value, row, index) {
+            			        var actions = [];
+            			        if(value==0){
+            			        	 actions.push('<span class="badge badge-success">显示</span>');
+            			        }else if(value==1){
+            			        	 actions.push('<span class="badge badge-important">隐藏</span>');
+            			        }
+            			      	return actions.join('');			    
+            				 }
+            			},
+            			{
+            				 field: 'orderNum',
+            				 width: '50',
+            				 title: '排序'
+            			},
+            			{
+            			    field: 'descripion',
+            			    width: '150',
+            			    title: '描述'
+            			},
+            			{
+            			    title: '操作',
+            			    width: '150',
+            			    formatter: function (value, row, index) {
+            			        var id = row.id;
+            			        var actions = [];
+            			        if(row.id!=1){
+            			        	actions.push('<a class="btn btn-success btn-xs"  href="#" onclick="edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
+                			        actions.push('<a class="btn btn-danger btn-xs" href="#" onclick="remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
+            			        }
+            			        return actions.join('');			    
+            			    }
+            			}
+                    ],
+                    onAll: function(data) {
+                        console.log("onAll");
+                        return false;
+                    },
+                    onLoadSuccess: function(data) {
+                        console.log("onLoadSuccess");
+                        return false;
+                    },
+                    onLoadError: function(status) {
+                        console.log("onLoadError");
+                        return false;
+                    },
+                    onClickCell: function(field, value, row, $element) {
+                        console.log("onClickCell",row);
+                        return false;
+                    },
+                    onDblClickCell: function(field, value, row, $element) {
+                        console.log("onDblClickCell",row);
+                        return false;
+                    },
+                    onClickRow: function(row, $element) {
+                        console.log("onClickRow",row);
+                        return false;
+                    },
+                    onDblClickRow: function(row, $element) {
+                        console.log("onDblClickRow",row);
+                        return false;
+                    }
+                   
+                });
+                $("#selectBtn").click(function(){
+                    var selecteds = $('#demo').bootstrapTreeTable('getSelections');
+                    $.each(selecteds,function(_i,_item){
+                        console.log(_item);
+                    });
+                    alert("看console");
+                })
+               
+                var _expandFlag_all = false;
+                $("#expandAllBtn").click(function(){
+                    if(_expandFlag_all){
+                        $('#demo').bootstrapTreeTable('expandAll');
+                    }else{
+                        $('#demo').bootstrapTreeTable('collapseAll');
+                    }
+                    _expandFlag_all = _expandFlag_all?false:true;
+                })
+                var _showFlag = true;
+                $("#showColumnBtn").click(function(){
+                    if(_showFlag){
+                        $('#demo').bootstrapTreeTable('hideColumn',"orderNum");
+                    }else{
+                        $('#demo').bootstrapTreeTable('showColumn',"orderNum");
+                    }
+                    _showFlag = _showFlag?false:true;
+                })
+                $("#destroyBtn").click(function(){
+                    $('#demo').bootstrapTreeTable('destroy');
+                })
+</script>
+
+<script type="text/javascript">
+
+function add(){
+	$.modal.open("添加权限", createUrl);
+}
+
+function batRemove(){
+	
+	var rows = $('#demo').bootstrapTreeTable('getSelections');
+    if (rows.length == 0) {
+        $.modal.alertWarning("请至少选择一条记录");
+        return
+    }
+    $.modal.confirm("确认要删除选中的" + rows.length + "条数据吗?", function() {
+    	var rowid=[];
+    	for ( var i in rows) {
+    		rowid.push(rows[i].id);
+		}
+        var url = removeUrl;
+        var data = {
+            "ids": rowid.join()
+        };
+        $.operate.submit(url, "post", "json", data);
+    })
+}
+
+function edit(id){
+	 var url = updateUrl.replace("{id}", id);
+     $.modal.open("修改权限", url);
+}
+
+function remove(id){
+	
+	$.modal.confirm("确定删除该条权限信息吗?", function() {
+        var url = removeUrl.replace("{id}", id);
+        var data = {
+            "ids": id
+        };
+        $.operate.submit(url, "post", "json", data);
+    })
+}
+
+
+//重写刷新方法
+$.table.refresh=function() {
+	$('#demo').bootstrapTreeTable("refresh",{
+		url:dataUrl,
+		silent:true
+	});
+}
+</script>
+
+</body>
+
+
+</html>

+ 255 - 0
src/main/resources/templates/admin/permissionvue/list_old.html

@@ -0,0 +1,255 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" 
+      xmlns:sec="http://www.pollix.at/thymeleaf/shiro">
+<head th:replace="admin/common/html/head:: Head_Premiss(~{::title},~{::link},~{::style})">
+
+<title th:text=${title}></title>
+<!-- 这儿引用单独的css link -->
+<!-- Ladda for Bootstrap 3按钮加载进度插件 -->
+<link rel="stylesheet" th:href="@{/static/admin/assets/js/button/ladda/ladda.min.css}">
+<!-- bootstrap-table表单样式 -->
+<link th:href="@{/static/admin/assets/js/bootstrap/css/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
+<link rel="stylesheet" th:href="@{/static/js/treegrid/jquery.treegrid.min.css}">
+
+
+<style type="text/css">
+/**
+*这里写单独的css样式
+*/
+</style>
+</head>
+
+<body id="listbody">
+<!-- ###############################代码编写处############################### -->
+<!-- 右边内容 -->
+<div class="wrap-fluid">
+ <div class="container-fluid paper-wrap bevel tlbr">
+        <!-- 内容 -->
+        <!--标题 通用-->
+        <div th:replace="admin/common/html/title :: title(${title},${parenttitle},${isMsg},${msgHTML})">
+        </div>
+        <!-- 结束标题 通用-->
+        <div class="content-wrap">
+            <!-- 结束内容 -->
+            <div class="row">
+                <div class="col-sm-12">
+                <!-- 搜索条件 -->
+                
+                	 <div class="nest" id="inlineClose">
+                            <div class="title-alt">
+                                <h6>搜索条件</h6>
+                                <div class="titleClose">
+                                    <a class="gone" href="#inlineClose">
+                                        <span class="entypo-cancel"></span>
+                                    </a>
+                                </div>
+                                <div class="titleToggle">
+                                    <a class="nav-toggle-alt" href="#search_div">
+                                        <span class="entypo-down-open"></span>
+                                    </a>
+                                </div>
+                            </div>
+
+                            <div class="body-nest" id="search_div" style="display: none">
+                                <div class="form_left">
+                                    <form role="form" class="form-inline">
+                                        <div class="form-group">
+                                            <label for="exampleInputEmail2" class="sr-only">权限名字</label>
+                                            <input type="text" name="searchText" placeholder="权限名字"class="form-control">
+                                        </div>
+                                        <button onclick="$.table.search(this)" class="btn btn-success" type="button"><i class="fa fa-search"></i>&nbsp;搜索</button>
+                                    </form>
+                                </div>
+                            </div>
+                        </div>
+                	<!-- END搜索条件 -->
+                    <!-- 空白页开始-->
+                    <div class="nest" id="Blank_PageClose">
+                        <div class="title-alt">
+                            <h6>表单</h6>
+                            <div class="titleClose">
+                                <a class="gone" href="#Blank_PageClose">
+                                    <span class="entypo-cancel"></span>
+                                </a>
+                            </div>
+                            <div class="titleToggle">
+                                <a class="nav-toggle-alt" href="#Blank_Page_Content">
+                                    <span class="entypo-up-open"></span>
+                                </a>
+                            </div>
+                        </div>
+                        
+                        <div class="body-nest" id="Blank_Page_Content">
+                            <!-- 工具条 -->
+                            <div class="btn-group hidden-xs" id="exampleTableEventsToolbar" role="group">
+                            	<button onclick="$.operate.add()" type="button" class="btn btn-primary">
+                                    <span class="entypo-plus-squared"></span>&nbsp;&nbsp;新增
+                                </button>
+                               <button onclick="$.operate.batRemove()" type="button" class="btn btn-info">
+                                    <span class="entypo-trash"></span>&nbsp;&nbsp;删除
+                               </button>
+                               <button onclick="$.operate.expandAll()"  type="button" class="btn btn-success">
+                                    <span class="entypo-shuffle"></span>&nbsp;&nbsp;展开/折叠
+                               </button>
+                               
+                           </div>
+                            <!-- 工具条 end-->
+                           <table id="dataTable" class="table-striped footable-res footable metro-blue" data-page-size="6">
+                                   
+                                    
+                           </table>
+                           
+                           
+                        </div>
+                    </div>
+                </div>
+                <!-- 空白页结束 -->
+            </div>
+            <!-- 结束内容 -->
+        </div>
+    </div>
+</div>
+<!-- 结束右边内容 -->
+<!-- ###############################代码编写处end############################### -->
+
+
+
+
+
+
+
+<!-- 右侧隐藏滑块内容 -->
+<div th:include="admin/common/html/rightHide :: rightHide">
+    
+</div>
+   <!-- END 右侧隐藏滑块内容-->
+
+<!-- 通用js -->
+<div th:include="admin/common/html/js :: onload_js_Premiss">
+   
+</div>
+<!-- 列表参数 -->
+<script>
+
+var dataUrl=window.rootPath+"/PermissionController/list2";
+var removeUrl=window.rootPath+"/PermissionController/remove";
+var createUrl=window.rootPath+"/PermissionController/add";
+var updateUrl=window.rootPath+"/PermissionController/edit/{id}";
+var exportUrl=window.rootPath+"/PermissionController/export";
+  var options = {
+		dataUrl: dataUrl,
+        createUrl: createUrl,
+        updateUrl: updateUrl,
+        removeUrl:removeUrl,
+        exportUrl: exportUrl,
+        sortName: "id",
+        modalName: "权限",
+        search: false,
+	   dataColumns: [
+			{
+			    checkbox: true
+			},                   
+			{
+			    field: 'id',
+			    title: '序号'
+			},{
+			    field: 'name',
+			    title: '权限名称',
+			    formatter: function (value, row, index) {
+			        var actions = [];
+			        actions.push(value+' <i class="'+row.icon+'"></i>');
+			      	return actions.join('');			    
+				 }
+			},
+			{
+			    field: 'url',
+			    title: '权限URL'
+			},
+			{
+			    field: 'isBlank',
+			    title: '是否跳转',
+			    formatter: function (value, row, index) {
+			        var actions = [];
+			        if(value==0){
+			        	 actions.push('<span class="label label-primary">否</span>');
+			        }else if(value==1){
+			        	 actions.push('<span class="label label-danger">是</span>');
+			        }
+			      	return actions.join('');			    
+				 }
+			},
+			{
+			    field: 'perms',
+			    title: '权限关键字'
+			},
+			{
+				 field: 'type',
+				 title: '菜单类型',
+				 formatter: function (value, row, index) {
+			        var actions = [];
+			        if(value==0){
+			        	 actions.push('<span class="label label-primary">目录</span>');
+			        }else if(value==1){
+			        	 actions.push('<span class="label label-success">菜单</span>');
+			        }else if(value==2){
+			        	 actions.push('<span class="label label-warning">按钮</span>');
+			        }
+			      	return actions.join('');			    
+				 }
+			},
+			{
+				 field: 'visible',
+				 title: '可见',
+				 formatter: function (value, row, index) {
+			        var actions = [];
+			        if(value==0){
+			        	 actions.push('<span class="badge badge-success">显示</span>');
+			        }else if(value==1){
+			        	 actions.push('<span class="badge badge-important">隐藏</span>');
+			        }
+			      	return actions.join('');			    
+				 }
+			},
+			{
+				 field: 'orderNum',
+				 title: '排序'
+			},
+			{
+			    field: 'descripion',
+			    title: '描述'
+			},
+			{
+			    title: '操作',
+			    formatter: function (value, row, index) {
+			        var id = row.id;
+			        var actions = [];
+			        actions.push('<a class="btn btn-success btn-xs"  href="#" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
+			        actions.push('<a class="btn btn-danger btn-xs" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
+			        return actions.join('');			    
+			    }
+			}
+		]
+  };
+  
+
+  
+
+</script>
+
+
+<script type="text/javascript">
+
+$(function(){
+	//加载列表
+	//加载列表
+	var oTab=$.table.oTableInit(options);
+	oTab.Init();
+})
+</script>
+
+
+
+</body>
+
+
+</html>

+ 190 - 0
src/main/resources/templates/admin/permissionvue/tree.html

@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" 
+      xmlns:sec="http://www.pollix.at/thymeleaf/shiro">
+<head th:replace="admin/common/html/tableHead :: tableHead(~{::title},~{::link},~{::style})">
+<title th:text=${title}></title>
+<!-- 这儿引用单独的css link -->
+<!-- Ladda for Bootstrap 3按钮加载进度插件 -->
+<link rel="stylesheet" th:href="@{/static/admin/assets/js/button/ladda/ladda.min.css}">
+<!-- treeview -->
+<link th:href="@{/static/admin/assets/js/bootstrap/bootstrap-treeview/css/bootstrap-treeview.css}" rel="stylesheet"/>
+
+<style type="text/css">
+.content-wrap {
+     padding: 0px;
+}
+body {
+	 color: #9ea7b3;
+    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() no-repeat top center fixed;
+    -moz-background-size: cover;
+    -webkit-background-size: cover;
+    -o-background-size: cover;
+    background-size: cover;
+}
+label.error {
+    position: absolute;
+    right: 18px;
+    top: 5px;
+    color: #ef392b;
+    font-size: 12px;
+}
+</style>
+
+</head>
+<body>
+
+<div id="fcapp" class="content-wrap">
+	<div class="row">
+		<div class="col-sm-12">
+			<div class="nest" id="elementClose">
+				<div class="">
+				</div>
+				<div class="body-nest" id="element">
+					<div class="panel-body">
+						<form  class="form-horizontal m" id="form-add">
+							<div class="form-group">
+								<div class="col-sm-8">
+									<div id="tree"></div> 
+								</div>
+							</div>
+							<div class="form-group">
+								<div class="form-control-static col-sm-offset-9">
+									<button type="submit" class="btn btn-primary">提交</button>
+									<button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button>
+								</div>
+							</div>
+						</form>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<!-- 通用js -->
+<div th:include="admin/common/html/js :: onload_js"></div>
+<!-- 弹窗 -->
+<script th:src="@{/static/admin/assets/js/layer/layer.js}" type="text/javascript"></script>
+<!-- 遮罩层 -->
+<script th:src="@{/static/admin/assets/js/blockUI/jquery.blockUI.js}" type="text/javascript"></script>
+<!--bootstarp threeView -->
+<script th:src="@{/static/admin/assets/js/bootstrap/bootstrap-treeview/js/bootstrap-treeview.js}" type="text/javascript"></script>
+<script th:src="@{/static/admin/assets/js/bootstrap/js/base_list.js}" type="text/javascript"></script>
+
+
+<script type="text/javascript">
+
+//添加方法
+function add() {
+	var dataFormJson=$("#form-add").serialize();
+	$.ajax({
+		cache : true,
+		type : "POST",
+		url : rootPath + "/PermissionVueController/add",
+		data :dataFormJson,
+		async : false,
+		error : function(request) {
+			$.modal.alertError("系统错误");
+		},
+		success : function(data) {
+			$.operate.saveSuccess(data);
+		}
+	});
+}
+
+
+/***权限配置***/
+
+function getTree() {
+	var tree = [];
+	$.ajax({
+		url: rootPath + "/PermissionVueController/tree/0",
+		type:"post",
+		async : false,
+		cache : true,
+		error : function(request) {
+			$.modal.alertError("系统错误");
+		},
+		success : function(data) {
+			if(!$.common.isEmpty(data)&&data.code==200){
+				tree.push(data.data);
+			}
+		}
+		
+		
+	})
+    return tree;
+}
+
+
+//赋值给父菜单
+function loadObj(data){
+	var treeId = data.id;
+	var treeName = data.text;
+	
+	if(treeId != "1") {
+		parent.$("#pid").val(treeId);
+		parent.$("#pidName").val(treeName);
+		var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引
+		parent.layer.close(index);
+	}
+	else {
+		$.modal.alertError("主菜单不能选择");
+	}
+	
+	
+
+}
+
+
+
+$(function() {
+	
+	$('#tree').treeview({
+		levels : 3,////设置初始化展开几级菜单 默认为2
+		//showCheckbox : 1,//这里之所以写1,是因为我引得js源码里定义1为true  checkbox
+		//multiSelect : 1,//这里之所以写1,是因为我引得js源码里定义1为true  多选
+		data : getTree(),
+		color : "#000000",//设置字体加载颜色
+		backColor : "#FFFFFF",//设置背景颜色
+		selectedColor : "#428bca",//设置选中的字体颜色
+		 highlightSelected:true,     //是否选中高亮显示
+		 onhoverColor: "#FF00FF",    //鼠标滑过的颜色
+		 showBorder:true,//是否显示边框
+		onNodeSelected : function(event, data) {//选中节点
+			// 事件代码...
+			console.log(data.id);
+			loadObj(data);
+		},
+		onNodeChecked : function(event, node) { //选中节点 
+			
+		},
+		nodeSelected (event, node){
+		},
+		nodeChecked (event, node){//一个节点被checkedc
+		},
+		onNodeUnchecked : function(event, node) { //取消选中节点  
+		}
+
+	});
+
+})
+
+
+
+
+
+</script>
+
+
+</body>
+
+
+</html>

+ 319 - 0
src/main/resources/templates/admin/rolevue/add.html

@@ -0,0 +1,319 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" 
+      xmlns:sec="http://www.pollix.at/thymeleaf/shiro">
+<head th:replace="admin/common/html/tableHead :: tableHead(~{::title},~{::link},~{::style})">
+
+<title th:text=${title}></title>
+<!-- 这儿引用单独的css link -->
+<!-- Ladda for Bootstrap 3按钮加载进度插件 -->
+<link rel="stylesheet" th:href="@{/static/admin/assets/js/button/ladda/ladda.min.css}">
+<!-- bootstrap-table表单样式 -->
+<link th:href="@{/static/admin/assets/js/bootstrap/css/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
+<!-- treeview -->
+<link th:href="@{/static/admin/assets/js/bootstrap/bootstrap-treeview/css/bootstrap-treeview.css}" rel="stylesheet"/>
+
+<style type="text/css">
+.content-wrap {
+     padding: 0px;
+}
+body {
+	 color: #9ea7b3;
+    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() no-repeat top center fixed;
+    -moz-background-size: cover;
+    -webkit-background-size: cover;
+    -o-background-size: cover;
+    background-size: cover;
+}
+label.error {
+    position: absolute;
+    right: 18px;
+    top: 5px;
+    color: #ef392b;
+    font-size: 12px;
+}
+</style>
+
+</head>
+
+<body>
+
+<div class="content-wrap">
+	<div class="row">
+		<div class="col-sm-12">
+			<div class="nest" id="elementClose">
+				<div class="">
+				</div>
+				<div class="body-nest" id="element">
+					<div class="panel-body">
+						<form  class="form-horizontal m" id="form-add">
+							<div class="form-group">
+								<label class="col-sm-3 control-label ">角色名称:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="text" id="name" name="name"/>
+								</div>
+							</div>
+							<div class="form-group">
+								<input type="hidden" name="prem" id="prem">
+								<label class="col-sm-3 control-label ">权限配置:</label>
+								<div class="col-sm-8">
+									<div id="tree"></div> 
+								</div>
+							</div>
+							<div class="form-group">
+								<div class="form-control-static col-sm-offset-9">
+									<button type="submit" class="btn btn-primary">提交</button>
+									<button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button>
+								</div>
+							</div>
+						</form>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<!-- 通用js -->
+<div th:include="admin/common/html/js :: onload_js">
+   
+</div>
+<!-- bootstarp 表格 -->
+<script th:src="@{/static/admin/assets/js/bootstrap/js/bootstrap-table/bootstrap-table.min.js}" type="text/javascript"></script>
+<script th:src="@{/static/admin/assets/js/bootstrap/js/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}" type="text/javascript"></script>
+<script th:src="@{/static/admin/assets/js/bootstrap/js/base_list.js}" type="text/javascript"></script>
+
+
+<!-- 弹窗 -->
+<script th:src="@{/static/admin/assets/js/layer/layer.js}" type="text/javascript"></script>
+<!-- 遮罩层 -->
+<script th:src="@{/static/admin/assets/js/blockUI/jquery.blockUI.js}" type="text/javascript"></script>
+<!--bootstarp threeView -->
+<script th:src="@{/static/admin/assets/js/bootstrap/bootstrap-treeview/js/bootstrap-treeview.js}" type="text/javascript"></script>
+
+
+<script type="text/javascript">
+$("#form-add").validate({
+	rules:{
+		name:{
+			required:true,
+			minlength: 2,
+			maxlength: 20,
+			remote: {
+                url: rootPath + "/RoleVueController/checkNameUnique",
+                type: "post",
+                dataType: "json",
+                dataFilter: function(data, type) {
+                    if (data == "0")
+                    	return true;
+                    else 
+                    	return false;
+                }
+            }
+		}
+	},
+	messages: {
+        "name": {
+            remote: "角色已经存在"
+        }
+    },
+	submitHandler:function(form){
+		add();
+	}
+});
+
+function add() {
+	 var x=$('#tree').treeview('getChecked');
+	 var prem=selectNodeIdArr(x);
+	 $("#prem").val(prem.join(","));
+	var dataFormJson=$("#form-add").serialize();
+	$.ajax({
+		cache : true,
+		type : "POST",
+		url : rootPath + "/RoleVueController/add",
+		data : dataFormJson,
+		async : false,
+		error : function(request) {
+			$.modal.alertError("系统错误");
+		},
+		success : function(data) {
+			$.operate.saveSuccess(data);
+		}
+	});
+}
+</script>
+
+<script type="text/javascript">
+/***权限配置***/
+
+function getTree() {
+
+	var tree = [];
+	$.ajax({
+		url: rootPath + "/PermissionVueController/getTreePerm",
+		type:"get",
+		async : false,
+		cache : true,
+		error : function(request) {
+			$.modal.alertError("系统错误");
+		},
+		success : function(data) {
+			if(!$.common.isEmpty(data)&&data.code==200){
+				tree.push(data.data);
+			}
+		}
+		
+		
+	})
+    return tree;
+}
+
+/**
+ * 获取子节点
+ */
+function getChildNodeIdArr(node) {
+    var ts = [];
+    if (node.nodes) {
+        for (x in node.nodes) {
+            ts.push(node.nodes[x].nodeId);
+            if (node.nodes[x].nodes) {
+                var getNodeDieDai = getChildNodeIdArr(node.nodes[x]);
+                for (j in getNodeDieDai) {
+                    ts.push(getNodeDieDai[j]);
+                }
+            }
+        }
+    } else {
+        ts.push(node.nodeId);
+    }
+    return ts;
+}
+
+/**
+ * 获取传入的选中节点id
+ */
+function selectNodeIdArr(data){
+	var ids=[];
+	if(data){
+		for(x in data){
+			ids.push(data[x].id);
+		}
+	}
+	return ids;
+}
+
+//选中父节点时,选中所有子节点
+function getChildNodeIdArr(node) {   
+    var ts = [];  
+    if (node.nodes) {    
+        for (x in node.nodes) {     
+            ts.push(node.nodes[x].nodeId);     
+            if (node.nodes[x].nodes) {      
+                var getNodeDieDai = getChildNodeIdArr(node.nodes[x]);      
+                for (j in getNodeDieDai) {       
+                        ts.push(getNodeDieDai[j]);     
+                }     
+            }    
+        }   
+    } else {    
+        ts.push(node.nodeId);   
+    }   
+    return ts;  
+}
+
+//选中所有子节点时,选中父节点 取消子节点时取消父节点
+function setParentNodeCheck(node) {
+    var parentNode = $("#tree").treeview("getNode", node.parentId);   
+    if (parentNode.nodes) {    
+        var checkedCount = 0;    
+        for (x in parentNode.nodes) {     
+            if (parentNode.nodes[x].state.checked) {      
+                checkedCount ++;     
+            } else {      
+                break;     
+            }    
+        }    
+        if (checkedCount == parentNode.nodes.length) {  //如果子节点全部被选 父全选
+            $("#tree").treeview("checkNode", parentNode.nodeId);
+            setParentNodeCheck(parentNode);    
+        }else {   //如果子节点未全部被选 父未全选
+           // $('#tree').treeview('uncheckNode', parentNode.nodeId); 
+           // setParentNodeCheck(parentNode);        
+        }   
+    }  
+}
+
+//取消父节点时 取消所有子节点
+function setChildNodeUncheck(node) { 
+    if (node.nodes) {   
+        var ts = [];    //当前节点子集中未被选中的集合 
+        for (x in node.nodes) { 
+            if (!node.nodes[x].state.checked) {  
+                ts.push(node.nodes[x].nodeId);  
+            } 
+            if (node.nodes[x].nodes) {      
+                var getNodeDieDai = node.nodes[x];   
+                
+                for (j in getNodeDieDai) {
+                    if (!getNodeDieDai.state.checked) {        
+                        ts.push(getNodeDieDai[j]); 
+                    }    
+                }     
+            }    
+        }   
+    }
+    return ts;  
+}
+
+
+
+	$(function() {
+
+		window.dd=$('#tree').treeview({
+			levels : 2,//设置默认展开级别
+			showCheckbox : 1,//这里之所以写1,是因为我引得js源码里定义1为true
+			multiSelect : 1,//这里之所以写1,是因为我引得js源码里定义1为true
+			data : getTree(),
+			color : "#000000",//设置字体加载颜色
+			backColor : "#FFFFFF",//设置背景颜色
+			selectedColor : "#428bca",//设置选中的字体颜色
+			onNodeSelected : function(event, data) {
+				// 事件代码...
+				//console.log(data);
+			},
+			onNodeChecked : function(event, node) { //选中节点 
+				var selectNodes = getChildNodeIdArr(node); //获取所有子节点      
+				if (selectNodes) { //子节点不为空,则选中所有子节点       
+					$('#tree').treeview('checkNode', [ selectNodes, {silent : true}]);
+				}
+				var parentNode = $("#tree").treeview("getNode", node.parentId);
+				setParentNodeCheck(node);
+			},
+			onNodeUnchecked : function(event, node) { //取消选中节点  
+				// 取消父节点 子节点取消
+				var selectNodes = setChildNodeUncheck(node); //获取未被选中的子节点 
+				var childNodes = getChildNodeIdArr(node); //获取所有子节点 
+				if (selectNodes && selectNodes.length == 0) { //有子节点且未被选中的子节点数目为0,则取消选中所有子节点   
+
+					$('#tree').treeview('uncheckNode', [ childNodes, {silent : true}]);
+				}
+				// 取消节点 父节点取消
+				var parentNode = $("#tree").treeview("getNode", node.parentId); //获取父节点
+				var selectNodes = getChildNodeIdArr(node);
+				setParentNodeCheck(node);
+			}
+
+		});
+	})
+</script>
+
+</body>
+
+
+</html>

+ 330 - 0
src/main/resources/templates/admin/rolevue/edit.html

@@ -0,0 +1,330 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" 
+      xmlns:sec="http://www.pollix.at/thymeleaf/shiro">
+<head th:replace="admin/common/html/tableHead :: tableHead(~{::title},~{::link},~{::style})">
+
+<title th:text=${title}></title>
+<!-- 这儿引用单独的css link -->
+<!-- Ladda for Bootstrap 3按钮加载进度插件 -->
+<link rel="stylesheet" th:href="@{/static/admin/assets/js/button/ladda/ladda.min.css}">
+<!-- bootstrap-table表单样式 -->
+<link th:href="@{/static/admin/assets/js/bootstrap/css/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
+<!-- treeview -->
+<link th:href="@{/static/admin/assets/js/bootstrap/bootstrap-treeview/css/bootstrap-treeview.css}" rel="stylesheet"/>
+
+<style type="text/css">
+
+body {
+	 color: #9ea7b3;
+    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-image: none;
+    -moz-background-size: cover;
+    -webkit-background-size: cover;
+    -o-background-size: cover;
+    background-size: cover;
+}
+label.error {
+    position: absolute;
+    right: 18px;
+    top: 5px;
+    color: #ef392b;
+    font-size: 12px;
+}
+</style>
+
+</head>
+
+<body>
+
+<div class="content-wrap">
+	<div class="row">
+		<div class="col-sm-12">
+			<div class="nest" id="elementClose">
+				<div class="">
+				</div>
+				<div class="body-nest" id="element">
+					<div class="panel-body">
+						<form  class="form-horizontal m" id="form-edit" th:object="${TvueRole}">
+							<input id="id" name="id" type="hidden" th:value="*{id}"/>
+							<div class="form-group">
+								<!-- 验证用 -->
+								<input class="form-control" type="hidden" id="checkname" th:value="*{name}"/>
+			
+								<label class="col-sm-3 control-label ">角色名称:</label>
+								<div class="col-sm-8">
+									<input class="form-control" type="text" id="name" name="name" th:value="*{name}"/>
+								</div>
+							</div>
+							<div class="form-group">
+								<input type="hidden" name="prem" id="prem">
+								<label class="col-sm-3 control-label ">权限配置:</label>
+								<div class="col-sm-8">
+									<div id="tree"></div> 
+								</div>
+							</div>
+							<div class="form-group">
+								<div class="form-control-static col-sm-offset-9">
+									<button type="submit" class="btn btn-primary">提交</button>
+									<button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button>
+								</div>
+							</div>
+						</form>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<!-- 通用js -->
+<div th:include="admin/common/html/js :: onload_js">
+   
+</div>
+<!-- bootstarp 表格 -->
+<script th:src="@{/static/admin/assets/js/bootstrap/js/bootstrap-table/bootstrap-table.min.js}" type="text/javascript"></script>
+<script th:src="@{/static/admin/assets/js/bootstrap/js/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}" type="text/javascript"></script>
+<script th:src="@{/static/admin/assets/js/bootstrap/js/base_list.js}" type="text/javascript"></script>
+
+
+<!-- 弹窗 -->
+<script th:src="@{/static/admin/assets/js/layer/layer.js}" type="text/javascript"></script>
+<!-- 遮罩层 -->
+<script th:src="@{/static/admin/assets/js/blockUI/jquery.blockUI.js}" type="text/javascript"></script>
+<!--bootstarp threeView -->
+<script th:src="@{/static/admin/assets/js/bootstrap/bootstrap-treeview/js/bootstrap-treeview.js}" type="text/javascript"></script>
+
+
+<script type="text/javascript">
+$("#form-edit").validate({
+	rules:{
+		name:{
+			required:true,
+			minlength: 2,
+			maxlength: 20,
+			remote: {
+                url: rootPath + "/RoleVueController/checkNameUnique",
+                type: "post",
+                dataType: "json",
+                dataFilter: function(data, type) {
+                	if($("#checkname").val()==$("#name").val())
+                		return true;
+                	else{
+                		if (data == "0")
+	                    	return true;
+	                    else 
+	                    	return false;
+                	}
+                }
+            }
+		}
+	},
+	messages: {
+        "name": {
+            remote: "角色已经存在"
+        }
+    },
+	submitHandler:function(form){
+		edit();
+	}
+});
+
+function edit() {
+	var x=$('#tree').treeview('getChecked');
+	var prem=selectNodeIdArr(x);
+	$("#prem").val(prem.join(","));
+	var dataFormJson=$("#form-edit").serialize();
+	$.ajax({
+		cache : true,
+		type : "POST",
+		url : rootPath + "/RoleVueController/edit",
+		data :dataFormJson,
+		async : false,
+		error : function(request) {
+			$.modal.alertError("系统错误");
+		},
+		success : function(data) {
+			$.operate.saveSuccess(data);
+		}
+	});
+}
+</script>
+
+
+
+<script type="text/javascript">
+/***权限配置***/
+
+function getTree() {
+
+	var tree = [];
+	$.ajax({
+		url: rootPath + "/PermissionVueController/getCheckPrem",
+		type:"post",
+		async : false,
+		cache : true,
+		data:{"roleId":$("#id").val()},
+		error : function(request) {
+			$.modal.alertError("系统错误");
+		},
+		success : function(data) {
+			if(!$.common.isEmpty(data)&&data.code==200){
+				tree.push(data.data);
+			}
+		}
+		
+		
+	})
+    return tree;
+}
+
+/**
+ * 获取子节点
+ */
+function getChildNodeIdArr(node) {
+    var ts = [];
+    if (node.nodes) {
+        for (x in node.nodes) {
+            ts.push(node.nodes[x].nodeId);
+            if (node.nodes[x].nodes) {
+                var getNodeDieDai = getChildNodeIdArr(node.nodes[x]);
+                for (j in getNodeDieDai) {
+                    ts.push(getNodeDieDai[j]);
+                }
+            }
+        }
+    } else {
+        ts.push(node.nodeId);
+    }
+    return ts;
+}
+
+/**
+ * 获取传入的选中节点id
+ */
+function selectNodeIdArr(data){
+	var ids=[];
+	if(data){
+		for(x in data){
+			ids.push(data[x].id);
+		}
+	}
+	return ids;
+}
+
+//选中父节点时,选中所有子节点
+function getChildNodeIdArr(node) {   
+    var ts = [];  
+    if (node.nodes) {    
+        for (x in node.nodes) {     
+            ts.push(node.nodes[x].nodeId);     
+            if (node.nodes[x].nodes) {      
+                var getNodeDieDai = getChildNodeIdArr(node.nodes[x]);      
+                for (j in getNodeDieDai) {       
+                        ts.push(getNodeDieDai[j]);     
+                }     
+            }    
+        }   
+    } else {    
+        ts.push(node.nodeId);   
+    }   
+    return ts;  
+}
+
+//选中所有子节点时,选中父节点 取消子节点时取消父节点
+function setParentNodeCheck(node) {
+    var parentNode = $("#tree").treeview("getNode", node.parentId);   
+    if (parentNode.nodes) {    
+        var checkedCount = 0;    
+        for (x in parentNode.nodes) {     
+            if (parentNode.nodes[x].state.checked) {      
+                checkedCount ++;     
+            } else {      
+                break;     
+            }    
+        }    
+        if (checkedCount == parentNode.nodes.length) {  //如果子节点全部被选 父全选
+            $("#tree").treeview("checkNode", parentNode.nodeId);
+            setParentNodeCheck(parentNode);    
+        }else {   //如果子节点未全部被选 父未全选[当前注释是因为子节点取消的时候父节点不能取消]
+           // $('#tree').treeview('uncheckNode', parentNode.nodeId); 
+           // setParentNodeCheck(parentNode);        
+        }   
+    }  
+}
+
+//取消父节点时 取消所有子节点
+function setChildNodeUncheck(node) { 
+    if (node.nodes) {   
+        var ts = [];    //当前节点子集中未被选中的集合 
+        for (x in node.nodes) { 
+            if (!node.nodes[x].state.checked) {  
+                ts.push(node.nodes[x].nodeId);  
+            } 
+            if (node.nodes[x].nodes) {      
+                var getNodeDieDai = node.nodes[x];   
+                
+                for (j in getNodeDieDai) {
+                    if (!getNodeDieDai.state.checked) {        
+                        ts.push(getNodeDieDai[j]); 
+                    }    
+                }     
+            }    
+        }   
+    }
+    return ts;  
+}
+
+
+
+	$(function() {
+
+		$('#tree').treeview({
+			levels : 2,//设置默认展开级别
+			showCheckbox : 1,//这里之所以写1,是因为我引得js源码里定义1为true
+			multiSelect : 1,//这里之所以写1,是因为我引得js源码里定义1为true
+			data : getTree(),
+			color : "#000000",//设置字体加载颜色
+			backColor : "#FFFFFF",//设置背景颜色
+			selectedColor : "#428bca",//设置选中的字体颜色
+			onNodeSelected : function(event, data) {
+				// 事件代码...
+				//console.log(data);
+			},
+			onNodeChecked : function(event, node) { //选中节点 
+				var selectNodes = getChildNodeIdArr(node); //获取所有子节点      
+				if (selectNodes) { //子节点不为空,则选中所有子节点       
+					$('#tree').treeview('checkNode', [ selectNodes, {silent : true}]);
+				}
+				var parentNode = $("#tree").treeview("getNode", node.parentId);
+				setParentNodeCheck(node);
+			},
+			onNodeUnchecked : function(event, node) { //取消选中节点  
+				// 取消父节点 子节点取消
+				var selectNodes = setChildNodeUncheck(node); //获取未被选中的子节点 
+				var childNodes = getChildNodeIdArr(node); //获取所有子节点 
+				if (selectNodes && selectNodes.length == 0) { //有子节点且未被选中的子节点数目为0,则取消选中所有子节点   
+
+					$('#tree').treeview('uncheckNode', [ childNodes, {silent : true}]);
+				}
+				// 取消节点 父节点取消
+				var parentNode = $("#tree").treeview("getNode", node.parentId); //获取父节点
+				var selectNodes = getChildNodeIdArr(node);
+				setParentNodeCheck(node);
+			}
+
+		});
+
+	})
+</script>
+
+
+</body>
+
+
+</html>

+ 204 - 0
src/main/resources/templates/admin/rolevue/list.html

@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" 
+      xmlns:sec="http://www.pollix.at/thymeleaf/shiro">
+<head th:replace="admin/common/html/head :: head_Normal(~{::title},~{::link},~{::style})">
+
+<title th:text=${title}></title>
+<!-- 这儿引用单独的css link -->
+<!-- Ladda for Bootstrap 3按钮加载进度插件 -->
+<link rel="stylesheet" th:href="@{/static/admin/assets/js/button/ladda/ladda.min.css}">
+<!-- bootstrap-table表单样式 -->
+<link th:href="@{/static/admin/assets/js/bootstrap/css/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
+
+<style type="text/css">
+/**
+*这里写单独的css样式
+*/
+.select-list ul li{
+	list-style-type: none;
+	float: left;
+}
+</style>
+
+</head>
+
+<body id="listbody">
+<!-- ###############################代码编写处############################### -->
+
+<!-- 右边内容 -->
+<div class="wrap-fluid">
+    <div class="container-fluid paper-wrap bevel tlbr">
+        <!-- 内容 -->
+        <!--标题 通用-->
+        <div th:replace="admin/common/html/title :: title(${title},${parenttitle},${isMsg},${msgHTML})">
+        </div>
+        <!-- 结束标题 通用-->
+        <div class="content-wrap">
+            <!-- 结束内容 -->
+            <div class="row">
+                <div class="col-sm-12">
+                <!-- 搜索条件 -->
+                
+                	 <div class="nest" id="inlineClose">
+                            <div class="title-alt">
+                                <h6>搜索条件</h6>
+                                <div class="titleClose">
+                                    <a class="gone" href="#inlineClose">
+                                        <span class="entypo-cancel"></span>
+                                    </a>
+                                </div>
+                                <div class="titleToggle">
+                                    <a class="nav-toggle-alt" href="#search_div" >
+                                        <span class="entypo-down-open"></span>
+                                    </a>
+                                </div>
+                            </div>
+
+                            <div class="body-nest" id="search_div" style="display: none">
+                                <div class="form_left">
+                                    <form role="form" class="form-inline">
+                                        <div class="form-group">
+                                            <label for="exampleInputEmail2" class="sr-only">角色名字</label>
+                                            <input type="text" name="searchText" placeholder="角色名字"class="form-control">
+                                        </div>
+                                        <button onclick="$.table.search(this)" class="btn btn-success" type="button"><i class="fa fa-search"></i>&nbsp;搜索</button>
+                                    </form>
+                                </div>
+                            </div>
+                        </div>
+                	<!-- END搜索条件 -->
+                    <!-- 空白页开始-->
+                    <div class="nest" id="Blank_PageClose">
+                        <div class="title-alt">
+                            <h6>表单</h6>
+                            <div class="titleClose">
+                                <a class="gone" href="#Blank_PageClose">
+                                    <span class="entypo-cancel"></span>
+                                </a>
+                            </div>
+                            <div class="titleToggle">
+                                <a class="nav-toggle-alt" href="#Blank_Page_Content">
+                                    <span class="entypo-up-open"></span>
+                                </a>
+                            </div>
+                        </div>
+                        
+                        <div class="body-nest" id="Blank_Page_Content">
+                            <!-- 工具条 -->
+                            <div class="btn-group hidden-xs" id="exampleTableEventsToolbar" role="group">
+                            	<button onclick="$.operate.add()" type="button" class="btn btn-primary">
+                                    <span class="entypo-plus-squared"></span>&nbsp;&nbsp;新增
+                                </button>
+                               <button onclick="$.operate.batRemove()" type="button" class="btn btn-info">
+                                    <span class="entypo-trash"></span>&nbsp;&nbsp;删除
+                               </button>
+                               
+                           </div>
+                            <!-- 工具条 end-->
+                           <table id="dataTable" class="table-striped footable-res footable metro-blue" data-page-size="6">
+                                   
+                                    
+                           </table>
+                           
+                           
+                        </div>
+                    </div>
+                </div>
+                <!-- 空白页结束 -->
+            </div>
+            <!-- 结束内容 -->
+        </div>
+    </div>
+</div>
+<!-- 结束右边内容 -->
+<!-- ###############################代码编写处############################### -->
+
+
+
+
+
+
+
+<!-- 右侧隐藏滑块内容 -->
+<div th:include="admin/common/html/rightHide :: rightHide">
+    
+</div>
+   <!-- END 右侧隐藏滑块内容-->
+
+<!-- 通用js -->
+<div th:include="admin/common/html/js :: onload_js">
+   
+</div>
+<!-- bootstarp 表格 -->
+<script th:src="@{/static/admin/assets/js/bootstrap/js/bootstrap-table/bootstrap-table.min.js}" type="text/javascript"></script>
+<script th:src="@{/static/admin/assets/js/bootstrap/js/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}" type="text/javascript"></script>
+<script th:src="@{/static/admin/assets/js/bootstrap/js/base_list.js}" type="text/javascript"></script>
+<!-- 导出 -->
+<script th:src="@{/static/admin/assets/js/bootstrap/extensions/export/bootstrap-table-export.js}" type="text/javascript"></script>
+<script th:src="@{/static/admin/assets/js/bootstrap/extensions/export/tableExport.js}" type="text/javascript"></script>
+
+<!-- 弹窗 -->
+<script th:src="@{/static/admin/assets/js/layer/layer.js}" type="text/javascript"></script>
+<!-- 遮罩层 -->
+<script th:src="@{/static/admin/assets/js/blockUI/jquery.blockUI.js}" type="text/javascript"></script>
+
+<script type="text/javascript">
+var dataUrl=window.rootPath+"/RoleVueController/list";
+var removeUrl=window.rootPath+"/RoleVueController/remove";
+var createUrl=window.rootPath+"/RoleVueController/add";
+var updateUrl=window.rootPath+"/RoleVueController/edit/{id}";
+var exportUrl=window.rootPath+"/RoleVueController/export";
+  var options = {
+		dataUrl: dataUrl,
+        createUrl: createUrl,
+        updateUrl: updateUrl,
+        removeUrl:removeUrl,
+        exportUrl: exportUrl,
+        sortName: "roleSort",
+        modalName: "角色",
+        search: false,
+	   dataColumns: [
+			{
+			    checkbox: true
+			},                   
+			{
+			    field: 'id',
+			    title: '序号'
+			}, 
+			
+			{
+			    field: 'name',
+			    title: '角色名称'
+			},
+			{
+			    title: '操作',
+			    formatter: function (value, row, index) {
+			        var id = row.id;
+			        var actions = [];
+			        actions.push('<a class="btn btn-success btn-xs"  href="#" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
+			        actions.push('<a class="btn btn-danger btn-xs" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
+			        return actions.join('');
+			
+			        //return '<a class="btn btn-xs btn-danger" onclick="delPermission(' + "'" + id + "'" + ')"><i class="fa fa-remove"></i>删除</a>';
+			    }
+			}]
+  };
+$(function(){
+	var oTab=$.table.oTableInit(options);
+	oTab.Init();
+})
+</script>
+
+
+<script type="text/javascript">
+
+
+
+</script>
+
+
+
+</body>
+
+
+</html>

+ 6 - 32
src/main/resources/templates/login.html

@@ -61,7 +61,7 @@
 <body>
 
 <div style="position: fixed;z-index: 9999; right: 0;">
-	<a target="_blank" href='https://gitee.com/bdj/Gyee_Frame_NX'><img src='https://gitee.com/bdj/Gyee_Frame_NX/widgets/widget_1.svg?color=f20049' alt='Fork me on Gitee'></img></a>
+	<a target="_blank" href='https://gitee.com/bdj/Gyee_Frame_NX'></a>
 </div>
 <!-- Preloader -->
 <div id="preloader">
@@ -74,8 +74,8 @@
 		<div class="row">
 			<div class="col-md-4 col-md-offset-4">
 				<div id="logo-login">
-					<h1>SpringBoot
-					<span>v2</span>
+					<h1>后台管理系统
+					<span>v1.0</span>
 					</h1>
 				</div>
 			</div>
@@ -113,36 +113,12 @@
 						</div>
 						<button class="btn btn btn-primary pull-right" type="submit">登录</button>
 					</form>
-					<a class="forgotLnk" href="index-2.html"></a>
-					<div class="or-box">
-						<center><span class="text-center login-with">登录 or <b>注册</b></span></center>
-						<div class="row">
-							<div class="col-md-6 row-block">
-								<a target="_blank" href="https://gitee.com/bdj/Gyee_Frame_NX" class="btn btn-facebook btn-block">
-								<span class="entypo-cloud space-icon"></span>Gitee</a>
-							</div>
-							<div class="col-md-6 row-block">
-								<a target="_blank" href="https://github.com/fuce1314/Gyee_Frame_NX" class="btn btn-twitter btn-block">
-								<span class="entypo-github space-icon"></span>Github</a>
-							</div>
-							
-						</div>
-						<div style="margin-top:25px" class="row">
-							<div class="col-md-6 row-block">
-								<a target="_blank" href="https://gitee.com/bdj/Gyee_Frame_NX/wikis" class="btn btn-google btn-block">
-								<span class="entypo-book-open space-icon"></span>Wiki</a>
-							</div>
-							<div class="col-md-6 row-block">
-								<a target="_blank" href="http://shang.qq.com/wpa/qunwpa?idkey=a8770621a7c51a904d667db47312b320d30e5c5581bb46103c2d5a8486cb8dce" class="btn btn-instagram btn-block">
-								<span class="entypo-qq space-icon"></span>QQ群</a>
-							</div>
-						</div>
-					</div>
+
 					<hr>
 					<div class="row-block">
 						<div class="row">
 							<div class="col-md-12 row-block">
-								<a href="index-2.html" class="btn btn-primary btn-block">新建账号</a>
+
 							</div>
 						</div>
 					</div>
@@ -150,9 +126,7 @@
 			</div>
 		</div>
 	</div>
-	<div style="text-align:center;margin:0 auto;">
-		<h6 style="color:#fff;">用心开发的脚手架</h6>
-	</div>
+
 </div>
 <div id="test1" class="gmap3">
 </div>