├── pom.xml └── src ├── main ├── java │ └── com │ │ └── carter │ │ ├── SpringbootMqttApplication.java │ │ ├── common │ │ └── ResponseBo.java │ │ ├── controller │ │ ├── AlarmController.java │ │ ├── DeviceController.java │ │ └── MessageController.java │ │ ├── mapper │ │ ├── AlarmMapper.java │ │ ├── AlarmMapper.xml │ │ ├── DeviceMapper.java │ │ ├── DeviceMapper.xml │ │ ├── MessageMapper.java │ │ └── MessageMapper.xml │ │ ├── mqtt │ │ ├── client │ │ │ └── ClientReceiveMessage.java │ │ └── pushcallback │ │ │ └── PushCallbackReceiveMessage.java │ │ ├── pojo │ │ ├── Alarm.java │ │ ├── DataObject.java │ │ ├── Device.java │ │ ├── LayUIDataGrid.java │ │ ├── Message.java │ │ └── MessageExample.java │ │ ├── service │ │ ├── AlarmService.java │ │ ├── DeviceService.java │ │ ├── JudgeAlarmService.java │ │ ├── MessageService.java │ │ ├── SaveMessage.java │ │ └── impl │ │ │ ├── AlarmServiceImpl.java │ │ │ ├── DeviceServiceImpl.java │ │ │ ├── JudgeAlarmServiceImpl.java │ │ │ ├── MessageServiceImpl.java │ │ │ └── SaveMessageImpl.java │ │ └── websocket │ │ ├── SocketClient.java │ │ ├── WebSocketConfig.java │ │ ├── WebSocketServer.java │ │ └── WebSocketService.java └── resources │ ├── application.properties │ ├── logback.xml │ ├── static │ ├── css │ │ ├── font_eolqem241z66flxr.css │ │ ├── index.css │ │ ├── main.css │ │ ├── mainent.css │ │ ├── mainexpt.css │ │ ├── new_index.css │ │ ├── projAdd.css │ │ ├── public.css │ │ ├── reg.css │ │ ├── verify.css │ │ ├── viewer.css │ │ ├── viewer.min.css │ │ ├── weui.min.css │ │ └── yw_index.css │ ├── images │ │ ├── 20160704_top1.gif │ │ ├── 7911dcb204f4aab50fd991f9ed9cdbb5.png │ │ ├── address.png │ │ ├── alipay.jpg │ │ ├── applycomplete.png │ │ ├── applyingicon.png │ │ ├── applywaiticon.png │ │ ├── attachmenticon.png │ │ ├── bf213ff3aa36f338dca3277d60ed274.png │ │ ├── bg.jpg │ │ ├── bg2.jpg │ │ ├── body_bgp.png │ │ ├── buildproject.png │ │ ├── checktip.png │ │ ├── checkwaiticon.png │ │ ├── clock_icon.png │ │ ├── close.png │ │ ├── code.jpg │ │ ├── companyicon.png │ │ ├── deadlinegreen.png │ │ ├── deadlinered.png │ │ ├── ent_user_setting.png │ │ ├── face.jpg │ │ ├── five1bgp.png │ │ ├── five2bgp.png │ │ ├── five3bgp.png │ │ ├── five4bgp.png │ │ ├── five5bgp.png │ │ ├── fly.png │ │ ├── git.png │ │ ├── gmail.png │ │ ├── head_bgp.png │ │ ├── head_bgp1920.png │ │ ├── layui.png │ │ ├── login_bg.jpg │ │ ├── loginusericon.png │ │ ├── logo.png │ │ ├── logout_icon.png │ │ ├── mainheader.png │ │ ├── manager_info_icon.png │ │ ├── mayun.png │ │ ├── myapplys.png │ │ ├── noticehead.png │ │ ├── noticeicon.png │ │ ├── noticerowicon.png │ │ ├── noticerowtimeicon.png │ │ ├── password_icon.png │ │ ├── phone.png │ │ ├── pic_delete_btn.png │ │ ├── proof_add_btn.png │ │ ├── registbody_bgp.png │ │ ├── registheadbgp.png │ │ ├── rightarrow.png │ │ ├── ticket_add_btn.png │ │ ├── unit_info_icon.png │ │ ├── userface1.jpg │ │ ├── userface2.jpg │ │ ├── userface3.jpg │ │ ├── userface4.jpg │ │ ├── userface5.jpg │ │ └── wechat.jpg │ ├── js │ │ ├── alarm.js │ │ ├── alarmSel.js │ │ ├── bodyTab.js │ │ ├── cache.js │ │ ├── devcmanage.js │ │ ├── deviceAdd.js │ │ ├── echarts.min.js │ │ ├── history.js │ │ ├── historySel.js │ │ ├── index.js │ │ ├── jquery-1.8.2.min.js │ │ └── show.js │ ├── json │ │ └── navs.json │ └── layui │ │ ├── css │ │ ├── layui.css │ │ ├── layui.mobile.css │ │ └── modules │ │ │ ├── code.css │ │ │ ├── laydate │ │ │ └── default │ │ │ │ └── laydate.css │ │ │ └── layer │ │ │ └── default │ │ │ ├── icon-ext.png │ │ │ ├── icon.png │ │ │ ├── layer.css │ │ │ ├── loading-0.gif │ │ │ ├── loading-1.gif │ │ │ └── loading-2.gif │ │ ├── font │ │ ├── iconfont.eot │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ └── iconfont.woff │ │ ├── images │ │ └── face │ │ │ ├── 0.gif │ │ │ ├── 1.gif │ │ │ ├── 10.gif │ │ │ ├── 11.gif │ │ │ ├── 12.gif │ │ │ ├── 13.gif │ │ │ ├── 14.gif │ │ │ ├── 15.gif │ │ │ ├── 16.gif │ │ │ ├── 17.gif │ │ │ ├── 18.gif │ │ │ ├── 19.gif │ │ │ ├── 2.gif │ │ │ ├── 20.gif │ │ │ ├── 21.gif │ │ │ ├── 22.gif │ │ │ ├── 23.gif │ │ │ ├── 24.gif │ │ │ ├── 25.gif │ │ │ ├── 26.gif │ │ │ ├── 27.gif │ │ │ ├── 28.gif │ │ │ ├── 29.gif │ │ │ ├── 3.gif │ │ │ ├── 30.gif │ │ │ ├── 31.gif │ │ │ ├── 32.gif │ │ │ ├── 33.gif │ │ │ ├── 34.gif │ │ │ ├── 35.gif │ │ │ ├── 36.gif │ │ │ ├── 37.gif │ │ │ ├── 38.gif │ │ │ ├── 39.gif │ │ │ ├── 4.gif │ │ │ ├── 40.gif │ │ │ ├── 41.gif │ │ │ ├── 42.gif │ │ │ ├── 43.gif │ │ │ ├── 44.gif │ │ │ ├── 45.gif │ │ │ ├── 46.gif │ │ │ ├── 47.gif │ │ │ ├── 48.gif │ │ │ ├── 49.gif │ │ │ ├── 5.gif │ │ │ ├── 50.gif │ │ │ ├── 51.gif │ │ │ ├── 52.gif │ │ │ ├── 53.gif │ │ │ ├── 54.gif │ │ │ ├── 55.gif │ │ │ ├── 56.gif │ │ │ ├── 57.gif │ │ │ ├── 58.gif │ │ │ ├── 59.gif │ │ │ ├── 6.gif │ │ │ ├── 60.gif │ │ │ ├── 61.gif │ │ │ ├── 62.gif │ │ │ ├── 63.gif │ │ │ ├── 64.gif │ │ │ ├── 65.gif │ │ │ ├── 66.gif │ │ │ ├── 67.gif │ │ │ ├── 68.gif │ │ │ ├── 69.gif │ │ │ ├── 7.gif │ │ │ ├── 70.gif │ │ │ ├── 71.gif │ │ │ ├── 8.gif │ │ │ └── 9.gif │ │ ├── lay │ │ └── modules │ │ │ ├── carousel.js │ │ │ ├── code.js │ │ │ ├── colorpicker.js │ │ │ ├── element.js │ │ │ ├── flow.js │ │ │ ├── form.js │ │ │ ├── jquery.js │ │ │ ├── laydate.js │ │ │ ├── layedit.js │ │ │ ├── layer.js │ │ │ ├── laypage.js │ │ │ ├── laytpl.js │ │ │ ├── mobile.js │ │ │ ├── rate.js │ │ │ ├── slider.js │ │ │ ├── table.js │ │ │ ├── tree.js │ │ │ ├── treeGrid.js │ │ │ ├── upload.js │ │ │ └── util.js │ │ ├── layui.all.js │ │ └── layui.js │ └── templates │ ├── alarm.html │ ├── alarmSel.html │ ├── devcmanage.html │ ├── deviceAdd.html │ ├── deviceInfo.html │ ├── history.html │ ├── historySel.html │ ├── index.html │ ├── show.html │ └── warning.html └── test └── java └── com └── carter └── SpringbootMqttApplicationTests.java /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | org.springframework.boot 7 | spring-boot-starter-parent 8 | 2.1.3.RELEASE 9 | 10 | 11 | com.carter 12 | springboot_mqtt 13 | 0.0.1-SNAPSHOT 14 | springboot_mqtt 15 | Demo project for Spring Boot 16 | 17 | 18 | 1.8 19 | 20 | 21 | 22 | 23 | org.springframework.boot 24 | spring-boot-starter-thymeleaf 25 | 26 | 27 | org.springframework.boot 28 | spring-boot-starter-web 29 | 30 | 31 | org.springframework.boot 32 | spring-boot-starter-websocket 33 | 34 | 35 | org.eclipse.paho 36 | org.eclipse.paho.client.mqttv3 37 | 1.2.0 38 | 39 | 40 | 41 | org.java-websocket 42 | Java-WebSocket 43 | 1.3.5 44 | 45 | 46 | 47 | org.mybatis.spring.boot 48 | mybatis-spring-boot-starter 49 | 2.0.0 50 | 51 | 52 | 53 | org.springframework.boot 54 | spring-boot-starter-logging 55 | 56 | 57 | 58 | 59 | 60 | mysql 61 | mysql-connector-java 62 | 63 | 64 | 65 | com.alibaba 66 | druid 67 | 1.1.13 68 | 69 | 70 | 71 | com.github.pagehelper 72 | pagehelper-spring-boot-starter 73 | 1.2.10 74 | 75 | 76 | 77 | com.fasterxml.jackson.core 78 | jackson-core 79 | 2.9.5 80 | 81 | 82 | 83 | com.fasterxml.jackson.core 84 | jackson-annotations 85 | 2.9.8 86 | 87 | 88 | com.fasterxml.jackson.core 89 | jackson-databind 90 | 2.9.5 91 | 92 | 93 | 94 | com.alibaba 95 | fastjson 96 | 1.2.15 97 | 98 | 99 | org.springframework.boot 100 | spring-boot-starter-test 101 | test 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | src/main/java 110 | 111 | 112 | src/main/resources 113 | 114 | 115 | 123 | 124 | 125 | org.springframework.boot 126 | spring-boot-maven-plugin 127 | 128 | 129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /src/main/java/com/carter/SpringbootMqttApplication.java: -------------------------------------------------------------------------------- 1 | package com.carter; 2 | 3 | import com.carter.mqtt.client.ClientReceiveMessage; 4 | import org.mybatis.spring.annotation.MapperScan; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.boot.CommandLineRunner; 7 | import org.springframework.boot.SpringApplication; 8 | import org.springframework.boot.autoconfigure.SpringBootApplication; 9 | 10 | @SpringBootApplication 11 | @MapperScan("com.carter.mapper") 12 | public class SpringbootMqttApplication implements CommandLineRunner { 13 | 14 | 15 | @Autowired 16 | ClientReceiveMessage clientReceiveMessage; 17 | 18 | public static void main(String[] args) throws Exception { 19 | SpringApplication.run(SpringbootMqttApplication.class, args); 20 | } 21 | 22 | 23 | @Override 24 | public void run(String... args) throws Exception { 25 | clientReceiveMessage.start(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/carter/common/ResponseBo.java: -------------------------------------------------------------------------------- 1 | package com.carter.common; 2 | 3 | import java.util.HashMap; 4 | 5 | public class ResponseBo extends HashMap { 6 | 7 | private static final long serialVersionUID = -8713837118340960775L; 8 | 9 | // 成功 10 | private static final Integer SUCCESS = 0; 11 | // 警告 12 | private static final Integer WARN = 1; 13 | // 异常 失败 14 | private static final Integer FAIL = 500; 15 | 16 | public ResponseBo() { 17 | put("code", SUCCESS); 18 | put("msg", "操作成功"); 19 | } 20 | 21 | public static ResponseBo error(Object msg) { 22 | ResponseBo responseBo = new ResponseBo(); 23 | responseBo.put("code", FAIL); 24 | responseBo.put("msg", msg); 25 | return responseBo; 26 | } 27 | 28 | public static ResponseBo warn(Object msg) { 29 | ResponseBo responseBo = new ResponseBo(); 30 | responseBo.put("code", WARN); 31 | responseBo.put("msg", msg); 32 | return responseBo; 33 | } 34 | 35 | public static ResponseBo ok(Object msg) { 36 | ResponseBo responseBo = new ResponseBo(); 37 | responseBo.put("code", SUCCESS); 38 | responseBo.put("msg", msg); 39 | return responseBo; 40 | } 41 | 42 | public static ResponseBo ok() { 43 | return new ResponseBo(); 44 | } 45 | 46 | public static ResponseBo error() { 47 | return ResponseBo.error(""); 48 | } 49 | 50 | @Override 51 | public ResponseBo put(String key, Object value) { 52 | super.put(key, value); 53 | return this; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/carter/controller/DeviceController.java: -------------------------------------------------------------------------------- 1 | package com.carter.controller; 2 | 3 | import com.carter.common.ResponseBo; 4 | import com.carter.mapper.AlarmMapper; 5 | import com.carter.mapper.DeviceMapper; 6 | import com.carter.pojo.Alarm; 7 | import com.carter.pojo.Device; 8 | import com.carter.pojo.LayUIDataGrid; 9 | import com.carter.service.AlarmService; 10 | import com.carter.service.DeviceService; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.http.HttpRequest; 13 | import org.springframework.stereotype.Controller; 14 | import org.springframework.ui.Model; 15 | import org.springframework.web.bind.annotation.RequestMapping; 16 | import org.springframework.web.bind.annotation.ResponseBody; 17 | 18 | import javax.annotation.Resource; 19 | import java.util.Date; 20 | import java.util.HashMap; 21 | import java.util.List; 22 | 23 | @Controller 24 | public class DeviceController { 25 | 26 | @Autowired 27 | private AlarmService alarmServiceImpl; 28 | 29 | @Autowired 30 | private DeviceService deviceServiceImpl; 31 | 32 | @RequestMapping("selDeviceInfo") 33 | public String selDeviceInfo(Model model, Integer alarmId) { 34 | Alarm alarm =alarmServiceImpl.selectByPrimaryKey(alarmId); 35 | Device device =deviceServiceImpl.selectByPrimaryKey(alarm.getDevcId()); 36 | model.addAttribute("devcName", device.getName()); 37 | model.addAttribute("code", device.getCode()); 38 | model.addAttribute("type", device.getType()); 39 | if (device.getStatus().equals("0")) { 40 | model.addAttribute("status", "运行中"); 41 | } else { 42 | model.addAttribute("status", "设备离线"); 43 | } 44 | if (device.getAlarmStatus().equals("0")) { 45 | model.addAttribute("alarmStatus", "正常"); 46 | } else { 47 | model.addAttribute("alarmStatus", "警报中"); 48 | } 49 | model.addAttribute("dutyPerson", device.getDutyPerson()); 50 | model.addAttribute("descript", device.getDescript()); 51 | return "deviceInfo"; 52 | } 53 | 54 | @RequestMapping("devcManage") 55 | public String devcManage(Model model) { 56 | //查询下拉框列表 57 | List list = deviceServiceImpl.selectDevcNameDistinct(); 58 | model.addAttribute("optionText",list); 59 | return "devcmanage"; 60 | } 61 | 62 | @RequestMapping("selDevcManageInfo") 63 | @ResponseBody 64 | public LayUIDataGrid selDevcManageInfo(int page, int limit,String devcNameParam,String typeParam,String devcStatusParam,String alarmStatusParam) { 65 | HashMap map = new HashMap<>(); 66 | 67 | map.put("devcName",devcNameParam); 68 | map.put("typeParam",typeParam); 69 | if (devcStatusParam!=null&&!devcStatusParam.equals("")){ 70 | if (devcStatusParam.equals("设备离线")){ 71 | map.put("devcStatusParam","0"); 72 | }else{ 73 | map.put("devcStatusParam","1"); 74 | } 75 | } 76 | 77 | if (alarmStatusParam!=null&&!alarmStatusParam.equals("")){ 78 | if (alarmStatusParam.equals("正常")){ 79 | map.put("alarmStatusParam","0"); 80 | }else{ 81 | map.put("alarmStatusParam","1"); 82 | } 83 | } 84 | 85 | 86 | LayUIDataGrid dataGrid = deviceServiceImpl.selDevcManageInfo(page, limit, map); 87 | return dataGrid; 88 | } 89 | 90 | @RequestMapping("deviceAdd") 91 | public String deviceAdd(Model model,int deviceId,String devcName, 92 | String clientId,String code,String type, 93 | String status,String alarmStatus, 94 | String createPerson,String dutyPerson,String descript){ 95 | model.addAttribute("deviceId",deviceId); 96 | model.addAttribute("devcName",devcName); 97 | model.addAttribute("clientId",clientId); 98 | model.addAttribute("code",code); 99 | model.addAttribute("type",type); 100 | model.addAttribute("status",status); 101 | model.addAttribute("alarmStatus",alarmStatus); 102 | model.addAttribute("createPerson",createPerson); 103 | model.addAttribute("dutyPerson",dutyPerson); 104 | model.addAttribute("descript",descript); 105 | return "deviceAdd"; 106 | } 107 | 108 | @RequestMapping("addConfirm") 109 | @ResponseBody 110 | public ResponseBo addConfirm(int deviceId,String devcName, 111 | String clientId,String code,String type, 112 | String status,String alarmStatus, 113 | String createPerson,String dutyPerson,String descript){ 114 | 115 | if (devcName==null||devcName.equals("") 116 | ||clientId==null||clientId.equals("") 117 | ||code==null||code.equals("") 118 | ||type==null||type.equals("") 119 | ||status==null||status.equals("") 120 | ||alarmStatus==null||alarmStatus.equals("") 121 | ||createPerson==null||createPerson.equals("") 122 | ||dutyPerson==null||dutyPerson.equals("") 123 | ||descript==null||descript.equals("") 124 | ){ 125 | return ResponseBo.error("请填写所有信息"); 126 | } 127 | 128 | Device device = new Device(); 129 | device.setName(devcName); 130 | device.setClientId(clientId); 131 | device.setCode(code); 132 | device.setType(type); 133 | device.setStatus(status); 134 | device.setAlarmStatus(alarmStatus); 135 | device.setCreatePerson(createPerson); 136 | device.setCreateTime(new Date()); 137 | device.setDutyPerson(dutyPerson); 138 | device.setDescript(descript); 139 | //添加 140 | if (deviceId==-1){ 141 | 142 | //查询设备名称是否重复 143 | Device deviceCheck = deviceServiceImpl.selectDeviceByDevcName(device.getName()); 144 | if (deviceCheck!=null){ 145 | return ResponseBo.error("设备名已存在"); 146 | }else{ 147 | int index = deviceServiceImpl.deviceAdd(device); 148 | if (index>0){ 149 | return ResponseBo.ok("设备添加成功"); 150 | }else{ 151 | return ResponseBo.error("设备添加失败"); 152 | } 153 | } 154 | }else if (deviceId!=-1){ 155 | device.setDeviceId(deviceId); 156 | //查询设备名称是否重复 157 | Device deviceCheck = deviceServiceImpl.selectDeviceByDevcName(device.getName()); 158 | if (deviceCheck!=null&&deviceCheck.getDeviceId()!=deviceId) { 159 | return ResponseBo.error("设备名已存在"); 160 | }else{ 161 | int index = deviceServiceImpl.deviceUpd(device); 162 | if (index>0){ 163 | return ResponseBo.ok("设备编辑成功"); 164 | }else { 165 | return ResponseBo.error("设备编辑失败"); 166 | } 167 | } 168 | } 169 | 170 | return ResponseBo.error("操作异常"); 171 | } 172 | 173 | @RequestMapping("delDevice") 174 | @ResponseBody 175 | public ResponseBo delDevice(int deviceId){ 176 | try { 177 | int index = deviceServiceImpl.deviceDel(deviceId); 178 | return ResponseBo.ok("设备删除成功"); 179 | } catch (Exception e) { 180 | return ResponseBo.error("设备删除失败"); 181 | } 182 | } 183 | } 184 | -------------------------------------------------------------------------------- /src/main/java/com/carter/controller/MessageController.java: -------------------------------------------------------------------------------- 1 | package com.carter.controller; 2 | 3 | import com.carter.pojo.Device; 4 | import com.carter.pojo.LayUIDataGrid; 5 | import com.carter.pojo.Message; 6 | import com.carter.service.DeviceService; 7 | import com.carter.service.MessageService; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Controller; 10 | import org.springframework.ui.Model; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | import org.springframework.web.bind.annotation.RequestParam; 13 | import org.springframework.web.bind.annotation.ResponseBody; 14 | 15 | import javax.servlet.http.HttpServletResponse; 16 | import java.io.IOException; 17 | import java.util.HashMap; 18 | import java.util.List; 19 | 20 | @Controller 21 | public class MessageController { 22 | 23 | @Autowired 24 | private MessageService messageServiceImpl; 25 | 26 | @Autowired 27 | private DeviceService deviceServiceImpl; 28 | 29 | /** 30 | * 分页查询历史数据 31 | * @param page 32 | * @param limit 33 | * @return 34 | */ 35 | @RequestMapping("selhistory") 36 | @ResponseBody 37 | public LayUIDataGrid selhistory(int page,int limit,String deviceParam,String typeParam,String startParam,String endParam){ 38 | HashMap map = new HashMap<>(); 39 | map.put("deviceParam",deviceParam); 40 | if (typeParam!=null&&typeParam!=""){ 41 | if (typeParam.equals("湿度")){ 42 | map.put("typeParam","00"); 43 | }else if (typeParam.equals("温度")){ 44 | map.put("typeParam","01"); 45 | }else if (typeParam.equals("六氟化硫浓度")){ 46 | map.put("typeParam","02"); 47 | } 48 | } 49 | map.put("startParam",startParam); 50 | map.put("endParam",endParam); 51 | LayUIDataGrid show = messageServiceImpl.show(page, limit,map); 52 | return show; 53 | } 54 | 55 | /** 56 | * 实时数据显示页面跳转 57 | * @return 58 | */ 59 | @RequestMapping("show") 60 | public String show(Model model){ 61 | //查询下拉框列表 62 | List list = deviceServiceImpl.selectDevcNameDistinct(); 63 | model.addAttribute("optionText",list); 64 | return "show"; 65 | } 66 | 67 | /** 68 | * 初始化温湿度变化曲线图 69 | * @param devcName 70 | */ 71 | @RequestMapping("showInit") 72 | @ResponseBody 73 | public void showInit(@RequestParam String devcName, HttpServletResponse response){ 74 | Device device = deviceServiceImpl.selectDeviceByDevcName(devcName); 75 | try { 76 | response.getWriter().write(device.getClientId()); 77 | } catch (IOException e) { 78 | e.printStackTrace(); 79 | } 80 | messageServiceImpl.showInit(device.getClientId()); 81 | } 82 | 83 | /** 84 | * 历史数据查询页面跳转 85 | * @return 86 | */ 87 | @RequestMapping("historySel") 88 | public String select(Model model){ 89 | //查询下拉框列表 90 | List list = deviceServiceImpl.selectDevcNameDistinct(); 91 | model.addAttribute("optionText",list); 92 | return "historySel"; 93 | } 94 | 95 | /** 96 | * 历史数据统计页面跳转 97 | * @return 98 | */ 99 | @RequestMapping("history") 100 | public String history(Model model){ 101 | //查询下拉框列表 102 | List list = deviceServiceImpl.selectDevcNameDistinct(); 103 | model.addAttribute("optionText",list); 104 | return "history"; 105 | } 106 | 107 | /** 108 | * 根据条件筛选查询历史数据绘图 109 | * @param deviceParam 110 | * @param startParam 111 | * @param endParam 112 | * @return 113 | */ 114 | @RequestMapping("showHistory") 115 | @ResponseBody 116 | public List selHistory(String deviceParam, String startParam, String endParam){ 117 | Device device = deviceServiceImpl.selectDeviceByDevcName(deviceParam); 118 | HashMap map = new HashMap<>(); 119 | map.put("deviceParam",device.getClientId()); 120 | map.put("startParam",startParam); 121 | map.put("endParam",endParam); 122 | List messages = messageServiceImpl.selHistory(map); 123 | return messages; 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /src/main/java/com/carter/mapper/AlarmMapper.java: -------------------------------------------------------------------------------- 1 | package com.carter.mapper; 2 | 3 | import com.carter.pojo.Alarm; 4 | import org.apache.ibatis.annotations.Param; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | public interface AlarmMapper { 10 | int count(String type, String startTime, String endTime,int deviceId); 11 | 12 | List> selAlarmHistory(@Param("params") Map map); 13 | 14 | int deleteByPrimaryKey(Integer alarmId); 15 | 16 | int insert(Alarm record); 17 | 18 | int insertSelective(Alarm record); 19 | 20 | Alarm selectByPrimaryKey(Integer alarmId); 21 | 22 | List selectAlarmByDevcId(Integer devcId); 23 | 24 | List selectAlarmNoDealByDevcId(Integer devcId); 25 | 26 | int updateByPrimaryKeySelective(Alarm record); 27 | 28 | int updateByPrimaryKey(Alarm record); 29 | } -------------------------------------------------------------------------------- /src/main/java/com/carter/mapper/DeviceMapper.java: -------------------------------------------------------------------------------- 1 | package com.carter.mapper; 2 | 3 | import com.carter.pojo.Device; 4 | import org.apache.ibatis.annotations.Param; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | public interface DeviceMapper { 10 | 11 | Device selectDeviceByDevcName(String devcName); 12 | 13 | Device selectDeviceByClientid(String clientid); 14 | 15 | List selDevcManageInfo(@Param("params") Map map); 16 | 17 | List selectDevcNameDistinct(); 18 | 19 | int countDevcStatus(String status); 20 | 21 | int countAlarmStatus(String alarmStatus); 22 | 23 | int deleteByPrimaryKey(Integer deviceId); 24 | 25 | int insert(Device record); 26 | 27 | int insertSelective(Device record); 28 | 29 | Device selectByPrimaryKey(Integer deviceId); 30 | 31 | int updateByPrimaryKeySelective(Device record); 32 | 33 | int updateByPrimaryKey(Device record); 34 | } -------------------------------------------------------------------------------- /src/main/java/com/carter/mapper/MessageMapper.java: -------------------------------------------------------------------------------- 1 | package com.carter.mapper; 2 | 3 | import com.carter.pojo.Message; 4 | import com.carter.pojo.MessageExample; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | import java.util.Map; 9 | 10 | public interface MessageMapper { 11 | 12 | List selRecentlyByClientid(String clinetid); 13 | 14 | List selHistory(@Param("params") Map map); 15 | 16 | List> selHistoryMap(@Param("params") Map map); 17 | 18 | int countByExample(MessageExample example); 19 | 20 | int deleteByExample(MessageExample example); 21 | 22 | int deleteByPrimaryKey(Integer id); 23 | 24 | int insert(Message record); 25 | 26 | int insertSelective(Message record); 27 | 28 | List selectByExample(MessageExample example); 29 | 30 | Message selectByPrimaryKey(Integer id); 31 | 32 | int updateByExampleSelective(@Param("record") Message record, @Param("example") MessageExample example); 33 | 34 | int updateByExample(@Param("record") Message record, @Param("example") MessageExample example); 35 | 36 | int updateByPrimaryKeySelective(Message record); 37 | 38 | int updateByPrimaryKey(Message record); 39 | } -------------------------------------------------------------------------------- /src/main/java/com/carter/mqtt/client/ClientReceiveMessage.java: -------------------------------------------------------------------------------- 1 | package com.carter.mqtt.client; 2 | 3 | import com.carter.mqtt.pushcallback.PushCallbackReceiveMessage; 4 | import org.eclipse.paho.client.mqttv3.MqttClient; 5 | import org.eclipse.paho.client.mqttv3.MqttConnectOptions; 6 | import org.eclipse.paho.client.mqttv3.MqttTopic; 7 | import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Component; 10 | 11 | import java.util.concurrent.ScheduledExecutorService; 12 | 13 | 14 | @Component 15 | public class ClientReceiveMessage { 16 | public static final String SERVER_URL = "tcp://115.29.175.26:1883"; 17 | public static final String TOPIC = "humiture"; 18 | public static final String clientid = "clientReceiveMessage"; 19 | 20 | private MqttClient client; 21 | private MqttConnectOptions options; 22 | 23 | private String userName = "mosquitto"; 24 | private String passWord = "mosquitto"; 25 | 26 | private ScheduledExecutorService scheduler; 27 | 28 | @Autowired 29 | private PushCallbackReceiveMessage pushCallbackReceiveMessage; 30 | 31 | public void start() throws Exception{ 32 | client = new MqttClient(SERVER_URL, clientid, new MemoryPersistence()); 33 | options = new MqttConnectOptions(); 34 | options.setCleanSession(true); 35 | options.setUserName(userName); 36 | options.setPassword(passWord.toCharArray()); 37 | options.setConnectionTimeout(20); 38 | options.setKeepAliveInterval(20); 39 | client.setCallback(pushCallbackReceiveMessage); 40 | MqttTopic topic = client.getTopic(TOPIC); 41 | client.connect(options); 42 | int[] Qos = {1}; 43 | String[] topic1 = {TOPIC}; 44 | client.subscribe(topic1,Qos); 45 | } 46 | 47 | 48 | public String getTOPIC() { 49 | return TOPIC; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/carter/mqtt/pushcallback/PushCallbackReceiveMessage.java: -------------------------------------------------------------------------------- 1 | package com.carter.mqtt.pushcallback; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import com.carter.mqtt.client.ClientReceiveMessage; 5 | import com.carter.pojo.Message; 6 | import com.carter.service.JudgeAlarmService; 7 | import com.carter.service.SaveMessage; 8 | import com.carter.websocket.SocketClient; 9 | import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; 10 | import org.eclipse.paho.client.mqttv3.MqttCallback; 11 | import org.eclipse.paho.client.mqttv3.MqttMessage; 12 | import org.springframework.beans.factory.annotation.Autowired; 13 | import org.springframework.stereotype.Component; 14 | 15 | import java.util.Date; 16 | import java.util.HashMap; 17 | 18 | @Component 19 | public class PushCallbackReceiveMessage implements MqttCallback { 20 | 21 | @Autowired 22 | private SaveMessage saveMessageImpl; 23 | 24 | @Autowired 25 | private SocketClient socketClient; 26 | 27 | @Autowired 28 | private JudgeAlarmService judgeAlarmServiceImpl; 29 | 30 | @Autowired 31 | private ClientReceiveMessage clientReceiveMessage; 32 | 33 | private Message temperatureMessage = new Message(); 34 | private Message humidityMessage = new Message(); 35 | private Message sf6Message = new Message(); 36 | 37 | String temperatureFlag="0"; 38 | String humidityFlag="0"; 39 | String sf6Flag="0"; 40 | 41 | @Override 42 | //处理链接断开 43 | public void connectionLost(Throwable throwable) { 44 | // 连接丢失后,一般在这里面进行重连 45 | System.out.println(throwable.getMessage()); 46 | System.out.println("连接断开,开始重连......"); 47 | try { 48 | clientReceiveMessage.start(); 49 | System.out.println("重连成功"); 50 | } catch (Exception e) { 51 | System.out.println("重连失败,原因:"+e.toString()); 52 | } 53 | } 54 | 55 | @Override 56 | //处理消息送达 57 | public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { 58 | String msg = new String(mqttMessage.getPayload()); 59 | System.out.println("接收消息主题 : " + s); 60 | System.out.println("接收消息Qos : " + mqttMessage.getQos()); 61 | System.out.println("接收消息内容 : " + msg); 62 | String[] msgStr = msg.split(" "); 63 | 64 | //湿度对象设值 65 | StringBuilder sb = new StringBuilder(msgStr[1]); 66 | sb.insert(2,"."); 67 | humidityMessage.setTopic(s); 68 | humidityMessage.setValue(sb.toString()); 69 | humidityMessage.setType("00"); 70 | humidityMessage.setTime(new Date()); 71 | humidityMessage.setClientid(msgStr[0]); 72 | 73 | //温度对象设值 74 | StringBuilder sb2 = new StringBuilder(msgStr[2]); 75 | sb2.insert(2,"."); 76 | temperatureMessage.setTopic(s); 77 | temperatureMessage.setValue(sb2.toString()); 78 | temperatureMessage.setType("01"); 79 | temperatureMessage.setTime(new Date()); 80 | temperatureMessage.setClientid(msgStr[0]); 81 | 82 | //六氟化硫浓度对象设值 83 | sf6Message.setTopic(s); 84 | sf6Message.setValue(msgStr[3]); 85 | sf6Message.setType("02"); 86 | sf6Message.setTime(new Date()); 87 | sf6Message.setClientid(msgStr[0]); 88 | 89 | //判断数据格式是否正确 90 | //判断湿度是否为0或正数 91 | boolean hCheck = msgStr[1].matches("^[0-9]\\d*|0$"); 92 | //判断温度是否为数字 93 | boolean tCheck = msgStr[2].matches("^-?[0-9]\\d*|0$"); 94 | //判断六氟化硫浓度是否为0或正数 95 | boolean sf6Check = msgStr[3].matches("^[0-9]\\d*|0$"); 96 | 97 | if (hCheck&&tCheck&&sf6Check){ 98 | 99 | //向socket传值 100 | socketClient.groupSending(JSON.toJSONString(temperatureMessage)); 101 | socketClient.groupSending(JSON.toJSONString(humidityMessage)); 102 | socketClient.groupSending(JSON.toJSONString(sf6Message)); 103 | 104 | if (!msgStr[1].equals(humidityFlag)) { 105 | //保存湿度数据 106 | saveMessageImpl.save(humidityMessage); 107 | System.out.println("湿度已保存"); 108 | humidityFlag=msgStr[1]; 109 | }else{ 110 | System.out.println("湿度没有变化,不保存"); 111 | } 112 | 113 | if (!msgStr[2].equals(temperatureFlag)){ 114 | //保存温度数据 115 | saveMessageImpl.save(temperatureMessage); 116 | System.out.println("温度已保存"); 117 | 118 | temperatureFlag=msgStr[2]; 119 | }else{ 120 | System.out.println("温度没有变化,不保存"); 121 | } 122 | 123 | if (!msgStr[3].equals(sf6Flag)) { 124 | //保存湿度数据 125 | saveMessageImpl.save(sf6Message); 126 | System.out.println("六氟化硫浓度已保存"); 127 | sf6Flag=msgStr[3]; 128 | }else{ 129 | System.out.println("六氟化硫浓度没有变化,不保存"); 130 | } 131 | 132 | //判断数据是否正常,若异常则发送警报 133 | HashMap map = new HashMap<>(); 134 | map.put("humidityFlag",humidityFlag); 135 | map.put("temperatureFlag",temperatureFlag); 136 | map.put("sf6Flag",sf6Flag); 137 | map.put("newHumidity",msgStr[1]); 138 | map.put("newTemperature",msgStr[2]); 139 | map.put("newSf6",msgStr[3]); 140 | map.put("clientid",msgStr[0]); 141 | judgeAlarmServiceImpl.judgeAlarm(map); 142 | }else { 143 | throw new Exception("数据异常"); 144 | } 145 | 146 | 147 | } 148 | 149 | @Override 150 | public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { 151 | } 152 | } -------------------------------------------------------------------------------- /src/main/java/com/carter/pojo/Alarm.java: -------------------------------------------------------------------------------- 1 | package com.carter.pojo; 2 | 3 | import java.util.Date; 4 | 5 | public class Alarm { 6 | private Integer alarmId; 7 | 8 | private String code; 9 | 10 | private String type; 11 | 12 | private String alarmText; 13 | 14 | private Date startTime; 15 | 16 | private String holdTime; 17 | 18 | private Date endTime; 19 | 20 | private Integer devcId; 21 | 22 | private String status; 23 | 24 | public Integer getAlarmId() { 25 | return alarmId; 26 | } 27 | 28 | public void setAlarmId(Integer alarmId) { 29 | this.alarmId = alarmId; 30 | } 31 | 32 | public String getCode() { 33 | return code; 34 | } 35 | 36 | public void setCode(String code) { 37 | this.code = code == null ? null : code.trim(); 38 | } 39 | 40 | public String getType() { 41 | return type; 42 | } 43 | 44 | public void setType(String type) { 45 | this.type = type == null ? null : type.trim(); 46 | } 47 | 48 | public String getAlarmText() { 49 | return alarmText; 50 | } 51 | 52 | public void setAlarmText(String alarmText) { 53 | this.alarmText = alarmText == null ? null : alarmText.trim(); 54 | } 55 | 56 | public Date getStartTime() { 57 | return startTime; 58 | } 59 | 60 | public void setStartTime(Date startTime) { 61 | this.startTime = startTime; 62 | } 63 | 64 | public String getHoldTime() { 65 | return holdTime; 66 | } 67 | 68 | public void setHoldTime(String holdTime) { 69 | this.holdTime = holdTime; 70 | } 71 | 72 | public Date getEndTime() { 73 | return endTime; 74 | } 75 | 76 | public void setEndTime(Date endTime) { 77 | this.endTime = endTime; 78 | } 79 | 80 | public Integer getDevcId() { 81 | return devcId; 82 | } 83 | 84 | public void setDevcId(Integer devcId) { 85 | this.devcId = devcId; 86 | } 87 | 88 | public String getStatus() { 89 | return status; 90 | } 91 | 92 | public void setStatus(String status) { 93 | this.status = status == null ? null : status.trim(); 94 | } 95 | } -------------------------------------------------------------------------------- /src/main/java/com/carter/pojo/DataObject.java: -------------------------------------------------------------------------------- 1 | package com.carter.pojo; 2 | 3 | public class DataObject { 4 | private int timeFlag; 5 | private int temperature; 6 | private int humidity; 7 | private int sf6; 8 | 9 | public DataObject(int timeFlag, int temperature, int humidity, int sf6) { 10 | this.timeFlag = timeFlag; 11 | this.temperature = temperature; 12 | this.humidity = humidity; 13 | this.sf6 = sf6; 14 | } 15 | 16 | public int getTimeFlag() { 17 | return timeFlag; 18 | } 19 | 20 | public void setTimeFlag(int timeFlag) { 21 | this.timeFlag = timeFlag; 22 | } 23 | 24 | public int getTemperature() { 25 | return temperature; 26 | } 27 | 28 | public void setTemperature(int temperature) { 29 | this.temperature = temperature; 30 | } 31 | 32 | public int getHumidity() { 33 | return humidity; 34 | } 35 | 36 | public void setHumidity(int humidity) { 37 | this.humidity = humidity; 38 | } 39 | 40 | public int getSf6() { 41 | return sf6; 42 | } 43 | 44 | public void setSf6(int sf6) { 45 | this.sf6 = sf6; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/carter/pojo/Device.java: -------------------------------------------------------------------------------- 1 | package com.carter.pojo; 2 | 3 | import java.util.Date; 4 | 5 | public class Device { 6 | private Integer deviceId; 7 | 8 | private String clientId; 9 | 10 | private String status; 11 | 12 | private String name; 13 | 14 | private String dutyPerson; 15 | 16 | private String code; 17 | 18 | private String descript; 19 | 20 | private Date createTime; 21 | 22 | private String createPerson; 23 | 24 | private String memo; 25 | 26 | private String alarmStatus; 27 | 28 | private String type; 29 | 30 | public String getType() { 31 | return type; 32 | } 33 | 34 | public void setType(String type) { 35 | this.type = type; 36 | } 37 | 38 | public Integer getDeviceId() { 39 | return deviceId; 40 | } 41 | 42 | public void setDeviceId(Integer deviceId) { 43 | this.deviceId = deviceId; 44 | } 45 | 46 | public String getClientId() { 47 | return clientId; 48 | } 49 | 50 | public void setClientId(String clientId) { 51 | this.clientId = clientId == null ? null : clientId.trim(); 52 | } 53 | 54 | public String getStatus() { 55 | return status; 56 | } 57 | 58 | public void setStatus(String status) { 59 | this.status = status == null ? null : status.trim(); 60 | } 61 | 62 | public String getName() { 63 | return name; 64 | } 65 | 66 | public void setName(String name) { 67 | this.name = name == null ? null : name.trim(); 68 | } 69 | 70 | public String getDutyPerson() { 71 | return dutyPerson; 72 | } 73 | 74 | public void setDutyPerson(String dutyPerson) { 75 | this.dutyPerson = dutyPerson == null ? null : dutyPerson.trim(); 76 | } 77 | 78 | public String getCode() { 79 | return code; 80 | } 81 | 82 | public void setCode(String code) { 83 | this.code = code == null ? null : code.trim(); 84 | } 85 | 86 | public String getDescript() { 87 | return descript; 88 | } 89 | 90 | public void setDescript(String descript) { 91 | this.descript = descript == null ? null : descript.trim(); 92 | } 93 | 94 | public Date getCreateTime() { 95 | return createTime; 96 | } 97 | 98 | public void setCreateTime(Date createTime) { 99 | this.createTime = createTime; 100 | } 101 | 102 | public String getCreatePerson() { 103 | return createPerson; 104 | } 105 | 106 | public void setCreatePerson(String createPerson) { 107 | this.createPerson = createPerson == null ? null : createPerson.trim(); 108 | } 109 | 110 | public String getMemo() { 111 | return memo; 112 | } 113 | 114 | public void setMemo(String memo) { 115 | this.memo = memo == null ? null : memo.trim(); 116 | } 117 | 118 | public String getAlarmStatus() { 119 | return alarmStatus; 120 | } 121 | 122 | public void setAlarmStatus(String alarmStatus) { 123 | this.alarmStatus = alarmStatus == null ? null : alarmStatus.trim(); 124 | } 125 | } -------------------------------------------------------------------------------- /src/main/java/com/carter/pojo/LayUIDataGrid.java: -------------------------------------------------------------------------------- 1 | package com.carter.pojo; 2 | 3 | import java.util.List; 4 | 5 | public class LayUIDataGrid { 6 | private List data; 7 | private long count; 8 | 9 | private Integer code=0; 10 | 11 | public Integer getCode() { 12 | return code; 13 | } 14 | 15 | public void setCode(Integer code) { 16 | this.code = code; 17 | } 18 | 19 | public List getData() { 20 | return data; 21 | } 22 | 23 | public void setData(List data) { 24 | this.data = data; 25 | } 26 | 27 | public long getCount() { 28 | return count; 29 | } 30 | 31 | public void setCount(long total) { 32 | this.count = total; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/carter/pojo/Message.java: -------------------------------------------------------------------------------- 1 | package com.carter.pojo; 2 | 3 | import java.text.SimpleDateFormat; 4 | import java.util.Date; 5 | 6 | public class Message { 7 | private Integer id; 8 | 9 | private String topic; 10 | 11 | private String value; 12 | 13 | private String type; 14 | 15 | private Date time; 16 | 17 | private String clientid; 18 | 19 | public Integer getId() { 20 | return id; 21 | } 22 | 23 | public void setId(Integer id) { 24 | this.id = id; 25 | } 26 | 27 | public String getTopic() { 28 | return topic; 29 | } 30 | 31 | public void setTopic(String topic) { 32 | this.topic = topic == null ? null : topic.trim(); 33 | } 34 | 35 | public String getValue() { 36 | return value; 37 | } 38 | 39 | public void setValue(String value) { 40 | this.value = value == null ? null : value.trim(); 41 | } 42 | 43 | public String getType() { 44 | return type; 45 | } 46 | 47 | public void setType(String type) { 48 | this.type = type == null ? null : type.trim(); 49 | } 50 | 51 | public Date getTime() { 52 | return time; 53 | } 54 | 55 | public void setTime(Date time) { 56 | this.time = time; 57 | } 58 | 59 | public String getClientid() { 60 | return clientid; 61 | } 62 | 63 | public void setClientid(String clientid) { 64 | this.clientid = clientid == null ? null : clientid.trim(); 65 | } 66 | 67 | @Override 68 | public String toString() { 69 | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss") ; 70 | return "Message{" + 71 | "id=" + id + 72 | ", topic='" + topic + '\'' + 73 | ", value='" + value + '\'' + 74 | ", type='" + type + '\'' + 75 | ", time=" + time + 76 | ", clientid='" + clientid + '\'' + 77 | '}'; 78 | } 79 | } -------------------------------------------------------------------------------- /src/main/java/com/carter/service/AlarmService.java: -------------------------------------------------------------------------------- 1 | package com.carter.service; 2 | 3 | import com.carter.pojo.Alarm; 4 | import com.carter.pojo.LayUIDataGrid; 5 | 6 | import java.util.Map; 7 | 8 | public interface AlarmService { 9 | int count(String type,String startTime,String endTime,int deviceId); 10 | 11 | LayUIDataGrid selAlarmHistory(int page, int limit, Map map); 12 | 13 | int deleteByPrimaryKey(Integer alarmId); 14 | 15 | int updateByPrimaryKeySelective(Alarm record); 16 | 17 | Alarm selectByPrimaryKey(Integer alarmId); 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/carter/service/DeviceService.java: -------------------------------------------------------------------------------- 1 | package com.carter.service; 2 | 3 | import com.carter.pojo.Device; 4 | import com.carter.pojo.LayUIDataGrid; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | public interface DeviceService { 10 | Device selectDeviceByDevcName(String devcName); 11 | 12 | Device selectDeviceByClientid(String clientid); 13 | 14 | Device selectByPrimaryKey(Integer deviceId); 15 | 16 | LayUIDataGrid selDevcManageInfo(int page, int limit, Map map); 17 | 18 | int deviceAdd(Device device); 19 | 20 | int deviceUpd(Device device); 21 | 22 | int deviceDel(int deviceId); 23 | 24 | int countDevcStatus(String status); 25 | 26 | int countAlarmStatus(String alarmStatus); 27 | 28 | List selectDevcNameDistinct(); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/carter/service/JudgeAlarmService.java: -------------------------------------------------------------------------------- 1 | package com.carter.service; 2 | 3 | import java.util.Map; 4 | 5 | public interface JudgeAlarmService { 6 | void judgeAlarm(Map map); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/carter/service/MessageService.java: -------------------------------------------------------------------------------- 1 | package com.carter.service; 2 | 3 | import com.carter.pojo.LayUIDataGrid; 4 | import com.carter.pojo.Message; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | public interface MessageService { 10 | /** 11 | * 历史消息分页查询 12 | * @param page 13 | * @param limit 14 | * @return 15 | */ 16 | LayUIDataGrid show(int page,int limit, Map map); 17 | 18 | /** 19 | * 查询所有历史消息 20 | * @return 21 | */ 22 | List selAll(); 23 | 24 | /** 25 | * 查询一段时间内消息 26 | * @param day 天数 27 | * @return 28 | */ 29 | List selByTime(int day); 30 | 31 | /** 32 | * 查询最近5条消息,用于初始化温湿度变化图 33 | * @param clientid 34 | */ 35 | void showInit(String clientid); 36 | 37 | /** 38 | * 查询历史数据 39 | * @param map 40 | * @return 41 | */ 42 | List selHistory(Map map); 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/carter/service/SaveMessage.java: -------------------------------------------------------------------------------- 1 | package com.carter.service; 2 | 3 | import com.carter.pojo.Message; 4 | 5 | public interface SaveMessage { 6 | int save(Message message); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/carter/service/impl/AlarmServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.carter.service.impl; 2 | 3 | import com.carter.mapper.AlarmMapper; 4 | import com.carter.mapper.DeviceMapper; 5 | import com.carter.pojo.Alarm; 6 | import com.carter.pojo.Device; 7 | import com.carter.pojo.LayUIDataGrid; 8 | import com.carter.service.AlarmService; 9 | import com.github.pagehelper.PageHelper; 10 | import com.github.pagehelper.PageInfo; 11 | import org.springframework.stereotype.Service; 12 | 13 | import javax.annotation.Resource; 14 | import java.util.List; 15 | import java.util.Map; 16 | 17 | @Service 18 | public class AlarmServiceImpl implements AlarmService { 19 | 20 | @Resource 21 | private AlarmMapper alarmMapper; 22 | 23 | @Resource 24 | private DeviceMapper deviceMapper; 25 | 26 | @Override 27 | public int count(String type,String startTime,String endTime,int deviceId) { 28 | int count = alarmMapper.count(type,startTime,endTime,deviceId); 29 | return count; 30 | } 31 | 32 | @Override 33 | public LayUIDataGrid selAlarmHistory(int page,int limit,Map map) { 34 | PageHelper.startPage(page,limit); 35 | List> alarms = alarmMapper.selAlarmHistory(map); 36 | 37 | for (Map alarm:alarms){ 38 | if (alarm.get("type").equals("00")){ 39 | alarm.put("type","湿度警报"); 40 | }else if (alarm.get("type").equals("01")){ 41 | alarm.put("type","温度警报"); 42 | }else if (alarm.get("type").equals("02")){ 43 | alarm.put("type","六氟化硫浓度警报"); 44 | } 45 | //Device device = deviceMapper.selectByPrimaryKey(Integer.parseInt(alarm.get("devcId"))); 46 | //alarm.put("devcName",device.getName()); 47 | } 48 | //分页代码 49 | //设置分页条件 50 | PageInfo> pi = new PageInfo>(alarms); 51 | 52 | //放入到实体类中 53 | LayUIDataGrid dataGrid = new LayUIDataGrid(); 54 | dataGrid.setData(pi.getList()); 55 | dataGrid.setCount(pi.getTotal()); 56 | return dataGrid; 57 | } 58 | 59 | @Override 60 | public int deleteByPrimaryKey(Integer alarmId) { 61 | int index = alarmMapper.deleteByPrimaryKey(alarmId); 62 | return index; 63 | } 64 | 65 | @Override 66 | public int updateByPrimaryKeySelective(Alarm record) { 67 | int index = alarmMapper.updateByPrimaryKeySelective(record); 68 | return index; 69 | } 70 | 71 | @Override 72 | public Alarm selectByPrimaryKey(Integer alarmId) { 73 | Alarm alarm = alarmMapper.selectByPrimaryKey(alarmId); 74 | return alarm; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/com/carter/service/impl/DeviceServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.carter.service.impl; 2 | 3 | import com.carter.mapper.DeviceMapper; 4 | import com.carter.pojo.Device; 5 | import com.carter.pojo.LayUIDataGrid; 6 | import com.carter.service.DeviceService; 7 | import com.github.pagehelper.PageHelper; 8 | import com.github.pagehelper.PageInfo; 9 | import org.springframework.stereotype.Service; 10 | 11 | import javax.annotation.Resource; 12 | import java.util.List; 13 | import java.util.Map; 14 | 15 | @Service 16 | public class DeviceServiceImpl implements DeviceService { 17 | 18 | @Resource 19 | private DeviceMapper deviceMapper; 20 | 21 | @Override 22 | public Device selectDeviceByDevcName(String devcName) { 23 | Device device = deviceMapper.selectDeviceByDevcName(devcName); 24 | return device; 25 | } 26 | 27 | @Override 28 | public Device selectDeviceByClientid(String clientid) { 29 | Device device = deviceMapper.selectDeviceByClientid(clientid); 30 | return device; 31 | } 32 | 33 | @Override 34 | public Device selectByPrimaryKey(Integer deviceId) { 35 | return deviceMapper.selectByPrimaryKey(deviceId); 36 | } 37 | 38 | @Override 39 | public LayUIDataGrid selDevcManageInfo(int page, int limit, Map map) { 40 | PageHelper.startPage(page,limit); 41 | List devices = deviceMapper.selDevcManageInfo(map); 42 | for (Device device:devices){ 43 | if (device.getStatus().equals("0")){ 44 | device.setStatus("设备离线"); 45 | }else if (device.getStatus().equals("1")){ 46 | device.setStatus("设备在线"); 47 | } 48 | 49 | if (device.getAlarmStatus().equals("0")){ 50 | device.setAlarmStatus("正常"); 51 | }else if (device.getAlarmStatus().equals("1")){ 52 | device.setAlarmStatus("警报中"); 53 | } 54 | } 55 | //分页代码 56 | //设置分页条件 57 | PageInfo pi = new PageInfo(devices); 58 | 59 | //放入到实体类中 60 | LayUIDataGrid dataGrid = new LayUIDataGrid(); 61 | dataGrid.setData(pi.getList()); 62 | dataGrid.setCount(pi.getTotal()); 63 | return dataGrid; 64 | } 65 | 66 | @Override 67 | public int deviceAdd(Device device) { 68 | int index = deviceMapper.insertSelective(device); 69 | return index; 70 | } 71 | 72 | @Override 73 | public int deviceUpd(Device device) { 74 | int index = deviceMapper.updateByPrimaryKeySelective(device); 75 | return index; 76 | } 77 | 78 | @Override 79 | public int deviceDel(int deviceId) { 80 | int index = deviceMapper.deleteByPrimaryKey(deviceId); 81 | return index; 82 | } 83 | 84 | @Override 85 | public int countDevcStatus(String status) { 86 | int count = deviceMapper.countDevcStatus(status); 87 | return count; 88 | } 89 | 90 | @Override 91 | public int countAlarmStatus(String alarmStatus) { 92 | int count = deviceMapper.countAlarmStatus(alarmStatus); 93 | return count; 94 | } 95 | 96 | @Override 97 | public List selectDevcNameDistinct() { 98 | List list = deviceMapper.selectDevcNameDistinct(); 99 | return list; 100 | } 101 | 102 | } 103 | -------------------------------------------------------------------------------- /src/main/java/com/carter/service/impl/MessageServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.carter.service.impl; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import com.carter.mapper.MessageMapper; 5 | import com.carter.pojo.LayUIDataGrid; 6 | import com.carter.pojo.Message; 7 | import com.carter.pojo.MessageExample; 8 | import com.carter.service.MessageService; 9 | import com.carter.websocket.SocketClient; 10 | import com.github.pagehelper.PageHelper; 11 | import com.github.pagehelper.PageInfo; 12 | import org.springframework.beans.factory.annotation.Autowired; 13 | import org.springframework.stereotype.Service; 14 | 15 | import javax.annotation.Resource; 16 | import java.util.Date; 17 | import java.util.List; 18 | import java.util.Map; 19 | 20 | @Service 21 | public class MessageServiceImpl implements MessageService { 22 | 23 | @Resource 24 | private MessageMapper messageMapper; 25 | 26 | @Autowired 27 | private SocketClient socketClient; 28 | 29 | @Override 30 | public LayUIDataGrid show(int page, int limit, Map map) { 31 | PageHelper.startPage(page,limit); 32 | //查询全部 33 | //List messageList = messageMapper.selectByExample(new MessageExample()); 34 | //List messageList = messageMapper.selHistory(map); 35 | 36 | List> messageList = messageMapper.selHistoryMap(map); 37 | 38 | for (Map message:messageList){ 39 | if (message.get("type").equals("00")){ 40 | message.put("type","湿度/RH"); 41 | }else if (message.get("type").equals("01")){ 42 | message.put("type","温度/℃"); 43 | }else if (message.get("type").equals("02")){ 44 | message.put("type","六氟化硫浓度uL/L"); 45 | } 46 | } 47 | //分页代码 48 | //设置分页条件 49 | PageInfo> pi = new PageInfo>(messageList); 50 | 51 | //放入到实体类中 52 | LayUIDataGrid dataGrid = new LayUIDataGrid(); 53 | dataGrid.setData(pi.getList()); 54 | dataGrid.setCount(pi.getTotal()); 55 | return dataGrid; 56 | } 57 | 58 | /** 59 | * 查询全部 60 | * @return 61 | */ 62 | @Override 63 | public List selAll() { 64 | List messageList = messageMapper.selectByExample(new MessageExample()); 65 | return messageList; 66 | } 67 | 68 | /** 69 | * 查询指定时间段内消息 70 | * @return 71 | */ 72 | @Override 73 | public List selByTime(int day) { 74 | int range=1000*60*60*24*day; 75 | MessageExample messageExample = new MessageExample(); 76 | MessageExample.Criteria criteria = messageExample.createCriteria(); 77 | Date startTime = new Date(); 78 | startTime.setTime(startTime.getTime()-range); 79 | Date endTime = new Date(); 80 | criteria.andTimeBetween(startTime,endTime); 81 | List messages = messageMapper.selectByExample(messageExample); 82 | return messages; 83 | } 84 | 85 | @Override 86 | public void showInit(String clientid) { 87 | List messages = messageMapper.selRecentlyByClientid(clientid); 88 | for (Message message:messages){ 89 | socketClient.groupSending(JSON.toJSONString(message)); 90 | } 91 | } 92 | 93 | @Override 94 | public List selHistory(Map map) { 95 | List messages = messageMapper.selHistory(map); 96 | return messages; 97 | } 98 | 99 | } 100 | -------------------------------------------------------------------------------- /src/main/java/com/carter/service/impl/SaveMessageImpl.java: -------------------------------------------------------------------------------- 1 | package com.carter.service.impl; 2 | 3 | import com.carter.mapper.MessageMapper; 4 | import com.carter.pojo.Message; 5 | import com.carter.service.SaveMessage; 6 | import org.springframework.stereotype.Service; 7 | 8 | import javax.annotation.Resource; 9 | 10 | @Service 11 | public class SaveMessageImpl implements SaveMessage { 12 | 13 | @Resource 14 | private MessageMapper messageMapper; 15 | 16 | @Override 17 | public int save(Message message) { 18 | int index = messageMapper.insert(message); 19 | return index; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/carter/websocket/SocketClient.java: -------------------------------------------------------------------------------- 1 | package com.carter.websocket; 2 | 3 | import org.java_websocket.client.WebSocketClient; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Component 8 | public class SocketClient implements WebSocketService { 9 | @Autowired 10 | private WebSocketClient webSocketClient; 11 | 12 | @Override 13 | public void groupSending(String message) { 14 | webSocketClient.send(message); 15 | } 16 | 17 | 18 | @Override 19 | public void appointSending(String name, String message) { 20 | // 这里指定发送的规则由服务端决定参数格式 21 | webSocketClient.send("TOUSER"+name+";"+message); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/carter/websocket/WebSocketConfig.java: -------------------------------------------------------------------------------- 1 | package com.carter.websocket; 2 | 3 | import org.java_websocket.client.WebSocketClient; 4 | import org.java_websocket.drafts.Draft_6455; 5 | import org.java_websocket.handshake.ServerHandshake; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.Configuration; 8 | import org.springframework.web.socket.server.standard.ServerEndpointExporter; 9 | 10 | import java.net.URI; 11 | 12 | /** 13 | * 开启WebSocket支持 14 | */ 15 | @Configuration 16 | public class WebSocketConfig { 17 | @Bean 18 | public ServerEndpointExporter serverEndpointExporter() { 19 | return new ServerEndpointExporter(); 20 | } 21 | 22 | @Bean 23 | public WebSocketClient webSocketClient() { 24 | try { 25 | //testcarter.free.idcfengye.com 10.26.24.22:8080 26 | WebSocketClient webSocketClient = new WebSocketClient(new URI("ws://10.26.32.90:8080/websocket/123"),new Draft_6455()) { 27 | @Override 28 | public void onOpen(ServerHandshake handshakedata) { 29 | System.out.println("[websocket] 连接成功"); 30 | } 31 | 32 | @Override 33 | public void onMessage(String message) { 34 | System.out.println("[websocket] 收到消息={"+message+"}"); 35 | 36 | } 37 | 38 | @Override 39 | public void onClose(int code, String reason, boolean remote) { 40 | System.out.println("[websocket] 退出连接"); 41 | } 42 | 43 | @Override 44 | public void onError(Exception ex) { 45 | System.out.println("[websocket] 连接错误={"+ex.getMessage()+"}"); 46 | } 47 | }; 48 | webSocketClient.connect(); 49 | return webSocketClient; 50 | } catch (Exception e) { 51 | e.printStackTrace(); 52 | } 53 | return null; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/carter/websocket/WebSocketServer.java: -------------------------------------------------------------------------------- 1 | package com.carter.websocket; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | import javax.websocket.*; 6 | import javax.websocket.server.PathParam; 7 | import javax.websocket.server.ServerEndpoint; 8 | import java.io.IOException; 9 | import java.util.concurrent.CopyOnWriteArraySet; 10 | 11 | 12 | @ServerEndpoint("/websocket/{sid}") 13 | @Component 14 | public class WebSocketServer { 15 | //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 16 | private static int onlineCount = 0; 17 | //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。 18 | private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet(); 19 | 20 | //与某个客户端的连接会话,需要通过它来给客户端发送数据 21 | private Session session; 22 | 23 | //接收sid 24 | private String sid=""; 25 | 26 | /** 27 | * 连接建立成功调用的方法*/ 28 | @OnOpen 29 | public void onOpen(Session session,@PathParam("sid") String sid) { 30 | this.session = session; 31 | webSocketSet.add(this); //加入set中 32 | addOnlineCount(); //在线数加1 33 | System.out.println("有新窗口开始监听:"+sid+",当前在线人数为" + (getOnlineCount()-1)); 34 | this.sid=sid; 35 | try { 36 | sendMessage("连接成功"); 37 | } catch (IOException e) { 38 | System.out.println("websocket IO异常"); 39 | } 40 | } 41 | 42 | /** 43 | * 连接关闭调用的方法 44 | */ 45 | @OnClose 46 | public void onClose() { 47 | webSocketSet.remove(this); //从set中删除 48 | subOnlineCount(); //在线数减1 49 | System.out.println("有一连接关闭!当前在线人数为" + (getOnlineCount()-1)); 50 | } 51 | 52 | /** 53 | * 收到客户端消息后调用的方法 54 | * 55 | * @param message 客户端发送过来的消息*/ 56 | @OnMessage 57 | public void onMessage(String message, Session session) throws Exception { 58 | System.out.println("收到来自窗口"+sid+"的信息:"+message); 59 | //群发消息 60 | for (WebSocketServer item : webSocketSet) { 61 | try { 62 | item.sendMessage(message); 63 | } catch (IOException e) { 64 | e.printStackTrace(); 65 | } 66 | } 67 | } 68 | 69 | /** 70 | * 71 | * @param session 72 | * @param error 73 | */ 74 | @OnError 75 | public void onError(Session session, Throwable error) { 76 | System.out.println("发生错误"); 77 | error.printStackTrace(); 78 | } 79 | /** 80 | * 实现服务器主动推送 81 | */ 82 | public void sendMessage(String message) throws IOException { 83 | this.session.getBasicRemote().sendText(message); 84 | } 85 | 86 | 87 | /** 88 | * 群发自定义消息 89 | * */ 90 | public static void sendInfo(String message,@PathParam("sid") String sid) throws IOException { 91 | System.out.println("推送消息到窗口"+sid+",推送内容:"+message); 92 | for (WebSocketServer item : webSocketSet) { 93 | try { 94 | //这里可以设定只推送给这个sid的,为null则全部推送 95 | if(sid==null) { 96 | item.sendMessage(message); 97 | }else if(item.sid.equals(sid)){ 98 | item.sendMessage(message); 99 | } 100 | } catch (IOException e) { 101 | continue; 102 | } 103 | } 104 | } 105 | 106 | public static synchronized int getOnlineCount() { 107 | return onlineCount; 108 | } 109 | 110 | public static synchronized void addOnlineCount() { 111 | WebSocketServer.onlineCount++; 112 | } 113 | 114 | public static synchronized void subOnlineCount() { 115 | WebSocketServer.onlineCount--; 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /src/main/java/com/carter/websocket/WebSocketService.java: -------------------------------------------------------------------------------- 1 | package com.carter.websocket; 2 | 3 | public interface WebSocketService { 4 | /** 5 | * 群发 6 | * @param message 7 | */ 8 | void groupSending(String message); 9 | 10 | /** 11 | * 指定发送 12 | * @param name 13 | * @param message 14 | */ 15 | void appointSending(String name,String message); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/application.properties -------------------------------------------------------------------------------- /src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | ${LOG_HOME}/server.%d{yyyy-MM-dd}.log 19 | 30 20 | 21 | 22 | 23 | %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n 24 | 25 | 26 | 27 | 28 | 10MB 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 53 | 54 | -------------------------------------------------------------------------------- /src/main/resources/static/css/font_eolqem241z66flxr.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('//at.alicdn.com/t/font_eolqem241z66flxr.eot?t=1494568861820'); /* IE9*/ 4 | src: url('//at.alicdn.com/t/font_eolqem241z66flxr.eot?t=1494568861820#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('//at.alicdn.com/t/font_eolqem241z66flxr.woff?t=1494568861820') format('woff'), /* chrome, firefox */ 6 | url('//at.alicdn.com/t/font_eolqem241z66flxr.ttf?t=1494568861820') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 7 | url('//at.alicdn.com/t/font_eolqem241z66flxr.svg?t=1494568861820#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family:"iconfont" !important; 12 | font-size:16px; 13 | font-style:normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-zhanghu:before { content: "\e605"; } 19 | 20 | .icon-lock1:before { content: "\e622"; } 21 | 22 | .icon-erweima:before { content: "\e62d"; } 23 | 24 | .icon-xinlangweibo:before { content: "\e63d"; } 25 | 26 | .icon-qq:before { content: "\e63e"; } 27 | 28 | .icon-icon:before { content: "\e609"; } 29 | 30 | .icon-edit:before { content: "\e602"; } 31 | 32 | .icon-computer:before { content: "\e645"; } 33 | 34 | .icon-text:before { content: "\e64d"; } 35 | 36 | .icon-loginout:before { content: "\e608"; } 37 | 38 | .icon-shuaxin1:before { content: "\e648"; } 39 | 40 | .icon-shezhi1:before { content: "\e64a"; } 41 | 42 | .icon-gonggao:before { content: "\e614"; } 43 | 44 | .icon-wenben:before { content: "\e600"; } 45 | 46 | .icon-dengji3:before { content: "\e61e"; } 47 | 48 | .icon-dengji1:before { content: "\e628"; } 49 | 50 | .icon-dengji2:before { content: "\e629"; } 51 | 52 | .icon-dengji4:before { content: "\e62b"; } 53 | 54 | .icon-dengji5:before { content: "\e62c"; } 55 | 56 | .icon-dengji6:before { content: "\e62e"; } 57 | 58 | .icon-new1:before { content: "\e610"; } 59 | 60 | .icon-link:before { content: "\e657"; } 61 | 62 | .icon-lingsheng:before { content: "\e601"; } 63 | 64 | .icon-star:before { content: "\e783"; } 65 | 66 | .icon-dongtaifensishu:before { content: "\e603"; } 67 | 68 | .icon-weather:before { content: "\e89e"; } 69 | 70 | -------------------------------------------------------------------------------- /src/main/resources/static/css/mainent.css: -------------------------------------------------------------------------------- 1 | .five { 2 | height:120px; 3 | width:20%; 4 | float:left; 5 | } 6 | 7 | .five_sub{ 8 | width:96%; 9 | height:85%; 10 | margin:4% 2% 0% 1%; 11 | border-radius:5px; 12 | } 13 | 14 | .five_sub_num{ 15 | line-height:85px; 16 | color:#fff; 17 | font-size:40px; 18 | margin-left:30px; 19 | } 20 | 21 | .five_sub_type{ 22 | color:#fff; 23 | margin-left:30px; 24 | margin-top:-20px; 25 | } 26 | 27 | 28 | 29 | .mypanel{ 30 | width:calc(100% - 10px); 31 | height:96%; 32 | background:#f4f2f3; 33 | border-radius:5px; 34 | box-shadow: 0 0 10px 2px #bdcee0; 35 | margin-left:5px; 36 | margin-right:5px; 37 | padding-bottom:10px; 38 | } 39 | 40 | 41 | .five_sub_icon{ 42 | width:30px; 43 | height:30px; 44 | float:right; 45 | margin-top:15px; 46 | margin-right:20px; 47 | } 48 | 49 | 50 | .applys_panel{ 51 | width:calc(100% - 35px); 52 | height:50px; 53 | background:#fff; 54 | margin-left:20px; 55 | margin-top:10px; 56 | border:2px #eeeeee solid; 57 | border-radius:5px; 58 | } 59 | 60 | .applys_info{ 61 | width:480px; 62 | margin-left:10px; 63 | font-size:15px; 64 | line-height:40px; 65 | } 66 | 67 | .applys_btn{ 68 | float:right; 69 | margin-right:20px; 70 | margin-top:-35px; 71 | background:#4eaaf4; 72 | color:#fff; 73 | font-size:15px; 74 | text-align:center; 75 | width:80px; 76 | height:26px; 77 | line-height: 26px; 78 | border:1px #53adf5 solid; 79 | border-radius:30px; 80 | } 81 | 82 | .applys_btn_unenable{ 83 | float:right; 84 | margin-right:20px; 85 | margin-top:-35px; 86 | background:#d0d0d0; 87 | color:#fff; 88 | font-size:15px; 89 | text-align:center; 90 | width:80px; 91 | height:26px; 92 | line-height: 26px; 93 | border:1px #d0d0d0 solid; 94 | border-radius:30px; 95 | } 96 | 97 | .deadline_green{ 98 | width:200px; 99 | margin-top:-10px; 100 | margin-left:-5px; 101 | background:url(../images/deadlinegreen.png) no-repeat; 102 | background-size:100%; 103 | } 104 | 105 | .deadline_red{ 106 | width:200px; 107 | margin-top:-10px; 108 | margin-left:-5px; 109 | background:url(../images/deadlinered.png) no-repeat; 110 | background-size:100%; 111 | } 112 | 113 | .deadline_none{ 114 | width:200px; 115 | margin-top:-10px; 116 | margin-left:-5px; 117 | /* background:url(../images/deadlinered.png) no-repeat; 118 | background-size:100%; */ 119 | } 120 | 121 | .deadline_info{ 122 | font-size:10px; 123 | color:#fff; 124 | margin-left:10px; 125 | } 126 | 127 | 128 | .inform_area{ 129 | background:#fff; 130 | width:calc(100% - 20px);; 131 | height:220px; 132 | margin-top:10px; 133 | margin-left:5px; 134 | border:1px #cce0f5 solid; 135 | border-radius:5px; 136 | } 137 | 138 | .inform_header{ 139 | background:#ebf6ff; 140 | width:100%; 141 | height:29px; 142 | border-bottom:1px #c1dbf5 solid; 143 | } 144 | 145 | .inform_header_bgp{ 146 | position:absolute; 147 | left:5px; 148 | top:4px; 149 | width:195px; 150 | height:36px; 151 | background:url(../images/noticehead.png) no-repeat; 152 | background-size:100%; 153 | } 154 | 155 | 156 | .project_area{ 157 | background:#fff; 158 | width:calc(100% - 25px);; 159 | height:220px; 160 | margin-top:10px; 161 | margin-left:20px; 162 | border:1px #cce0f5 solid; 163 | border-radius:5px; 164 | 165 | } 166 | 167 | .project_header{ 168 | background:#ebf6ff; 169 | width:100%; 170 | height:29px; 171 | border-bottom:1px #c1dbf5 solid; 172 | } 173 | 174 | .project_header_bgp{ 175 | position:absolute; 176 | left:20px; 177 | top:4px; 178 | width:195px; 179 | height:36px; 180 | background:url(../images/noticehead.png) no-repeat; 181 | background-size:100%; 182 | } 183 | 184 | .layui-table-cell{ 185 | height:18px; 186 | line-height:18px; 187 | } 188 | -------------------------------------------------------------------------------- /src/main/resources/static/css/mainexpt.css: -------------------------------------------------------------------------------- 1 | .bottom_info_area{ 2 | position:absolute; 3 | bottom:0px; 4 | width:100%; 5 | height:50px; 6 | text-align:center; 7 | } 8 | 9 | .review_type_count{ 10 | color:#82b4e6; 11 | } 12 | 13 | .layui-box{ 14 | 15 | float:right; 16 | 17 | } 18 | 19 | .review_tab_selected{ 20 | background:#fff; 21 | color:blue; 22 | font-size:12px; 23 | border-top:1px #e4e4e4 solid; 24 | border-left:1px #e4e4e4 solid; 25 | border-right:1px #e4e4e4 solid; 26 | } 27 | 28 | .review_tab_selected1{ 29 | background:#fff; 30 | color:#5aaace; 31 | font-size:12px; 32 | border-bottom:2px #5aaace solid; 33 | } 34 | 35 | .reviewed_tab_none{ 36 | background:#fff; 37 | font-size:7px; 38 | border-bottom:1px #e4e4e4 solid; 39 | } 40 | 41 | .reviewed_tab_none{ 42 | background:#fff; 43 | font-size:7px; 44 | border-bottom:1px #e4e4e4 solid; 45 | } 46 | 47 | 48 | 49 | 50 | .layui-layer-title{ 51 | background-color:#5ba1ec; 52 | color:#fff; 53 | } -------------------------------------------------------------------------------- /src/main/resources/static/css/projAdd.css: -------------------------------------------------------------------------------- 1 | @CHARSET "UTF-8"; 2 | .layui-form-select dl{ 3 | z-index:9999; 4 | } 5 | .layui-form-label{padding:0;} 6 | .layui-input-block{ 7 | margin-left: 90px; 8 | } 9 | .layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:0;} 10 | .clear{ clear:both} 11 | .attachTable th,.attachTable td{ 12 | padding: 4px 15px; 13 | } 14 | .layui-form-pane .layui-form-label,.layui-input, .layui-select, .layui-textarea{height:30px;} 15 | .layui-form-item{margin-bottom:0;} -------------------------------------------------------------------------------- /src/main/resources/static/css/verify.css: -------------------------------------------------------------------------------- 1 | .con { 2 | width: 204px; 3 | height:32px; 4 | } 5 | 6 | .verify-code { 7 | float: left; 8 | font-size: 20px; 9 | text-align: center; 10 | cursor: pointer; 11 | margin-bottom: 5px; 12 | border: 1px solid #ddd; 13 | } 14 | 15 | .cerify-code-panel { 16 | height:100%; 17 | overflow:hidden; 18 | } 19 | 20 | .verify-code-area { 21 | float:left; 22 | } 23 | 24 | .verify-input-area { 25 | float: left; 26 | width: 94%; 27 | padding-right: 10px; 28 | } 29 | 30 | .verify-change-area { 31 | line-height: 30px; 32 | float: left; 33 | } 34 | 35 | .varify-input-code { 36 | display:inline-block; 37 | width: 100%; 38 | height: 25px; 39 | line-height: 25px; 40 | } 41 | 42 | .verify-change-code { 43 | color: #337AB7; 44 | cursor: pointer; 45 | } 46 | 47 | .verify-btn { 48 | display: block; 49 | width: 100px; 50 | height: 30px; 51 | line-height: 30px; 52 | background-color: #337AB7; 53 | color:#FFFFFF; 54 | text-align: center; 55 | border:none; 56 | margin-top: 10px; 57 | } 58 | 59 | -------------------------------------------------------------------------------- /src/main/resources/static/css/viewer.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Viewer v0.6.0 3 | * https://github.com/fengyuanchen/viewer 4 | * 5 | * Copyright (c) 2014-2017 Fengyuan Chen 6 | * Released under the MIT license 7 | * 8 | * Date: 2017-10-07T09:53:32.834Z 9 | */.viewer-close:before,.viewer-flip-horizontal:before,.viewer-flip-vertical:before,.viewer-fullscreen-exit:before,.viewer-fullscreen:before,.viewer-next:before,.viewer-one-to-one:before,.viewer-play:before,.viewer-prev:before,.viewer-reset:before,.viewer-rotate-left:before,.viewer-rotate-right:before,.viewer-zoom-in:before,.viewer-zoom-out:before{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAAUCAYAAABWOyJDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAQPSURBVHic7Zs/iFxVFMa/0U2UaJGksUgnIVhYxVhpjDbZCBmLdAYECxsRFBTUamcXUiSNncgKQbSxsxH8gzAP3FU2jY0kKKJNiiiIghFlccnP4p3nPCdv3p9778vsLOcHB2bfveeb7955c3jvvNkBIMdxnD64a94GHMfZu3iBcRynN7zAOI7TG15gHCeeNUkr8zaxG2lbYDYsdgMbktBsP03jdQwljSXdtBhLOmtjowC9Mg9L+knSlcD8TNKpSA9lBpK2JF2VdDSR5n5J64m0qli399hNFMUlpshQii5jbXTbHGviB0nLNeNDSd9VO4A2UdB2fp+x0eCnaXxWXGA2X0au/3HgN9P4LFCjIANOJdrLr0zzZ+BEpNYDwKbpnQMeAw4m8HjQtM6Z9qa917zPQwFr3M5KgA6J5rTJCdFZJj9/lyvGhsDvwFNVuV2MhhjrK6b9bFiE+j1r87eBl4HDwCF7/U/k+ofAX5b/EXBv5JoLMuILzf3Ap6Z3EzgdqHMCuF7hcQf4HDgeoHnccncqdK/TvSDWffFXI/exICY/xZyqc6XLWF1UFZna4gJ7q8BsRvgd2/xXpo6P+D9dfT7PpECtA3cnWPM0GXGFZh/wgWltA+cDNC7X+AP4GzjZQe+k5dRxuYPeiuXU7e1qwLpDz7dFjXKRaSwuMLvAlG8zZlG+YmiK1HoFqT7wP2z+4Q45TfEGcMt01xLoNZEBTwRqD4BLpnMLeC1A41UmVxsXgXeBayV/Wx20rpTyrpnWRft7p6O/FdqzGrDukPNtkaMoMo3FBdBSQMOnYBCReyf05s126fU9ytfX98+mY54Kxnp7S9K3kj6U9KYdG0h6UdLbkh7poFXMfUnSOyVvL0h6VtIXHbS6nOP+s/Zm9mvyXW1uuC9ohZ72E9uDmXWLJOB1GxsH+DxPftsB8B6wlGDN02TAkxG6+4D3TWsbeC5CS8CDFce+AW500LhhOW2020TRjK3b21HEmgti9m0RonxbdMZeVzV+/4tF3cBpP7E9mKHNL5q8h5g0eYsCMQz0epq8gQrwMXAgcs0FGXGFRcB9wCemF9PkbYqM/Bas7fxLwNeJPdTdpo4itQti8lPMqTpXuozVRVXPpbHI3KkNTB1NfkL81j2mvhDp91HgV9MKuRIqrykj3WPq4rHyL+axj8/qGPmTqi6F9YDlHOvJU6oYcTsh/TYSzWmTE6JT19CtLTJt32D6CmHe0eQn1O8z5AXgT4sx4Vcu0/EQecMydB8z0hUWkTd2t4CrwNEePqMBcAR4mrBbwyXLPWJa8zrXmmLEhNBmfpkuY2102xxrih+pb+ieAb6vGhuA97UcJ5KR8gZ77K+99xxeYBzH6Q3/Z0fHcXrDC4zjOL3hBcZxnN74F+zlvXFWXF9PAAAAAElFTkSuQmCC");background-repeat:no-repeat;color:transparent;display:block;font-size:0;height:20px;line-height:0;width:20px}.viewer-zoom-in:before{background-position:0 0;content:"Zoom In"}.viewer-zoom-out:before{background-position:-20px 0;content:"Zoom Out"}.viewer-one-to-one:before{background-position:-40px 0;content:"One to One"}.viewer-reset:before{background-position:-60px 0;content:"Reset"}.viewer-prev:before{background-position:-80px 0;content:"Previous"}.viewer-play:before{background-position:-100px 0;content:"Play"}.viewer-next:before{background-position:-120px 0;content:"Next"}.viewer-rotate-left:before{background-position:-140px 0;content:"Rotate Left"}.viewer-rotate-right:before{background-position:-160px 0;content:"Rotate Right"}.viewer-flip-horizontal:before{background-position:-180px 0;content:"Flip Horizontal"}.viewer-flip-vertical:before{background-position:-200px 0;content:"Flip Vertical"}.viewer-fullscreen:before{background-position:-220px 0;content:"Enter Full Screen"}.viewer-fullscreen-exit:before{background-position:-240px 0;content:"Exit Full Screen"}.viewer-close:before{background-position:-260px 0;content:"Close"}.viewer-container{background-color:rgba(0,0,0,.5);bottom:0;direction:ltr;font-size:0;left:0;line-height:0;overflow:hidden;position:absolute;right:0;-webkit-tap-highlight-color:transparent;top:0;-webkit-touch-callout:none;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.viewer-container::-moz-selection,.viewer-container ::-moz-selection{background-color:transparent}.viewer-container::selection,.viewer-container ::selection{background-color:transparent}.viewer-container img{display:block;height:auto;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.viewer-canvas{bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:0}.viewer-canvas>img{height:auto;margin:15px auto;max-width:90%!important;width:auto}.viewer-footer{bottom:0;left:0;overflow:hidden;position:absolute;right:0;text-align:center}.viewer-navbar{background-color:rgba(0,0,0,.5);overflow:hidden}.viewer-list{box-sizing:content-box;height:50px;margin:0;overflow:hidden;padding:1px 0}.viewer-list>li{color:transparent;cursor:pointer;float:left;font-size:0;height:50px;line-height:0;opacity:.5;overflow:hidden;width:30px}.viewer-list>li+li{margin-left:1px}.viewer-list>.viewer-active{opacity:1}.viewer-player{background-color:#000;bottom:0;cursor:none;display:none;right:0}.viewer-player,.viewer-player>img{left:0;position:absolute;top:0}.viewer-toolbar{margin:0 auto 5px;overflow:hidden;padding:3px 0;width:280px}.viewer-toolbar>li{background-color:rgba(0,0,0,.5);border-radius:50%;cursor:pointer;float:left;height:24px;overflow:hidden;width:24px}.viewer-toolbar>li:hover{background-color:rgba(0,0,0,.8)}.viewer-toolbar>li:before{margin:2px}.viewer-toolbar>li+li{margin-left:1px}.viewer-toolbar>.viewer-play{height:30px;margin-bottom:-3px;margin-top:-3px;width:30px}.viewer-toolbar>.viewer-play:before{margin:5px}.viewer-tooltip{background-color:rgba(0,0,0,.8);border-radius:10px;color:#fff;display:none;font-size:12px;height:20px;left:50%;line-height:20px;margin-left:-25px;margin-top:-10px;position:absolute;text-align:center;top:50%;width:50px}.viewer-title{color:#ccc;display:inline-block;font-size:12px;line-height:1;margin:0 5% 5px;max-width:90%;opacity:.8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.viewer-title:hover{opacity:1}.viewer-button{background-color:rgba(0,0,0,.5);border-radius:50%;cursor:pointer;height:80px;overflow:hidden;position:absolute;right:-40px;top:-40px;width:80px}.viewer-button:before{bottom:15px;left:15px;position:absolute}.viewer-fixed{position:fixed}.viewer-open{overflow:hidden}.viewer-show{display:block}.viewer-hide{display:none}.viewer-invisible{visibility:hidden}.viewer-move{cursor:move;cursor:-webkit-grab;cursor:grab}.viewer-fade{opacity:0}.viewer-in{opacity:1}.viewer-transition{transition:all .3s}@media (max-width:767px){.viewer-hide-xs-down{display:none}}@media (max-width:991px){.viewer-hide-sm-down{display:none}}@media (max-width:1199px){.viewer-hide-md-down{display:none}} 10 | /*# sourceMappingURL=viewer.min.css.map */ -------------------------------------------------------------------------------- /src/main/resources/static/css/yw_index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/css/yw_index.css -------------------------------------------------------------------------------- /src/main/resources/static/images/20160704_top1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/20160704_top1.gif -------------------------------------------------------------------------------- /src/main/resources/static/images/7911dcb204f4aab50fd991f9ed9cdbb5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/7911dcb204f4aab50fd991f9ed9cdbb5.png -------------------------------------------------------------------------------- /src/main/resources/static/images/address.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/address.png -------------------------------------------------------------------------------- /src/main/resources/static/images/alipay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/alipay.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/applycomplete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/applycomplete.png -------------------------------------------------------------------------------- /src/main/resources/static/images/applyingicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/applyingicon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/applywaiticon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/applywaiticon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/attachmenticon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/attachmenticon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/bf213ff3aa36f338dca3277d60ed274.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/bf213ff3aa36f338dca3277d60ed274.png -------------------------------------------------------------------------------- /src/main/resources/static/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/bg.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/bg2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/bg2.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/body_bgp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/body_bgp.png -------------------------------------------------------------------------------- /src/main/resources/static/images/buildproject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/buildproject.png -------------------------------------------------------------------------------- /src/main/resources/static/images/checktip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/checktip.png -------------------------------------------------------------------------------- /src/main/resources/static/images/checkwaiticon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/checkwaiticon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/clock_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/clock_icon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/close.png -------------------------------------------------------------------------------- /src/main/resources/static/images/code.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/code.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/companyicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/companyicon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/deadlinegreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/deadlinegreen.png -------------------------------------------------------------------------------- /src/main/resources/static/images/deadlinered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/deadlinered.png -------------------------------------------------------------------------------- /src/main/resources/static/images/ent_user_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/ent_user_setting.png -------------------------------------------------------------------------------- /src/main/resources/static/images/face.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/face.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/five1bgp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/five1bgp.png -------------------------------------------------------------------------------- /src/main/resources/static/images/five2bgp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/five2bgp.png -------------------------------------------------------------------------------- /src/main/resources/static/images/five3bgp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/five3bgp.png -------------------------------------------------------------------------------- /src/main/resources/static/images/five4bgp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/five4bgp.png -------------------------------------------------------------------------------- /src/main/resources/static/images/five5bgp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/five5bgp.png -------------------------------------------------------------------------------- /src/main/resources/static/images/fly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/fly.png -------------------------------------------------------------------------------- /src/main/resources/static/images/git.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/git.png -------------------------------------------------------------------------------- /src/main/resources/static/images/gmail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/gmail.png -------------------------------------------------------------------------------- /src/main/resources/static/images/head_bgp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/head_bgp.png -------------------------------------------------------------------------------- /src/main/resources/static/images/head_bgp1920.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/head_bgp1920.png -------------------------------------------------------------------------------- /src/main/resources/static/images/layui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/layui.png -------------------------------------------------------------------------------- /src/main/resources/static/images/login_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/login_bg.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/loginusericon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/loginusericon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/logo.png -------------------------------------------------------------------------------- /src/main/resources/static/images/logout_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/logout_icon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/mainheader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/mainheader.png -------------------------------------------------------------------------------- /src/main/resources/static/images/manager_info_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/manager_info_icon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/mayun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/mayun.png -------------------------------------------------------------------------------- /src/main/resources/static/images/myapplys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/myapplys.png -------------------------------------------------------------------------------- /src/main/resources/static/images/noticehead.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/noticehead.png -------------------------------------------------------------------------------- /src/main/resources/static/images/noticeicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/noticeicon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/noticerowicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/noticerowicon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/noticerowtimeicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/noticerowtimeicon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/password_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/password_icon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/phone.png -------------------------------------------------------------------------------- /src/main/resources/static/images/pic_delete_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/pic_delete_btn.png -------------------------------------------------------------------------------- /src/main/resources/static/images/proof_add_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/proof_add_btn.png -------------------------------------------------------------------------------- /src/main/resources/static/images/registbody_bgp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/registbody_bgp.png -------------------------------------------------------------------------------- /src/main/resources/static/images/registheadbgp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/registheadbgp.png -------------------------------------------------------------------------------- /src/main/resources/static/images/rightarrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/rightarrow.png -------------------------------------------------------------------------------- /src/main/resources/static/images/ticket_add_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/ticket_add_btn.png -------------------------------------------------------------------------------- /src/main/resources/static/images/unit_info_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/unit_info_icon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/userface1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/userface1.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/userface2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/userface2.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/userface3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/userface3.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/userface4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/userface4.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/userface5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/userface5.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/wechat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/images/wechat.jpg -------------------------------------------------------------------------------- /src/main/resources/static/js/alarm.js: -------------------------------------------------------------------------------- 1 | function sel() { 2 | 3 | var deviceParam=""; 4 | var startParam=""; 5 | var endParam=""; 6 | 7 | var devcName = document.getElementById("devcName").value; 8 | var daterange = document.getElementById("daterange").value; 9 | 10 | if (devcName!="请选择设备名称") { 11 | deviceParam=devcName; 12 | } 13 | 14 | if (!(daterange == "" || daterange == null || daterange == undefined)){ 15 | var strs = daterange.split(" - ") 16 | var startTime = strs[0]; 17 | var endTime = strs[1]; 18 | startParam=startTime; 19 | endParam=endTime; 20 | } 21 | 22 | location.replace('http://localhost:8080/alarm?'+'startParam='+startParam+'&endParam='+endParam+'&deviceParam='+deviceParam); 23 | } 24 | 25 | 26 | layui.use('laydate', function(){ 27 | var laydate = layui.laydate; 28 | 29 | //日期时间范围 30 | laydate.render({ 31 | elem: '#daterange' 32 | ,type: 'datetime' 33 | ,range: true 34 | }); 35 | }); -------------------------------------------------------------------------------- /src/main/resources/static/js/deviceAdd.js: -------------------------------------------------------------------------------- 1 | $(".confirm").click(function(){ 2 | var status=""; 3 | var alarmStatus=""; 4 | if ($("#status").find("option:selected").text()=="设备离线") { 5 | status="0"; 6 | }else if ($("#status").find("option:selected").text()=="设备在线"){ 7 | status="1"; 8 | } 9 | 10 | if ($("#alarmStatus").find("option:selected").text()=="正常"){ 11 | alarmStatus="0"; 12 | } else if ($("#alarmStatus").find("option:selected").text()=="警报中") { 13 | alarmStatus="1"; 14 | } 15 | 16 | var jsonData={"deviceId":$(".deviceId").val(), 17 | "devcName":$(".devcName").val(), 18 | "clientId":$(".clientId").val(), 19 | "code":$(".code").val(), 20 | "type":$(".type").val(), 21 | "status":status, 22 | "alarmStatus":alarmStatus, 23 | "createPerson":$(".createPerson").val(), 24 | "dutyPerson":$(".dutyPerson").val(), 25 | "descript":$(".descript").val() 26 | }; 27 | $.ajax({ 28 | type: "POST", 29 | url:'addConfirm', 30 | data:jsonData,// 你的formid 31 | contentType: "application/x-www-form-urlencoded", 32 | dataType: "json", 33 | error: function(request) { 34 | 35 | }, 36 | success: function(data) { 37 | var curidx=parent.layer.getFrameIndex(window.name); //获取当前窗口的name 38 | if(data.code=="0"){ 39 | parent.layer.close(curidx); 40 | parent.layer.msg(data.msg); 41 | }else{ 42 | parent.layer.msg(data.msg); 43 | } 44 | } 45 | }); 46 | }); 47 | -------------------------------------------------------------------------------- /src/main/resources/static/js/historySel.js: -------------------------------------------------------------------------------- 1 | function sel() { 2 | 3 | var deviceParam=""; 4 | var typeParam=""; 5 | var startParam=""; 6 | var endParam=""; 7 | 8 | var typeIndex = document.getElementById("type").selectedIndex; // 选中索引 9 | 10 | var devcName = document.getElementById("devcName").value; 11 | var type = document.getElementById("type").options[typeIndex].text; 12 | var daterange = document.getElementById("daterange").value; 13 | 14 | 15 | if (devcName!="请输入设备名称") { 16 | deviceParam=devcName; 17 | } 18 | if (type!="请选择数据类型") { 19 | typeParam=type; 20 | } 21 | 22 | if (!(daterange == "" || daterange == null || daterange == undefined)){ 23 | var strs = daterange.split(" - ") 24 | var startTime = strs[0]; 25 | var endTime = strs[1]; 26 | startParam=startTime; 27 | endParam=endTime; 28 | } 29 | 30 | 31 | layui.use('table', function(){ 32 | var table = layui.table; 33 | 34 | table.render({ 35 | elem: '#history' 36 | ,url:'selhistory'+'?deviceParam='+deviceParam+'&typeParam='+typeParam+'&startParam='+startParam+'&endParam='+endParam 37 | ,where:{ 38 | 39 | } 40 | ,height : "full-125" 41 | ,limits : [10,15,20,25,30] 42 | ,limit : 20 43 | ,cols: [[ 44 | {field:'id', width:80, title: '序号', sort: true,align:"center"} 45 | ,{field:'value', width:150, title: '数值', sort: true,align:"center"} 46 | ,{field:'type', width:150, title: '类型',align:"center"} 47 | ,{field:'devcName', width:300, title: '采集设备名称',align:"center"} 48 | ,{field:'topic', width:300, title: '主题',align:"center"} 49 | ,{field:'clientid', width:300, title: '采集设备客户端ID',align:"center"} 50 | ,{field:'time', title: '时间',align:"center",sort: true,templet: function(d){ 51 | return formatDate(d.time); 52 | }} 53 | ]] 54 | ,page: true 55 | }); 56 | }); 57 | 58 | } 59 | 60 | 61 | layui.use('table', function(){ 62 | var table = layui.table; 63 | 64 | table.render({ 65 | elem: '#history' 66 | ,url:'selhistory' 67 | ,where:{ 68 | 69 | } 70 | ,height : "full-125" 71 | ,limits : [10,15,20,25,30] 72 | ,limit : 20 73 | ,cols: [[ 74 | {field:'id', width:80, title: '序号', sort: true,align:"center"} 75 | ,{field:'value', width:150, title: '数值', sort: true,align:"center"} 76 | ,{field:'type', width:150, title: '类型',align:"center"} 77 | ,{field:'devcName', width:300, title: '采集设备名称',align:"center"} 78 | ,{field:'topic', width:300, title: '主题',align:"center"} 79 | ,{field:'clientid', width:300, title: '采集设备客户端ID',align:"center"} 80 | ,{field:'time', title: '时间',align:"center",sort: true,templet: function(d){ 81 | return formatDate(d.time); 82 | }} 83 | ]] 84 | ,page: true 85 | }); 86 | }); 87 | function add0(m){return m<10?'0'+m:m } 88 | function formatDate(timestamp) 89 | { 90 | //timestamp是整数,否则要parseInt转换,不会出现少个0的情况 91 | 92 | var time = new Date(timestamp); 93 | var year = time.getFullYear(); 94 | var month = time.getMonth()+1; 95 | var date = time.getDate(); 96 | var hours = time.getHours(); 97 | var minutes = time.getMinutes(); 98 | var seconds = time.getSeconds(); 99 | return year+'-'+add0(month)+'-'+add0(date)+' '+add0(hours)+':'+add0(minutes)+':'+add0(seconds); 100 | } 101 | layui.use('laydate', function(){ 102 | var laydate = layui.laydate; 103 | 104 | //日期时间范围 105 | laydate.render({ 106 | elem: '#daterange' 107 | ,type: 'datetime' 108 | ,range: true 109 | }); 110 | }); -------------------------------------------------------------------------------- /src/main/resources/static/json/navs.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentManagement": [ 3 | { 4 | "title" : "实时数据变化图", 5 | "icon" : "", 6 | "href" : "show", 7 | "spread" : false 8 | }, 9 | { 10 | "title" : "历史数据查询", 11 | "icon" : "", 12 | "href" : "historySel", 13 | "spread" : false 14 | }, 15 | { 16 | "title" : "历史数据统计图", 17 | "icon" : "", 18 | "href" : "history", 19 | "spread" : false 20 | }, 21 | { 22 | "title" : "报警统计图", 23 | "icon" : "", 24 | "href" : "alarm?startParam=&endParam=&deviceId=", 25 | "spread" : false 26 | }, 27 | { 28 | "title" : "报警记录管理", 29 | "icon" : "", 30 | "href" : "alarmSel", 31 | "spread" : false 32 | }, 33 | { 34 | "title" : "设备管理", 35 | "icon" : "", 36 | "href" : "devcManage", 37 | "spread" : false 38 | } 39 | ] 40 | } 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/laydate/default/laydate.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | .laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px} -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/font/iconfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/font/iconfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/0.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/1.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/10.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/11.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/12.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/13.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/14.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/15.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/16.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/17.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/18.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/19.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/2.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/20.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/21.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/22.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/23.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/24.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/25.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/26.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/27.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/28.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/29.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/3.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/30.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/31.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/32.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/33.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/34.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/35.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/36.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/37.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/38.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/39.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/4.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/40.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/41.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/42.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/43.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/44.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/45.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/46.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/47.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/48.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/49.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/5.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/50.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/51.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/52.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/53.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/54.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/55.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/56.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/57.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/58.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/59.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/6.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/60.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/61.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/62.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/63.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/64.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/65.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/66.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/67.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/68.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/69.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/7.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/70.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/71.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/8.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarterWu0306/springboot-mqtt_THMS/2855918d67aebdfa0c26ec7fd13502bb58940e51/src/main/resources/static/layui/images/face/9.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/carousel.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['",'"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['
    ',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("")}),i.join("")}(),"
"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a/g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/element.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(t){"use strict";var a=layui.$,i=(layui.hint(),layui.device()),e="element",l="layui-this",n="layui-show",s=function(){this.config={}};s.prototype.set=function(t){var i=this;return a.extend(!0,i.config,t),i},s.prototype.on=function(t,a){return layui.onevent.call(this,e,t,a)},s.prototype.tabAdd=function(t,i){var e=".layui-tab-title",l=a(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.children(".layui-tab-bar"),o=l.children(".layui-tab-content"),r='
  • "+(i.title||"unnaming")+"
  • ";return s[0]?s.before(r):n.append(r),o.append('
    '+(i.content||"")+"
    "),f.hideTabMore(!0),f.tabAuto(),this},s.prototype.tabDelete=function(t,i){var e=".layui-tab-title",l=a(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.find('>li[lay-id="'+i+'"]');return f.tabDelete(null,s),this},s.prototype.tabChange=function(t,i){var e=".layui-tab-title",l=a(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.find('>li[lay-id="'+i+'"]');return f.tabClick.call(s[0],null,null,s),this},s.prototype.tab=function(t){t=t||{},b.on("click",t.headerElem,function(i){var e=a(this).index();f.tabClick.call(this,i,e,null,t)})},s.prototype.progress=function(t,i){var e="layui-progress",l=a("."+e+"[lay-filter="+t+"]"),n=l.find("."+e+"-bar"),s=n.find("."+e+"-text");return n.css("width",i),s.text(i),this};var o=".layui-nav",r="layui-nav-item",c="layui-nav-bar",u="layui-nav-tree",d="layui-nav-child",y="layui-nav-more",h="layui-anim layui-anim-upbit",f={tabClick:function(t,i,s,o){o=o||{};var r=s||a(this),i=i||r.parent().children("li").index(r),c=o.headerElem?r.parent():r.parents(".layui-tab").eq(0),u=o.bodyElem?a(o.bodyElem):c.children(".layui-tab-content").children(".layui-tab-item"),d=r.find("a"),y=c.attr("lay-filter");"javascript:;"!==d.attr("href")&&"_blank"===d.attr("target")||(r.addClass(l).siblings().removeClass(l),u.eq(i).addClass(n).siblings().removeClass(n)),layui.event.call(this,e,"tab("+y+")",{elem:c,index:i})},tabDelete:function(t,i){var n=i||a(this).parent(),s=n.index(),o=n.parents(".layui-tab").eq(0),r=o.children(".layui-tab-content").children(".layui-tab-item"),c=o.attr("lay-filter");n.hasClass(l)&&(n.next()[0]?f.tabClick.call(n.next()[0],null,s+1):n.prev()[0]&&f.tabClick.call(n.prev()[0],null,s-1)),n.remove(),r.eq(s).remove(),setTimeout(function(){f.tabAuto()},50),layui.event.call(this,e,"tabDelete("+c+")",{elem:o,index:s})},tabAuto:function(){var t="layui-tab-more",e="layui-tab-bar",l="layui-tab-close",n=this;a(".layui-tab").each(function(){var s=a(this),o=s.children(".layui-tab-title"),r=(s.children(".layui-tab-content").children(".layui-tab-item"),'lay-stope="tabmore"'),c=a('');if(n===window&&8!=i.ie&&f.hideTabMore(!0),s.attr("lay-allowClose")&&o.find("li").each(function(){var t=a(this);if(!t.find("."+l)[0]){var i=a('');i.on("click",f.tabDelete),t.append(i)}}),"string"!=typeof s.attr("lay-unauto"))if(o.prop("scrollWidth")>o.outerWidth()+1){if(o.find("."+e)[0])return;o.append(c),s.attr("overflow",""),c.on("click",function(a){o[this.title?"removeClass":"addClass"](t),this.title=this.title?"":"收缩"})}else o.find("."+e).remove(),s.removeAttr("overflow")})},hideTabMore:function(t){var i=a(".layui-tab-title");t!==!0&&"tabmore"===a(t.target).attr("lay-stope")||(i.removeClass("layui-tab-more"),i.find(".layui-tab-bar").attr("title",""))},clickThis:function(){var t=a(this),i=t.parents(o),n=i.attr("lay-filter"),s=t.parent(),c=t.siblings("."+d),y="string"==typeof s.attr("lay-unselect");"javascript:;"!==t.attr("href")&&"_blank"===t.attr("target")||y||c[0]||(i.find("."+l).removeClass(l),s.addClass(l)),i.hasClass(u)&&(c.removeClass(h),c[0]&&(s["none"===c.css("display")?"addClass":"removeClass"](r+"ed"),"all"===i.attr("lay-shrink")&&s.siblings().removeClass(r+"ed"))),layui.event.call(this,e,"nav("+n+")",t)},collapse:function(){var t=a(this),i=t.find(".layui-colla-icon"),l=t.siblings(".layui-colla-content"),s=t.parents(".layui-collapse").eq(0),o=s.attr("lay-filter"),r="none"===l.css("display");if("string"==typeof s.attr("lay-accordion")){var c=s.children(".layui-colla-item").children("."+n);c.siblings(".layui-colla-title").children(".layui-colla-icon").html(""),c.removeClass(n)}l[r?"addClass":"removeClass"](n),i.html(r?"":""),layui.event.call(this,e,"collapse("+o+")",{title:t,content:l,show:r})}};s.prototype.init=function(t,e){var l=function(){return e?'[lay-filter="'+e+'"]':""}(),s={tab:function(){f.tabAuto.call({})},nav:function(){var t=200,e={},s={},p={},b=function(l,o,r){var c=a(this),f=c.find("."+d);o.hasClass(u)?l.css({top:c.position().top,height:c.children("a").outerHeight(),opacity:1}):(f.addClass(h),l.css({left:c.position().left+parseFloat(c.css("marginLeft")),top:c.position().top+c.height()-l.height()}),e[r]=setTimeout(function(){l.css({width:c.width(),opacity:1})},i.ie&&i.ie<10?0:t),clearTimeout(p[r]),"block"===f.css("display")&&clearTimeout(s[r]),s[r]=setTimeout(function(){f.addClass(n),c.find("."+y).addClass(y+"d")},300))};a(o+l).each(function(i){var l=a(this),o=a(''),h=l.find("."+r);l.find("."+c)[0]||(l.append(o),h.on("mouseenter",function(){b.call(this,o,l,i)}).on("mouseleave",function(){l.hasClass(u)||(clearTimeout(s[i]),s[i]=setTimeout(function(){l.find("."+d).removeClass(n),l.find("."+y).removeClass(y+"d")},300))}),l.on("mouseleave",function(){clearTimeout(e[i]),p[i]=setTimeout(function(){l.hasClass(u)?o.css({height:0,top:o.position().top+o.height()/2,opacity:0}):o.css({width:0,left:o.position().left+o.width()/2,opacity:0})},t)})),h.find("a").each(function(){var t=a(this),i=(t.parent(),t.siblings("."+d));i[0]&&!t.children("."+y)[0]&&t.append(''),t.off("click",f.clickThis).on("click",f.clickThis)})})},breadcrumb:function(){var t=".layui-breadcrumb";a(t+l).each(function(){var t=a(this),i="lay-separator",e=t.attr(i)||"/",l=t.find("a");l.next("span["+i+"]")[0]||(l.each(function(t){t!==l.length-1&&a(this).after(""+e+"")}),t.css("visibility","visible"))})},progress:function(){var t="layui-progress";a("."+t+l).each(function(){var i=a(this),e=i.find(".layui-progress-bar"),l=e.attr("lay-percent");e.css("width",function(){return/^.+\/.+$/.test(l)?100*new Function("return "+l)()+"%":l}()),i.attr("lay-showPercent")&&setTimeout(function(){e.html(''+l+"")},350)})},collapse:function(){var t="layui-collapse";a("."+t+l).each(function(){var t=a(this).find(".layui-colla-item");t.each(function(){var t=a(this),i=t.find(".layui-colla-title"),e=t.find(".layui-colla-content"),l="none"===e.css("display");i.find(".layui-colla-icon").remove(),i.append(''+(l?"":"")+""),i.off("click",f.collapse).on("click",f.collapse)})})}};return s[t]?s[t]():layui.each(s,function(t,a){a()})},s.prototype.render=s.prototype.init;var p=new s,b=a(document);p.render();var v=".layui-tab-title li";b.on("click",v,f.tabClick),b.on("click",f.hideTabMore),a(window).on("resize",f.tabAuto),t(e,p)}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/laypage.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var a=document,t="getElementById",n="getElementsByTagName",i="laypage",r="layui-disabled",u=function(e){var a=this;a.config=e||{},a.config.index=++s.index,a.render(!0)};u.prototype.type=function(){var e=this.config;if("object"==typeof e.elem)return void 0===e.elem.length?2:3},u.prototype.view=function(){var e=this,a=e.config,t=a.groups="groups"in a?0|a.groups:5;a.layout="object"==typeof a.layout?a.layout:["prev","page","next"],a.count=0|a.count,a.curr=0|a.curr||1,a.limits="object"==typeof a.limits?a.limits:[10,20,30,40,50],a.limit=0|a.limit||10,a.pages=Math.ceil(a.count/a.limit)||1,a.curr>a.pages&&(a.curr=a.pages),t<0?t=1:t>a.pages&&(t=a.pages),a.prev="prev"in a?a.prev:"上一页",a.next="next"in a?a.next:"下一页";var n=a.pages>t?Math.ceil((a.curr+(t>1?1:0))/(t>0?t:1)):1,i={prev:function(){return a.prev?''+a.prev+"":""}(),page:function(){var e=[];if(a.count<1)return"";n>1&&a.first!==!1&&0!==t&&e.push(''+(a.first||1)+"");var i=Math.floor((t-1)/2),r=n>1?a.curr-i:1,u=n>1?function(){var e=a.curr+(t-i-1);return e>a.pages?a.pages:e}():t;for(u-r2&&e.push('');r<=u;r++)r===a.curr?e.push('"+r+""):e.push(''+r+"");return a.pages>t&&a.pages>u&&a.last!==!1&&(u+1…'),0!==t&&e.push(''+(a.last||a.pages)+"")),e.join("")}(),next:function(){return a.next?''+a.next+"":""}(),count:'共 '+a.count+" 条",limit:function(){var e=['"}(),refresh:['','',""].join(""),skip:function(){return['到第','','页',""].join("")}()};return['
    ',function(){var e=[];return layui.each(a.layout,function(a,t){i[t]&&e.push(i[t])}),e.join("")}(),"
    "].join("")},u.prototype.jump=function(e,a){if(e){var t=this,i=t.config,r=e.children,u=e[n]("button")[0],l=e[n]("input")[0],p=e[n]("select")[0],c=function(){var e=0|l.value.replace(/\s|\D/g,"");e&&(i.curr=e,t.render())};if(a)return c();for(var o=0,y=r.length;oi.pages||(i.curr=e,t.render())});p&&s.on(p,"change",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),u&&s.on(u,"click",function(){c()})}},u.prototype.skip=function(e){if(e){var a=this,t=e[n]("input")[0];t&&s.on(t,"keyup",function(t){var n=this.value,i=t.keyCode;/^(37|38|39|40)$/.test(i)||(/\D/.test(n)&&(this.value=n.replace(/\D/,"")),13===i&&a.jump(e,!0))})}},u.prototype.render=function(e){var n=this,i=n.config,r=n.type(),u=n.view();2===r?i.elem&&(i.elem.innerHTML=u):3===r?i.elem.html(u):a[t](i.elem)&&(a[t](i.elem).innerHTML=u),i.jump&&i.jump(i,e);var s=a[t]("layui-laypage-"+i.index);n.jump(s),i.hash&&!e&&(location.hash="!"+i.hash+"="+i.curr),n.skip(s)};var s={render:function(e){var a=new u(e);return a.index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(e,a,t){return e.attachEvent?e.attachEvent("on"+a,function(a){a.target=a.srcElement,t.call(e,a)}):e.addEventListener(a,t,!1),this}};e(i,s)}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/rate.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='
      ",u=1;u<=i.length;u++){var r='
    • ";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+'
    • ":n+=r}n+="
    "+(i.text?''+i.value+"星":"")+"";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/slider.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var i=layui.jquery,t={config:{},index:layui.slider?layui.slider.index+1e4:0,set:function(e){var t=this;return t.config=i.extend({},t.config,e),t},on:function(e,i){return layui.onevent.call(this,n,e,i)}},a=function(){var e=this,i=e.config;return{setValue:function(i,t){return e.slide("set",i,t||0)},config:i}},n="slider",l="layui-disabled",s="layui-slider",r="layui-slider-bar",o="layui-slider-wrap",u="layui-slider-wrap-btn",d="layui-slider-tips",v="layui-slider-input",c="layui-slider-input-txt",m="layui-slider-input-btn",p="layui-slider-hover",f=function(e){var a=this;a.index=++t.index,a.config=i.extend({},a.config,t.config,e),a.render()};f.prototype.config={type:"default",min:0,max:100,value:0,step:1,showstep:!1,tips:!0,input:!1,range:!1,height:200,disabled:!1,theme:"#009688"},f.prototype.render=function(){var e=this,t=e.config;if(t.step<1&&(t.step=1),t.maxt.min?a:t.min,t.value[1]=n>t.min?n:t.min,t.value[0]=t.value[0]>t.max?t.max:t.value[0],t.value[1]=t.value[1]>t.max?t.max:t.value[1];var r=Math.floor((t.value[0]-t.min)/(t.max-t.min)*100),v=Math.floor((t.value[1]-t.min)/(t.max-t.min)*100),m=v-r+"%";r+="%",v+="%"}else{"object"==typeof t.value&&(t.value=Math.min.apply(null,t.value)),t.valuet.max&&(t.value=t.max);var m=Math.floor((t.value-t.min)/(t.max-t.min)*100)+"%"}var p=t.disabled?"#c2c2c2":t.theme,f='
    '+(t.tips?'
    ':"")+'
    '+(t.range?'
    ':"")+"
    ",h=i(t.elem),y=h.next("."+s);if(y[0]&&y.remove(),e.elemTemp=i(f),t.range?(e.elemTemp.find("."+o).eq(0).data("value",t.value[0]),e.elemTemp.find("."+o).eq(1).data("value",t.value[1])):e.elemTemp.find("."+o).data("value",t.value),h.html(e.elemTemp),"vertical"===t.type&&e.elemTemp.height(t.height+"px"),t.showstep){for(var g=(t.max-t.min)/t.step,b="",x=1;x')}e.elemTemp.append(b)}if(t.input&&!t.range){var w=i('
    ');h.css("position","relative"),h.append(w),h.find("."+c).children("input").val(t.value),"vertical"===t.type?w.css({left:0,top:-48}):e.elemTemp.css("margin-right",w.outerWidth()+15)}t.disabled?(e.elemTemp.addClass(l),e.elemTemp.find("."+u).addClass(l)):e.slide(),e.elemTemp.find("."+u).on("mouseover",function(){var a="vertical"===t.type?t.height:e.elemTemp[0].offsetWidth,n=e.elemTemp.find("."+o),l="vertical"===t.type?a-i(this).parent()[0].offsetTop-n.height():i(this).parent()[0].offsetLeft,s=l/a*100,r=i(this).parent().data("value"),u=t.setTips?t.setTips(r):r;e.elemTemp.find("."+d).html(u),"vertical"===t.type?e.elemTemp.find("."+d).css({bottom:s+"%","margin-bottom":"20px",display:"inline-block"}):e.elemTemp.find("."+d).css({left:s+"%",display:"inline-block"})}).on("mouseout",function(){e.elemTemp.find("."+d).css("display","none")})},f.prototype.slide=function(e,t,a){var n=this,l=n.config,s=n.elemTemp,f=function(){return"vertical"===l.type?l.height:s[0].offsetWidth},h=s.find("."+o),y=s.next("."+v),g=y.children("."+c).children("input").val(),b=100/((l.max-l.min)/Math.ceil(l.step)),x=function(e,i){e=Math.ceil(e)*b>100?Math.ceil(e)*b:Math.round(e)*b,e=e>100?100:e,h.eq(i).css("vertical"===l.type?"bottom":"left",e+"%");var t=T(h[0].offsetLeft),a=l.range?T(h[1].offsetLeft):0;"vertical"===l.type?(s.find("."+d).css({bottom:e+"%","margin-bottom":"20px"}),t=T(f()-h[0].offsetTop-h.height()),a=l.range?T(f()-h[1].offsetTop-h.height()):0):s.find("."+d).css("left",e+"%"),t=t>100?100:t,a=a>100?100:a;var n=Math.min(t,a),o=Math.abs(t-a);"vertical"===l.type?s.find("."+r).css({height:o+"%",bottom:n+"%"}):s.find("."+r).css({width:o+"%",left:n+"%"});var u=l.min+Math.round((l.max-l.min)*e/100);if(g=u,y.children("."+c).children("input").val(g),h.eq(i).data("value",u),u=l.setTips?l.setTips(u):u,s.find("."+d).html(u),l.range){var v=[h.eq(0).data("value"),h.eq(1).data("value")];v[0]>v[1]&&v.reverse()}l.change&&l.change(l.range?v:u)},T=function(e){var i=e/f()*100/b,t=Math.round(i)*b;return e==f()&&(t=Math.ceil(i)*b),t},w=i(['
    f()&&(r=f());var o=r/f()*100/b;x(o,e),t.addClass(p),s.find("."+d).show(),i.preventDefault()},o=function(){t.removeClass(p),s.find("."+d).hide()};M(r,o)})}),s.on("click",function(e){var t=i("."+u);if(!t.is(event.target)&&0===t.has(event.target).length&&t.length){var a,n="vertical"===l.type?f()-e.clientY+i(this).offset().top:e.clientX-i(this).offset().left;n<0&&(n=0),n>f()&&(n=f());var s=n/f()*100/b;a=l.range?"vertical"===l.type?Math.abs(n-parseInt(i(h[0]).css("bottom")))>Math.abs(n-parseInt(i(h[1]).css("bottom")))?1:0:Math.abs(n-h[0].offsetLeft)>Math.abs(n-h[1].offsetLeft)?1:0:0,x(s,a),e.preventDefault()}}),y.hover(function(){var e=i(this);e.children("."+m).fadeIn("fast")},function(){var e=i(this);e.children("."+m).fadeOut("fast")}),y.children("."+m).children("i").each(function(e){i(this).on("click",function(){g=1==e?g-l.stepl.max?l.max:Number(g)+l.step;var i=(g-l.min)/(l.max-l.min)*100/b;x(i,0)})});var q=function(){var e=this.value;e=isNaN(e)?0:e,e=el.max?l.max:e,this.value=e;var i=(e-l.min)/(l.max-l.min)*100/b;x(i,0)};y.children("."+c).children("input").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),q.call(this))}).on("change",q)},f.prototype.events=function(){var e=this;e.config},t.render=function(e){var i=new f(e);return a.call(i)},e(n,t)}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/tree.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var o=layui.$,a=layui.hint(),i="layui-tree-enter",r=function(e){this.options=e},t={arrow:["",""],checkbox:["",""],radio:["",""],branch:["",""],leaf:""};r.prototype.init=function(e){var o=this;e.addClass("layui-box layui-tree"),o.options.skin&&e.addClass("layui-tree-skin-"+o.options.skin),o.tree(e),o.on(e)},r.prototype.tree=function(e,a){var i=this,r=i.options,n=a||r.nodes;layui.each(n,function(a,n){var l=n.children&&n.children.length>0,c=o('
      '),s=o(["
    • ",function(){return l?''+(n.spread?t.arrow[1]:t.arrow[0])+"":""}(),function(){return r.check?''+("checkbox"===r.check?t.checkbox[0]:"radio"===r.check?t.radio[0]:"")+"":""}(),function(){return'"+(''+(l?n.spread?t.branch[1]:t.branch[0]:t.leaf)+"")+(""+(n.name||"未命名")+"")}(),"
    • "].join(""));l&&(s.append(c),i.tree(c,n.children)),e.append(s),"function"==typeof r.click&&i.click(s,n),i.spread(s,n),r.drag&&i.drag(s,n)})},r.prototype.click=function(e,o){var a=this,i=a.options;e.children("a").on("click",function(e){layui.stope(e),i.click(o)})},r.prototype.spread=function(e,o){var a=this,i=(a.options,e.children(".layui-tree-spread")),r=e.children("ul"),n=e.children("a"),l=function(){e.data("spread")?(e.data("spread",null),r.removeClass("layui-show"),i.html(t.arrow[0]),n.find(".layui-icon").html(t.branch[0])):(e.data("spread",!0),r.addClass("layui-show"),i.html(t.arrow[1]),n.find(".layui-icon").html(t.branch[1]))};r[0]&&(i.on("click",l),n.on("dblclick",l))},r.prototype.on=function(e){var a=this,r=a.options,t="layui-tree-drag";e.find("i").on("selectstart",function(e){return!1}),r.drag&&o(document).on("mousemove",function(e){var i=a.move;if(i.from){var r=(i.to,o('
      '));e.preventDefault(),o("."+t)[0]||o("body").append(r);var n=o("."+t)[0]?o("."+t):r;n.addClass("layui-show").html(i.from.elem.children("a").html()),n.css({left:e.pageX+10,top:e.pageY+10})}}).on("mouseup",function(){var e=a.move;e.from&&(e.from.elem.children("a").removeClass(i),e.to&&e.to.elem.children("a").removeClass(i),a.move={},o("."+t).remove())})},r.prototype.move={},r.prototype.drag=function(e,a){var r=this,t=(r.options,e.children("a")),n=function(){var t=o(this),n=r.move;n.from&&(n.to={item:a,elem:e},t.addClass(i))};t.on("mousedown",function(){var o=r.move;o.from={item:a,elem:e}}),t.on("mouseenter",n).on("mousemove",n).on("mouseleave",function(){var e=o(this),a=r.move;a.from&&(delete a.to,e.removeClass(i))})},e("tree",function(e){var i=new r(e=e||{}),t=o(e.elem);return t[0]?void i.init(t):a.error("layui.tree 没有找到"+e.elem+"元素")})}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/upload.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define("layer",function(e){"use strict";var i=layui.$,t=layui.layer,n=layui.hint(),a=layui.device(),o={config:{},set:function(e){var t=this;return t.config=i.extend({},t.config,e),t},on:function(e,i){return layui.onevent.call(this,r,e,i)}},l=function(){var e=this;return{upload:function(i){e.upload.call(e,i)},config:e.config}},r="upload",u="layui-upload-file",c="layui-upload-form",f="layui-upload-iframe",s="layui-upload-choose",p=function(e){var t=this;t.config=i.extend({},t.config,o.config,e),t.render()};p.prototype.config={accept:"images",exts:"",auto:!0,bindAction:"",url:"",field:"file",method:"post",data:{},drag:!0,size:0,number:0,multiple:!1},p.prototype.render=function(e){var t=this,e=t.config;e.elem=i(e.elem),e.bindAction=i(e.bindAction),t.file(),t.events()},p.prototype.file=function(){var e=this,t=e.config,n=e.elemFile=i(['"].join("")),o=t.elem.next();(o.hasClass(u)||o.hasClass(c))&&o.remove(),a.ie&&a.ie<10&&t.elem.wrap('
      '),e.isFile()?(e.elemFile=t.elem,t.field=t.elem[0].name):t.elem.after(n),a.ie&&a.ie<10&&e.initIE()},p.prototype.initIE=function(){var e=this,t=e.config,n=i(''),a=i(['
      ',"
      "].join(""));i("#"+f)[0]||i("body").append(n),t.elem.next().hasClass(c)||(e.elemFile.wrap(a),t.elem.next("."+c).append(function(){var e=[];return layui.each(t.data,function(i,t){t="function"==typeof t?t():t,e.push('')}),e.join("")}()))},p.prototype.msg=function(e){return t.msg(e,{icon:2,shift:6})},p.prototype.isFile=function(){var e=this.config.elem[0];if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type},p.prototype.preview=function(e){var i=this;window.FileReader&&layui.each(i.chooseFiles,function(i,t){var n=new FileReader;n.readAsDataURL(t),n.onload=function(){e&&e(i,t,this.result)}})},p.prototype.upload=function(e,t){var n,o=this,l=o.config,r=o.elemFile[0],u=function(){var t=0,n=0,a=e||o.files||o.chooseFiles||r.files,u=function(){l.multiple&&t+n===o.fileLength&&"function"==typeof l.allDone&&l.allDone({total:o.fileLength,successful:t,aborted:n})};layui.each(a,function(e,a){var r=new FormData;r.append(l.field,a),layui.each(l.data,function(e,i){i="function"==typeof i?i():i,r.append(e,i)}),i.ajax({url:l.url,type:"post",data:r,contentType:!1,processData:!1,dataType:"json",headers:l.headers||{},success:function(i){t++,d(e,i),u()},error:function(){n++,o.msg("请求上传接口出现异常"),m(e),u()}})})},c=function(){var e=i("#"+f);o.elemFile.parent().submit(),clearInterval(p.timer),p.timer=setInterval(function(){var i,t=e.contents().find("body");try{i=t.text()}catch(n){o.msg("获取上传后的响应信息出现异常"),clearInterval(p.timer),m()}i&&(clearInterval(p.timer),t.html(""),d(0,i))},30)},d=function(e,i){if(o.elemFile.next("."+s).remove(),r.value="","object"!=typeof i)try{i=JSON.parse(i)}catch(t){return i={},o.msg("请对上传接口返回有效JSON")}"function"==typeof l.done&&l.done(i,e||0,function(e){o.upload(e)})},m=function(e){l.auto&&(r.value=""),"function"==typeof l.error&&l.error(e||0,function(e){o.upload(e)})},h=l.exts,v=function(){var i=[];return layui.each(e||o.chooseFiles,function(e,t){i.push(t.name)}),i}(),g={preview:function(e){o.preview(e)},upload:function(e,i){var t={};t[e]=i,o.upload(t)},pushFile:function(){return o.files=o.files||{},layui.each(o.chooseFiles,function(e,i){o.files[e]=i}),o.files},resetFile:function(e,i,t){var n=new File([i],t);o.files=o.files||{},o.files[e]=n}},y=function(){if("choose"!==t&&!l.auto||(l.choose&&l.choose(g),"choose"!==t))return l.before&&l.before(g),a.ie?a.ie>9?u():c():void u()};if(v=0===v.length?r.value.match(/[^\/\\]+\..+/g)||[]||"":v,0!==v.length){switch(l.accept){case"file":if(h&&!RegExp("\\w\\.("+h+")$","i").test(escape(v)))return o.msg("选择的文件中包含不支持的格式"),r.value="";break;case"video":if(!RegExp("\\w\\.("+(h||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(v)))return o.msg("选择的视频中包含不支持的格式"),r.value="";break;case"audio":if(!RegExp("\\w\\.("+(h||"mp3|wav|mid")+")$","i").test(escape(v)))return o.msg("选择的音频中包含不支持的格式"),r.value="";break;default:if(layui.each(v,function(e,i){RegExp("\\w\\.("+(h||"jpg|png|gif|bmp|jpeg$")+")","i").test(escape(i))||(n=!0)}),n)return o.msg("选择的图片中包含不支持的格式"),r.value=""}if(o.fileLength=function(){var i=0,t=e||o.files||o.chooseFiles||r.files;return layui.each(t,function(){i++}),i}(),l.number&&o.fileLength>l.number)return o.msg("同时最多只能上传的数量为:"+l.number);if(l.size>0&&!(a.ie&&a.ie<10)){var F;if(layui.each(o.chooseFiles,function(e,i){if(i.size>1024*l.size){var t=l.size/1024;t=t>=1?t.toFixed(2)+"MB":l.size+"KB",r.value="",F=t}}),F)return o.msg("文件不能超过"+F)}y()}},p.prototype.events=function(){var e=this,t=e.config,o=function(i){e.chooseFiles={},layui.each(i,function(i,t){var n=(new Date).getTime();e.chooseFiles[n+"-"+i]=t})},l=function(i,n){var a=e.elemFile,o=i.length>1?i.length+"个文件":(i[0]||{}).name||a[0].value.match(/[^\/\\]+\..+/g)||[]||"";a.next().hasClass(s)&&a.next().remove(),e.upload(null,"choose"),e.isFile()||t.choose||a.after(''+o+"")};t.elem.off("upload.start").on("upload.start",function(){var a=i(this),o=a.attr("lay-data");if(o)try{o=new Function("return "+o)(),e.config=i.extend({},t,o)}catch(l){n.error("Upload element property lay-data configuration item has a syntax error: "+o)}e.config.item=a,e.elemFile[0].click()}),a.ie&&a.ie<10||t.elem.off("upload.over").on("upload.over",function(){var e=i(this);e.attr("lay-over","")}).off("upload.leave").on("upload.leave",function(){var e=i(this);e.removeAttr("lay-over")}).off("upload.drop").on("upload.drop",function(n,a){var r=i(this),u=a.originalEvent.dataTransfer.files||[];r.removeAttr("lay-over"),o(u),t.auto?e.upload(u):l(u)}),e.elemFile.off("upload.change").on("upload.change",function(){var i=this.files||[];o(i),t.auto?e.upload():l(i)}),t.bindAction.off("upload.action").on("upload.action",function(){e.upload()}),t.elem.data("haveEvents")||(e.elemFile.on("change",function(){i(this).trigger("upload.change")}),t.elem.on("click",function(){e.isFile()||i(this).trigger("upload.start")}),t.drag&&t.elem.on("dragover",function(e){e.preventDefault(),i(this).trigger("upload.over")}).on("dragleave",function(e){i(this).trigger("upload.leave")}).on("drop",function(e){e.preventDefault(),i(this).trigger("upload.drop",e)}),t.bindAction.on("click",function(){i(this).trigger("upload.action")}),t.elem.data("haveEvents",!0))},o.render=function(e){var i=new p(e);return l.call(i)},e(r,o)}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/util.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(t){"use strict";var e=layui.$,i={fixbar:function(t){var i,a,n="layui-fixbar",r="layui-fixbar-top",o=e(document),l=e("body");t=e.extend({showHeight:200},t),t.bar1=t.bar1===!0?"":t.bar1,t.bar2=t.bar2===!0?"":t.bar2,t.bgcolor=t.bgcolor?"background-color:"+t.bgcolor:"";var c=[t.bar1,t.bar2,""],g=e(['
        ',t.bar1?'
      • '+c[0]+"
      • ":"",t.bar2?'
      • '+c[1]+"
      • ":"",'
      • '+c[2]+"
      • ","
      "].join("")),s=g.find("."+r),u=function(){var e=o.scrollTop();e>=t.showHeight?i||(s.show(),i=1):i&&(s.hide(),i=0)};e("."+n)[0]||("object"==typeof t.css&&g.css(t.css),l.append(g),u(),g.find("li").on("click",function(){var i=e(this),a=i.attr("lay-type");"top"===a&&e("html,body").animate({scrollTop:0},200),t.click&&t.click.call(this,a)}),o.on("scroll",function(){clearTimeout(a),a=setTimeout(function(){u()},100)}))},countdown:function(t,e,i){var a=this,n="function"==typeof e,r=new Date(t).getTime(),o=new Date(!e||n?(new Date).getTime():e).getTime(),l=r-o,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];n&&(i=e);var g=setTimeout(function(){a.countdown(t,o+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],e,g),l<=0&&clearTimeout(g),g},timeAgo:function(t,e){var i=this,a=[[],[]],n=(new Date).getTime()-new Date(t).getTime();return n>6912e5?(n=new Date(t),a[0][0]=i.digit(n.getFullYear(),4),a[0][1]=i.digit(n.getMonth()+1),a[0][2]=i.digit(n.getDate()),e||(a[1][0]=i.digit(n.getHours()),a[1][1]=i.digit(n.getMinutes()),a[1][2]=i.digit(n.getSeconds())),a[0].join("-")+" "+a[1].join(":")):n>=864e5?(n/1e3/60/60/24|0)+"天前":n>=36e5?(n/1e3/60/60|0)+"小时前":n>=12e4?(n/1e3/60|0)+"分钟前":n<0?"未来":"刚刚"},digit:function(t,e){var i="";t=String(t),e=e||2;for(var a=t.length;a/g,">").replace(/'/g,"'").replace(/"/g,""")}};!function(t,e,i){"$:nomunge";function a(){n=e[l](function(){r.each(function(){var e=t(this),i=e.width(),a=e.height(),n=t.data(this,g);(i!==n.w||a!==n.h)&&e.trigger(c,[n.w=i,n.h=a])}),a()},o[s])}var n,r=t([]),o=t.resize=t.extend(t.resize,{}),l="setTimeout",c="resize",g=c+"-special-event",s="delay",u="throttleWindow";o[s]=250,o[u]=!0,t.event.special[c]={setup:function(){if(!o[u]&&this[l])return!1;var e=t(this);r=r.add(e),t.data(this,g,{w:e.width(),h:e.height()}),1===r.length&&a()},teardown:function(){if(!o[u]&&this[l])return!1;var e=t(this);r=r.not(e),e.removeData(g),r.length||clearTimeout(n)},add:function(e){function a(e,a,r){var o=t(this),l=t.data(this,g)||{};l.w=a!==i?a:o.width(),l.h=r!==i?r:o.height(),n.apply(this,arguments)}if(!o[u]&&this[l])return!1;var n;return t.isFunction(e)?(n=e,a):(n=e.handler,void(e.handler=a))}}}(e,window),t("util",i)}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/layui.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;!function(e){"use strict";var t=document,o={modules:{},status:{},timeout:10,event:{}},n=function(){this.v="2.4.5"},r=function(){var e=t.currentScript?t.currentScript.src:function(){for(var e,o=t.scripts,n=o.length-1,r=n;r>0;r--)if("interactive"===o[r].readyState){e=o[r].src;break}return e||o[n].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),i=function(t){e.console&&console.error&&console.error("Layui hint: "+t)},a="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),u={layer:"modules/layer",laydate:"modules/laydate",laypage:"modules/laypage",laytpl:"modules/laytpl",layim:"modules/layim",layedit:"modules/layedit",form:"modules/form",upload:"modules/upload",tree:"modules/tree",table:"modules/table",element:"modules/element",rate:"modules/rate",colorpicker:"modules/colorpicker",slider:"modules/slider",carousel:"modules/carousel",flow:"modules/flow",util:"modules/util",code:"modules/code",jquery:"modules/jquery",mobile:"modules/mobile","layui.all":"../layui.all"};n.prototype.cache=o,n.prototype.define=function(e,t){var n=this,r="function"==typeof e,i=function(){var e=function(e,t){layui[e]=t,o.status[e]=!0};return"function"==typeof t&&t(function(n,r){e(n,r),o.callback[n]=function(){t(e)}}),this};return r&&(t=e,e=[]),layui["layui.all"]||!layui["layui.all"]&&layui["layui.mobile"]?i.call(n):(n.use(e,i),n)},n.prototype.use=function(e,n,l){function s(e,t){var n="PLaySTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/;("load"===e.type||n.test((e.currentTarget||e.srcElement).readyState))&&(o.modules[f]=t,d.removeChild(v),function r(){return++m>1e3*o.timeout/4?i(f+" is not a valid module"):void(o.status[f]?c():setTimeout(r,4))}())}function c(){l.push(layui[f]),e.length>1?y.use(e.slice(1),n,l):"function"==typeof n&&n.apply(layui,l)}var y=this,p=o.dir=o.dir?o.dir:r,d=t.getElementsByTagName("head")[0];e="string"==typeof e?[e]:e,window.jQuery&&jQuery.fn.on&&(y.each(e,function(t,o){"jquery"===o&&e.splice(t,1)}),layui.jquery=layui.$=jQuery);var f=e[0],m=0;if(l=l||[],o.host=o.host||(p.match(/\/\/([\s\S]+?)\//)||["//"+location.host+"/"])[0],0===e.length||layui["layui.all"]&&u[f]||!layui["layui.all"]&&layui["layui.mobile"]&&u[f])return c(),y;if(o.modules[f])!function g(){return++m>1e3*o.timeout/4?i(f+" is not a valid module"):void("string"==typeof o.modules[f]&&o.status[f]?c():setTimeout(g,4))}();else{var v=t.createElement("script"),h=(u[f]?p+"lay/":/^\{\/\}/.test(y.modules[f])?"":o.base||"")+(y.modules[f]||f)+".js";h=h.replace(/^\{\/\}/,""),v.async=!0,v.charset="utf-8",v.src=h+function(){var e=o.version===!0?o.v||(new Date).getTime():o.version||"";return e?"?v="+e:""}(),d.appendChild(v),!v.attachEvent||v.attachEvent.toString&&v.attachEvent.toString().indexOf("[native code")<0||a?v.addEventListener("load",function(e){s(e,h)},!1):v.attachEvent("onreadystatechange",function(e){s(e,h)}),o.modules[f]=h}return y},n.prototype.getStyle=function(t,o){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](o)},n.prototype.link=function(e,n,r){var a=this,u=t.createElement("link"),l=t.getElementsByTagName("head")[0];"string"==typeof n&&(r=n);var s=(r||e).replace(/\.|\//g,""),c=u.id="layuicss-"+s,y=0;return u.rel="stylesheet",u.href=e+(o.debug?"?v="+(new Date).getTime():""),u.media="all",t.getElementById(c)||l.appendChild(u),"function"!=typeof n?a:(function p(){return++y>1e3*o.timeout/100?i(e+" timeout"):void(1989===parseInt(a.getStyle(t.getElementById(c),"width"))?function(){n()}():setTimeout(p,100))}(),a)},o.callback={},n.prototype.factory=function(e){if(layui[e])return"function"==typeof o.callback[e]?o.callback[e]:null},n.prototype.addcss=function(e,t,n){return layui.link(o.dir+"css/"+e,t,n)},n.prototype.img=function(e,t,o){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,"function"==typeof t&&t(n)},void(n.onerror=function(e){n.onerror=null,"function"==typeof o&&o(e)}))},n.prototype.config=function(e){e=e||{};for(var t in e)o[t]=e[t];return this},n.prototype.modules=function(){var e={};for(var t in u)e[t]=u[t];return e}(),n.prototype.extend=function(e){var t=this;e=e||{};for(var o in e)t[o]||t.modules[o]?i("模块名 "+o+" 已被占用"):t.modules[o]=e[o];return t},n.prototype.router=function(e){var t=this,e=e||location.hash,o={path:[],search:{},hash:(e.match(/[^#](#.*$)/)||[])[1]||""};return/^#\//.test(e)?(e=e.replace(/^#\//,""),o.href="/"+e,e=e.replace(/([^#])(#.*$)/,"$1").split("/")||[],t.each(e,function(e,t){/^\w+=/.test(t)?function(){t=t.split("="),o.search[t[0]]=t[1]}():o.path.push(t)}),o):o},n.prototype.data=function(t,o,n){if(t=t||"layui",n=n||localStorage,e.JSON&&e.JSON.parse){if(null===o)return delete n[t];o="object"==typeof o?o:{key:o};try{var r=JSON.parse(n[t])}catch(i){var r={}}return"value"in o&&(r[o.key]=o.value),o.remove&&delete r[o.key],n[t]=JSON.stringify(r),o.key?r[o.key]:r}},n.prototype.sessionData=function(e,t){return this.data(e,t,sessionStorage)},n.prototype.device=function(t){var o=navigator.userAgent.toLowerCase(),n=function(e){var t=new RegExp(e+"/([^\\s\\_\\-]+)");return e=(o.match(t)||[])[1],e||!1},r={os:function(){return/windows/.test(o)?"windows":/linux/.test(o)?"linux":/iphone|ipod|ipad|ios/.test(o)?"ios":/mac/.test(o)?"mac":void 0}(),ie:function(){return!!(e.ActiveXObject||"ActiveXObject"in e)&&((o.match(/msie\s(\d+)/)||[])[1]||"11")}(),weixin:n("micromessenger")};return t&&!r[t]&&(r[t]=n(t)),r.android=/android/.test(o),r.ios="ios"===r.os,r},n.prototype.hint=function(){return{error:i}},n.prototype.each=function(e,t){var o,n=this;if("function"!=typeof t)return n;if(e=e||[],e.constructor===Object){for(o in e)if(t.call(e[o],o,e[o]))break}else for(o=0;oi?1:r 2 | 3 | 4 | 5 | layui 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
      15 |
      16 |
      17 | 18 |
      19 | 23 |
      24 |
      25 | 31 |
      32 |
      33 | 38 |
      39 |
      40 |
      41 | 42 |
      43 |
      44 |
      45 | 46 |
      47 |
      48 | 49 |
      50 | 51 |
      52 |
      53 | 54 |
      55 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /src/main/resources/templates/devcmanage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | layui 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
      15 |
      16 |
      17 | 18 |
      19 | 23 |
      24 |
      25 | 31 |
      32 |
      33 | 38 |
      39 |
      40 | 45 |
      46 |
      47 | 48 |
      49 |
      50 | 51 | 52 |
      53 | 54 |
      55 |
      56 | 57 |
      58 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /src/main/resources/templates/deviceAdd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 添加设备 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
      17 |
      18 | 19 |
      20 |
      21 | 22 |
      23 | 24 |
      25 |
      26 |
      27 | 28 |
      29 | 30 |
      31 |
      32 |
      33 | 34 |
      35 | 36 |
      37 |
      38 |
      39 | 40 |
      41 | 42 |
      43 |
      44 |
      45 | 46 |
      47 | 51 |
      52 |
      53 |
      54 | 55 |
      56 | 60 |
      61 |
      62 |
      63 | 64 |
      65 | 66 |
      67 |
      68 |
      69 | 70 |
      71 | 72 |
      73 |
      74 |
      75 | 76 |
      77 | 78 |
      79 |
      80 |
      81 | 82 | 83 | 84 |
      85 |
      86 | 87 | 88 | 89 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /src/main/resources/templates/deviceInfo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 设备详细信息 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
      16 |
      17 |
      18 | 19 |
      20 | 21 |
      22 |
      23 |
      24 | 25 |
      26 | 27 |
      28 |
      29 |
      30 | 31 |
      32 | 33 |
      34 |
      35 |
      36 | 37 |
      38 | 39 |
      40 |
      41 |
      42 | 43 |
      44 | 45 |
      46 |
      47 |
      48 | 49 |
      50 | 51 |
      52 |
      53 |
      54 | 55 |
      56 | 57 |
      58 |
      59 |
      60 | 61 |
      62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /src/main/resources/templates/history.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | layui 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
      18 |
      19 |
      20 | 21 |
      22 | 27 |
      28 |
      29 | 33 |
      34 |
      35 |
      36 | 37 |
      38 |
      39 |
      40 | 41 |
      42 | 43 |
      44 |
      45 | 46 | 47 |
      48 |
      49 | 50 |
      51 |
      52 |
      53 | 54 | 55 | 56 | 59 | 60 | -------------------------------------------------------------------------------- /src/main/resources/templates/historySel.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | layui 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
      16 |
      17 |
      18 | 19 |
      20 | 24 |
      25 |
      26 | 32 |
      33 |
      34 |
      35 | 36 |
      37 |
      38 |
      39 | 40 |
      41 | 42 |
      43 |
      44 | 45 |
      46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/main/resources/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 数据监控系统 7 | 8 | 9 | 10 | 11 | 12 | 63 | 64 | 65 | 66 | 67 |
      68 | 69 | 70 |
      71 |
      72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 85 | 86 | 87 | 88 |
      89 |
      90 | 91 | 92 |
      93 | 98 |
      99 | 100 | 101 | 102 |
      103 |
      104 |
        105 |
      • 后台首页
      • 106 |
      107 | 108 |

      技术支持:0574-87081818

      109 | 110 |
      111 |
      112 | 113 |
      114 |
      115 |
      116 |
      117 | 118 |
      119 | 120 | 121 |
      122 |
      123 | 124 | 125 | 126 | 127 | 128 | -------------------------------------------------------------------------------- /src/main/resources/templates/show.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | layui 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 62 | 63 | 64 | 65 | 66 |
      67 |
      68 |
      69 | 70 |
      71 | 75 |
      76 |
      77 | 82 |
      83 |
      84 | 85 |
      86 | 87 |
      88 |
      89 | 90 | 91 |
      92 |
      93 | 94 |
      95 |
      96 |
      97 | 98 | 99 | 100 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /src/main/resources/templates/warning.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | layui 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
      17 |
      18 |
      19 | 20 |
      21 |
      22 |
      23 | 24 | 25 | 71 |
      72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /src/test/java/com/carter/SpringbootMqttApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.carter; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class SpringbootMqttApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | --------------------------------------------------------------------------------