From 958ddfcec71043b6b800feaac521e7b22bb15e97 Mon Sep 17 00:00:00 2001
From: zengh <123456>
Date: Thu, 29 Apr 2021 09:10:15 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 blade-ops/blade-report/src/main/java/org/springblade/report/service/impl/ReportFileServiceImpl.java         |    8 
 blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java                      |    2 
 blade-service/blade-system/src/main/java/org/springblade/system/nettyUdpServer/handle/UdpServerHandler.java |   51 +++++
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyServer/ServerHandler.java                 |    1 
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/mapper/EquipmentMapper.xml           |   15 +
 blade-service/blade-system/src/main/java/org/springblade/system/nettyUdpServer/server/UdpServer.java        |  129 ++++++++++++
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/vo/EquipmentVOS.java                 |    4 
 blade-service/blade-jfpts/src/test/com/arsn/test/ReportParcelTest.java                                      |   44 ++++
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/controller/EquipmentController.java  |   24 +
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/entity/Equipment.java                |    4 
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServerHandler.java           |    4 
 blade-service/blade-system/src/main/java/org/springblade/system/service/IDeptService.java                   |    2 
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/parcel/service/impl/ParcelServiceImpl.java     |    6 
 blade-service/blade-jfpts/src/main/resources/application-dev.yml                                            |    1 
 blade-ops/blade-report/src/main/resources/application.yml                                                   |    9 
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/feign/ReportFeign.java                         |   17 +
 blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java           |    2 
 blade-service/blade-system/src/main/java/org/springblade/system/nettyServer/Server.java                     |   86 ++++++++
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/JfptApplication.java                           |    4 
 blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml                       |   20 +
 blade-service/blade-system/src/main/java/org/springblade/system/SystemApplication.java                      |   12 +
 blade-service/blade-system/src/main/java/org/springblade/system/nettyServer/ServerHandler.java              |  104 ++++++++++
 22 files changed, 519 insertions(+), 30 deletions(-)

diff --git a/blade-ops/blade-report/src/main/java/org/springblade/report/service/impl/ReportFileServiceImpl.java b/blade-ops/blade-report/src/main/java/org/springblade/report/service/impl/ReportFileServiceImpl.java
index 7b6c850..7e75e53 100644
--- a/blade-ops/blade-report/src/main/java/org/springblade/report/service/impl/ReportFileServiceImpl.java
+++ b/blade-ops/blade-report/src/main/java/org/springblade/report/service/impl/ReportFileServiceImpl.java
@@ -153,14 +153,6 @@
 		//将map转换为json对象
 		String body = JSON.toJSONString(map);
 		if (null!=beanName){
-//			List<ParcelExcel> parcelExcels = new ArrayList<>();
-//			ParcelExcel parcelExcel = new ParcelExcel();
-//			parcelExcel.setCheckMachineCode("ceshi");
-//			parcelExcel.setCheckMachineName("ceshi");
-//			parcelExcel.setCheckMachinePosition("ceshi");
-//			parcelExcel.setImgUrl("ceshi");
-//			parcelExcel.setDecisioDiagramResultDetails("ceshi");
-//			parcelExcels.add(parcelExcel);
 			List<ParcelExcel> parcelList = reportClient.getParcelList(body);
 			return parcelList;
 		}
diff --git a/blade-ops/blade-report/src/main/resources/application.yml b/blade-ops/blade-report/src/main/resources/application.yml
index d31c89e..35d9291 100644
--- a/blade-ops/blade-report/src/main/resources/application.yml
+++ b/blade-ops/blade-report/src/main/resources/application.yml
@@ -9,3 +9,12 @@
     provider:
       prefix: blade-
 
+#单独对report模块下的getParcelList 方法进行超时时间设置 格式为  feignClient调用的接口名#方法名(参数类型(String/int)如果为对象则直接填写对象类名)
+#hystrix:
+#  command:
+#    ReportClient#getParcelList(String):
+#      execution:
+#        isolation:
+#          thread:
+#            timeoutInMilliseconds: 10000
+
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/JfptApplication.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/JfptApplication.java
index fe2271e..05dd031 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/JfptApplication.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/JfptApplication.java
@@ -20,6 +20,7 @@
 import org.springblade.core.launch.BladeApplication;
 import org.springblade.jfpt.nettyServer.Server;
 import org.springblade.jfpt.nettyTcpServer.TcpServer;
+import org.springblade.jfpt.nettyUdpServer.server.UdpServer;
 import org.springblade.jfpt.webscoket.WebSocketServer;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -44,7 +45,8 @@
 		Server server=new Server(8088);
 		TcpServer tcpServer = new TcpServer(8099);
 		WebSocketServer webSocketServer= new WebSocketServer(9034);
-		//UdpServer udpServer=new UdpServer(8099);
+//		UdpServer udpServer = new UdpServer(9534);
+//		Server serverTwo = new Server(9534);
 	}
 }
 
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/controller/EquipmentController.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/controller/EquipmentController.java
index 7bbc177..8332a9e 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/controller/EquipmentController.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/controller/EquipmentController.java
@@ -80,8 +80,25 @@
 		response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
 		response.setHeader("Access-Control-Allow-Credentials", "true");
 		/*Equipment detail = equipmentService.getOne(Condition.getQueryWrapper(equipment));*/
-
-		return R.data(equipmentService.selectInfo(equipment));
+		EquipmentVOS equipmentVOS = equipmentService.selectInfo(equipment);
+		//获取部门数据
+		List<DeptVo> deptVos = deptFeignApi.selDeptList();
+		if (null!=equipmentVOS.getDeptId()){
+			String[] split =equipmentVOS.getDeptId().split(",");
+			List<String> list = Arrays.asList(split);
+			StringBuffer deptNameBuiffer = new StringBuffer();
+			//数据匹配封装
+			for (String deptId:list) {
+				for (DeptVo deptVo:deptVos) {
+					if (deptId.equals(deptVo.getId().toString())){
+						deptNameBuiffer.append(deptVo.getDeptName()).append("/");
+					}
+				}
+			}
+			//封装部门名称数据
+			equipmentVOS.setDeptName(deptNameBuiffer.substring(0,deptNameBuiffer.length()-1));
+		}
+		return R.data(equipmentVOS);
 	}
 
 	/**
@@ -137,10 +154,7 @@
 			}else{
 				pages.get(j).setOnlineStatus("0");
 			}
-
 		}
-
-
 		return R.data(pages);
 	}
 
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/entity/Equipment.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/entity/Equipment.java
index c35ab2f..64d63f5 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/entity/Equipment.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/entity/Equipment.java
@@ -136,5 +136,9 @@
 	private String twoContacts;
 	@TableField("ThreeContacts")
 	private String ThreeContacts;
+	/**
+	 * 设备厂商名称
+	 */
+	private String manufacturers;
 
 }
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/mapper/EquipmentMapper.xml b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/mapper/EquipmentMapper.xml
index 442e7b7..587f6ab 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/mapper/EquipmentMapper.xml
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/mapper/EquipmentMapper.xml
@@ -30,6 +30,7 @@
         <result column="state" property="state"/>
         <result column="reason" property="reason"/>
         <result column="jtype" property="jtype"/>
+        <result column="manufacturers" property="manufacturers"/>
     </resultMap>
 
     <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
@@ -142,7 +143,7 @@
         equipment.oneContacts,equipment.onePhone,equipment.oneId,
         equipment.twoContacts,equipment.twoPhone,equipment.twoId,
         equipment.ThreeContacts,equipment.ThreePhone,equipment.threeId,
-        equipment.deptId,
+        equipment.deptId,equipment.manufacturers,
         equipment.addvcd,equipment.pay,equipment.expireTime from sys_equipment equipment
         left join sys_catalog catalog on catalog.eqid = equipment.deviceNumber
         LEFT JOIN (
@@ -181,6 +182,9 @@
         <if test="equipment.city!=null">
             and city like concat('%',#{equipment.city},'%')
         </if>
+        <if test="equipment.manufacturers!=null and equipment.manufacturers!=''">
+            and manufacturers = #{equipment.manufacturers}
+        </if>
 
         <if test="equipment.devicestate!=null">
             and devicestate =#{equipment.devicestate}
@@ -210,7 +214,7 @@
 
     <!--新增-->
     <insert id="s" parameterType="org.springblade.jfpt.equipment.entity.Equipment">
-       INSERT INTO sys_equipment (deviceName,deviceNumber,deviceType,ownership,ownerId,devicestate,stime,coordinate,parent_id,jd,wd,addvcd,street,dtype) VALUES (#{deviceName},#{deviceNumber},#{deviceType},#{ownership},#{yname},#{devicestate},#{stime},POINT(#{jd},#{wd}),#{parentId},#{jd},#{wd},#{addvcd},#{streeName},#{dtype})
+       INSERT INTO sys_equipment (deviceName,deviceNumber,deviceType,ownership,ownerId,devicestate,stime,coordinate,parent_id,jd,wd,addvcd,street,dtype,manufacturers) VALUES (#{deviceName},#{deviceNumber},#{deviceType},#{ownership},#{yname},#{devicestate},#{stime},POINT(#{jd},#{wd}),#{parentId},#{jd},#{wd},#{addvcd},#{streeName},#{dtype},#{manufacturers})
     </insert>
 
     <!--新增-->
@@ -348,8 +352,9 @@
 
     <update id="updateOne" parameterType="org.springblade.jfpt.equipment.entity.Equipment">
     update sys_equipment SET deviceName=#{deviceName},deviceNumber=#{deviceNumber},deviceType=#{deviceType},
-    ownership=#{ownership},ownerId=#{yname},devicestate=#{devicestate},stime=#{stime},
-    coordinate=POINT(#{jd},#{wd}),parent_id=#{parentId},jd=#{jd},wd=#{wd},addvcd=#{addvnm},street=#{streeName},dtype=#{dtype} where id=#{id}
+    ownership=#{ownership},ownerId=#{yname},devicestate=#{devicestate},stime=#{stime},coordinate=POINT(#{jd},#{wd}),
+    parent_id=#{parentId},jd=#{jd},wd=#{wd},addvcd=#{addvnm},street=#{streeName},dtype=#{dtype},manufacturers=#{manufacturers}
+     where id=#{id}
     </update>
 
     <update id="updataType">
@@ -365,7 +370,7 @@
         SELECT
         dept.deptId,dept.id,dept.deviceName,dept.deviceNumber,dept.deviceType,dept.ownership,
         dept.ownerId,dept.devicestate,dept.stime,dept.district,dept.province,dept.city,
-        ST_ASTEXT(dept.coordinate) as coordinate,dept.dtype,dept.expireTime,dept.heartbeat, dept.state,dept.reason,
+        ST_ASTEXT(dept.coordinate) as coordinate,dept.dtype,dept.manufacturers,dept.expireTime,dept.heartbeat, dept.state,dept.reason,
         dept.parent_id,dept.jd,dept.wd,dept.street,u.yname,d.addvnm,dept.addvcd,dept.serialNumber,dept.channelNumber,
         dept.oneContacts,dept.onePhone,dept.oneId,
         dept.twoContacts,dept.twoPhone,dept.twoId,
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/vo/EquipmentVOS.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/vo/EquipmentVOS.java
index 2c6eefd..8519d23 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/vo/EquipmentVOS.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/vo/EquipmentVOS.java
@@ -77,5 +77,9 @@
 	private String bType;
 	private String addvnm;
 	private String streeName;
+	/**
+	 * 组织机构名称
+	 */
+	private String deptName;
 
 }
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/feign/ReportFeign.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/feign/ReportFeign.java
index cb4660d..ebd565a 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/feign/ReportFeign.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/feign/ReportFeign.java
@@ -12,6 +12,8 @@
 import org.springblade.jfpt.parcel.service.ParcelService;
 import org.springblade.jfpt.parcel.vo.ConditionVo;
 import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -195,6 +197,21 @@
 		ConditionVo conditionVo = getConditionVo(map);
 		//查询数据并返回数据
 		List<ParcelExcel> parcelExcels = parcelService.exportParcel(conditionVo);
+//		List<ParcelExcel> parcelExcels = new ArrayList<>();
+//		ParcelExcel parcelExcel = new ParcelExcel();
+//		parcelExcel.setCheckMachineCode("ceshi");
+//		parcelExcel.setCheckMachineName("ceshi");
+//		parcelExcel.setCheckMachinePosition("ceshi");
+//		parcelExcel.setImgUrl("ceshi");
+//		parcelExcel.setDecisioDiagramResultDetails("ceshi");
+//		parcelExcels.add(parcelExcel);
+//		try {
+//			int time = 9000;
+//			System.out.println("休眠时间 = " + time);
+//			Thread.sleep(time);
+//		} catch (InterruptedException e) {
+//			e.printStackTrace();
+//		}
 		return parcelExcels;
 	}
 
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyServer/ServerHandler.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyServer/ServerHandler.java
index 7e6b526..4fd2dc1 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyServer/ServerHandler.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyServer/ServerHandler.java
@@ -44,6 +44,7 @@
 
 	@Autowired
 	private org.springblade.jfpt.Netty.service.nettyService nettyService;
+
 	@Autowired
 	private  IMessageService messageService;
 
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServerHandler.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServerHandler.java
index 23ad48f..a36ea5e 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServerHandler.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServerHandler.java
@@ -74,14 +74,12 @@
 		buf.readBytes(req);
 		//手动释放内存
 		ReferenceCountUtil.release(info);
-
 		String body = new String(req, "UTF-8");
 		String content = body;
 		System.out.println("接收客户端数据:" + body);
-		System.out.println("content.length() = " + content.length());
 		//获取字符串的长度
 		int length = content.length();
-		//当字符串长度大于200时,采集体温数据,小于则采集报警数据
+		//当字符串长度大于200时,采集体温数据
 		//只有数据长度大于300时,采集体温数据  200-300 之间为心跳数据,当前不采集
 		if (length>250){
 			//插入数据
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/parcel/service/impl/ParcelServiceImpl.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/parcel/service/impl/ParcelServiceImpl.java
index da4f6ab..b164fcd 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/parcel/service/impl/ParcelServiceImpl.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/parcel/service/impl/ParcelServiceImpl.java
@@ -687,16 +687,16 @@
 		List<List<ParcelExcel>> parcelExcelList = new ArrayList<>();
 		//设置页码数
 		conditionVo.setCurrentPage(1);
-		conditionVo.setPageSize(100);
+		conditionVo.setPageSize(1000);
 		//获取数据
 		Map<String,Object> result =(Map<String,Object>)getParcelDataPageList(conditionVo, PARCEL_DETAIL_RUL, PARCEL_KEY, PARCEL_SECRET).get("result");
 		if (null!=result) {
 			String data = result.get("data").toString();
 			List<ParcelExcel> dataList = JsonUtils.jsonToList(data, ParcelExcel.class);
 			parcelExcelList.add(dataList);
-			//取第一次获取到的数据总数,每次取100条,多于100分批次取
+			//取第一次获取到的数据总数,每次取1000条,多于1000分批次取
 			int totalSize = Integer.parseInt(result.get("totalSize").toString());
-			int i = totalSize/100+1;
+			int i = totalSize/1000+1;
 			if (i>1){
 				for (int j=1;j<i;j++) {
 					conditionVo.setCurrentPage(j+1);
diff --git a/blade-service/blade-jfpts/src/main/resources/application-dev.yml b/blade-service/blade-jfpts/src/main/resources/application-dev.yml
index 5afec29..e60da75 100644
--- a/blade-service/blade-jfpts/src/main/resources/application-dev.yml
+++ b/blade-service/blade-jfpts/src/main/resources/application-dev.yml
@@ -8,6 +8,7 @@
     url: jdbc:mysql://36.134.81.48:3306/jfpt?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&useOldAliasMetadataBehavior=true
     username: root
     password: jfpt123
+
 oss:
   enabled: true
   name: minio
diff --git a/blade-service/blade-jfpts/src/test/com/arsn/test/ReportParcelTest.java b/blade-service/blade-jfpts/src/test/com/arsn/test/ReportParcelTest.java
new file mode 100644
index 0000000..699086b
--- /dev/null
+++ b/blade-service/blade-jfpts/src/test/com/arsn/test/ReportParcelTest.java
@@ -0,0 +1,44 @@
+package com.arsn.test;
+
+
+import lombok.AllArgsConstructor;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springblade.common.entity.ParcelExcel;
+import org.springblade.jfpt.JfptApplication;
+import org.springblade.jfpt.parcel.service.ParcelService;
+import org.springblade.jfpt.parcel.service.impl.ParcelServiceImpl;
+import org.springblade.jfpt.parcel.vo.ConditionVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+import static java.time.LocalDate.now;
+
+/**
+ * 包裹导出数据单元测试
+ */
+
+//@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
+//@RunWith(SpringRunner.class)
+//@SpringBootTest(classes = JfptApplication.class)
+public class ReportParcelTest {
+
+//	@Autowired
+//	private ParcelService parcelService = new ParcelServiceImpl();
+//
+//	@Test
+//	public void testGetParcelList(){
+//		ConditionVo conditionVo1 = new ConditionVo();
+//		conditionVo1.setStartTime("2021-04-01 00:00:00");
+//		conditionVo1.setEndTime("2021-05-01 00:00:00");
+//		System.out.println("startTime = " + now());
+//		List<ParcelExcel> parcelExcels = parcelService.exportParcel(conditionVo1);
+//		System.out.println("endTime = " + now());
+//	}
+
+}
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/SystemApplication.java b/blade-service/blade-system/src/main/java/org/springblade/system/SystemApplication.java
index 25ec919..23acd8e 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/SystemApplication.java
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/SystemApplication.java
@@ -19,6 +19,9 @@
 import org.springblade.core.cloud.feign.EnableBladeFeign;
 import org.springblade.core.launch.BladeApplication;
 import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.system.nettyServer.Server;
+import org.springblade.system.nettyUdpServer.server.UdpServer;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.cloud.client.SpringCloudApplication;
 
 /**
@@ -27,11 +30,18 @@
  */
 @EnableBladeFeign
 @SpringCloudApplication
-public class SystemApplication {
+public class SystemApplication implements CommandLineRunner {
 
 	public static void main(String[] args) {
 		BladeApplication.run(AppConstant.APPLICATION_SYSTEM_NAME, SystemApplication.class, args);
 	}
 
+	@Override
+	public void run(String... args) throws Exception {
+		UdpServer udpServer = new UdpServer(9534);
+		Server server = new Server(9534);
+		UdpServer udpServer8011 = new UdpServer(8011);
+		Server server8011 = new Server(8011);
+	}
 }
 
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java
index 7341310..c6b718e 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java
@@ -83,7 +83,7 @@
 	 * @return
 	 */
 	List<String> getDeptNames(Long[] ids);
-	List selectInfo();
+	List<DeptVO> selectInfo();
 
 	/**
 	 * 查询所有的部门信息
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml
index 810b31b..02c37f7 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml
@@ -158,7 +158,25 @@
     </select>
 
     <select id="selectInfo" resultType="java.util.HashMap">
-        select id as deptid,dept_name from blade_dept where is_deleted=0
+        SELECT
+        dept.id,
+        dept.parent_id,
+        dept.dept_name AS title,
+        dept.id AS "value",
+        dept.id AS "key",
+        (
+        SELECT
+        CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+        FROM
+        blade_dept
+        WHERE
+        parent_id = dept.id and is_deleted = 0
+        ) AS "has_children"
+        FROM
+        blade_dept dept
+        WHERE
+         dept.is_deleted = 0
+        ORDER BY dept.sort
     </select>
 
     <!--查询所有的部门信息-->
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/nettyServer/Server.java b/blade-service/blade-system/src/main/java/org/springblade/system/nettyServer/Server.java
new file mode 100644
index 0000000..9e09b64
--- /dev/null
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/nettyServer/Server.java
@@ -0,0 +1,86 @@
+package org.springblade.system.nettyServer;
+
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.*;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.ServerSocketChannel;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+
+
+public class Server {
+	private int port;
+	private ServerSocketChannel serverSocketChannel;
+
+	public Server(int port){
+		this.port = port;
+		bind();
+	}
+
+	private void bind() {
+		Thread thread = new Thread(new Runnable() {
+			@Override
+			public void run() {
+				//服务端要建立两个group,一个负责接收客户端的连接,一个负责处理数据传输
+				//连接处理group
+				EventLoopGroup boss = new NioEventLoopGroup();
+				//事件处理group
+				EventLoopGroup worker = new NioEventLoopGroup();
+				ServerBootstrap bootstrap = new ServerBootstrap();
+				// 绑定处理group
+				bootstrap.group(boss, worker).channel(NioServerSocketChannel.class)
+					//保持连接数
+					.option(ChannelOption.SO_BACKLOG, 1024)
+					//有数据立即发送
+					.option(ChannelOption.TCP_NODELAY, true)
+					//保持连接
+					.childOption(ChannelOption.SO_KEEPALIVE, true)
+					//处理新连接
+					.childHandler(new ChannelInitializer<SocketChannel>() {
+						@Override
+						protected void initChannel(SocketChannel sc) throws Exception {
+							// 增加任务处理
+							ChannelPipeline p = sc.pipeline();
+							p.addLast(
+//                                        //使用了netty自带的编码器和解码器
+//                                        new StringDecoder(),
+//                                        new StringEncoder(),
+								//心跳检测,读超时,写超时,读写超时
+								//new IdleStateHandler(5, 0, 0, TimeUnit.SECONDS),
+								//自定义的处理器
+								new ServerHandler());
+						}
+					});
+
+				//绑定端口,同步等待成功
+				ChannelFuture future;
+				try {
+					future = bootstrap.bind(port).sync();
+					if (future.isSuccess()) {
+						serverSocketChannel = (ServerSocketChannel) future.channel();
+						System.out.println("服务端启动成功,端口:"+port);
+					} else {
+						System.out.println("服务端启动失败!");
+					}
+
+					//等待服务监听端口关闭,就是由于这里会将线程阻塞,导致无法发送信息,所以我这里开了线程
+					future.channel().closeFuture().sync();
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+				finally {
+					//优雅地退出,释放线程池资源
+					boss.shutdownGracefully();
+					worker.shutdownGracefully();
+				}
+			}
+		});
+		thread.start();
+	}
+
+	public void sendMessage(Object msg){
+		if(serverSocketChannel != null){
+			serverSocketChannel.writeAndFlush(msg);
+		}
+	}
+}
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/nettyServer/ServerHandler.java b/blade-service/blade-system/src/main/java/org/springblade/system/nettyServer/ServerHandler.java
new file mode 100644
index 0000000..b40a9b4
--- /dev/null
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/nettyServer/ServerHandler.java
@@ -0,0 +1,104 @@
+package org.springblade.system.nettyServer;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import org.springframework.stereotype.Component;
+import javax.annotation.PostConstruct;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Component
+public class ServerHandler extends ChannelInboundHandlerAdapter {
+
+	private String reg_LA = "LA[d]{8}[d|A-F]{12}[d|A-F]{8}[d|A-Z]{2}[d|A-F]{4}[x2A][d|A-F]{6}[#@]";
+	private String reg_LB = "LB[\\d|A-F]{12}[\\x2A].*[#@]";
+	private String reg_LB2 = "LB[\\d|A-F]{6}[\\x2A].*[#@]";
+	private String reg_LD = "LD[d]{8}[d|A-F]{12}:[A-Z]{4}[\\x2A].*[#@]";
+
+
+	private ConcurrentHashMap<String, Channel> sessionChannelMap = new ConcurrentHashMap<String, Channel>();
+
+	private static ServerHandler serverHandler;
+
+	@PostConstruct
+	public void init() {
+		serverHandler = this;
+	}
+
+	/**
+	 * 客户端与服务端创建连接的时候调用
+	 */
+	@Override
+	public void channelActive(ChannelHandlerContext ctx) throws Exception {
+		System.out.println("CTX:" + ctx.channel());
+		System.out.println("客户端与服务端连接开始...");
+//		ChannelId id = ctx.channel().id();
+//		String s = id.toString();
+		//NettyConfig.group.add(ctx.channel());
+	}
+
+	/**
+	 * 客户端与服务端断开连接时调用
+	 */
+	@Override
+	public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+		System.out.println("客户端与服务端连接关闭...");
+	}
+
+	/**
+	 * 服务端接收客户端发送过来的数据结束之后调用
+	 */
+	@Override
+	public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
+		ctx.flush();
+		System.out.println("信息接收完毕...");
+	}
+
+	/**
+	 * 工程出现异常的时候调用
+	 */
+	@Override
+	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+		cause.printStackTrace();
+		ctx.close();
+	}
+
+	/**
+	 * 服务端处理客户端websocket请求的核心方法,这里接收了客户端发来的信息
+	 */
+	@Override
+	public void channelRead(ChannelHandlerContext channelHandlerContext, Object info) throws Exception {
+		long startTime1 = System.currentTimeMillis();
+		Date day = new Date();
+		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		System.out.println("接收到了:" + info);
+		ByteBuf buf = (ByteBuf) info;
+		byte[] req = new byte[buf.readableBytes()];
+		buf.readBytes(req);
+		String body = new String(req, "UTF-8");
+		String content = body;
+		System.out.println("【TCP】>>>>>> 接收客户端数据:" + body);
+		String state="系统故障"; //设备故障状态
+		String reason=null; //故障原因
+		//获取字符串的长度
+		int length = content.length();
+		//当字符串长度大于200时,采集体温数据,小于则采集报警数据
+		System.out.println("tcp报文长度 = " + length);
+
+//		channelHandlerContext.writeAndFlush(Unpooled.copiedBuffer("LEOK#@!", CharsetUtil.UTF_8));
+		//服务端使用这个就能向 每个连接上来的客户端群发消息
+		//NettyConfig.group.writeAndFlush(info);
+//		Iterator<Channel> iterator = NettyConfig.group.iterator();
+//		System.out.println("iterator:"+iterator);
+//        while(iterator.hasNext()){
+//          //打印出所有客户端的远程地址
+//           System.out.println((iterator.next()).remoteAddress());
+//
+//		}
+	}
+
+
+}
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/nettyUdpServer/handle/UdpServerHandler.java b/blade-service/blade-system/src/main/java/org/springblade/system/nettyUdpServer/handle/UdpServerHandler.java
new file mode 100644
index 0000000..762c465
--- /dev/null
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/nettyUdpServer/handle/UdpServerHandler.java
@@ -0,0 +1,51 @@
+package org.springblade.system.nettyUdpServer.handle;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.channel.socket.DatagramPacket;
+import io.netty.util.CharsetUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * updHandler udp 服务端数据接收处理
+ */
+@Component
+public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket> {
+	private Logger logger = LoggerFactory.getLogger(this.getClass());
+
+	@Override
+	protected void channelRead0(ChannelHandlerContext channelHandlerContext, DatagramPacket datagramPacket) throws Exception {
+		// 读取收到的数据
+		ByteBuf buf = (ByteBuf) datagramPacket.copy().content();
+		byte[] req = new byte[buf.readableBytes()];
+		buf.readBytes(req);
+		String body = new String(req, CharsetUtil.UTF_8);
+		System.out.println("【UDP】>>>>>> 收到客户端的数据:"+body);
+		System.out.println("upd报文长度 = " + body.length());
+
+		// 回复一条信息给客户端
+//		channelHandlerContext.writeAndFlush(new DatagramPacket(
+//			Unpooled.copiedBuffer("Hello,我是Server,我的时间戳是"+System.currentTimeMillis()
+//				, CharsetUtil.UTF_8)
+//			, datagramPacket.sender())).sync();
+	}
+
+	//捕获异常
+	@Override
+	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)throws Exception {
+		//logger.log(Level.INFO, "AuthServerInitHandler exceptionCaught");
+		logger.error("UdpServerHandler exceptionCaught"+cause.getMessage());
+		System.out.println("UdpServerHandler exceptionCaught"+cause.getMessage());
+		cause.printStackTrace();
+		ctx.close();
+	}
+
+	//消息没有结束的时候触发
+	@Override
+	public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
+		ctx.flush();
+	}
+}
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/nettyUdpServer/server/UdpServer.java b/blade-service/blade-system/src/main/java/org/springblade/system/nettyUdpServer/server/UdpServer.java
new file mode 100644
index 0000000..33b4e41
--- /dev/null
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/nettyUdpServer/server/UdpServer.java
@@ -0,0 +1,129 @@
+package org.springblade.system.nettyUdpServer.server;
+
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.*;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioDatagramChannel;
+import io.netty.handler.codec.json.JsonObjectDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.concurrent.DefaultEventExecutorGroup;
+import io.netty.util.concurrent.EventExecutorGroup;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.system.nettyUdpServer.handle.UdpServerHandler;
+
+import java.net.InetAddress;
+import java.util.concurrent.Executors;
+
+/**
+ * updServer udp服务端
+ */
+public class UdpServer {
+	private static Logger LOG = LoggerFactory.getLogger(UdpServer.class);
+
+	public int port;
+
+	private Channel channel;
+
+	public UdpServer(int port) {
+		this.port = port;
+		run();
+	}
+
+	/**
+	 * 不用
+	 */
+	public void init() {
+		final NioEventLoopGroup group = new NioEventLoopGroup();
+		try {
+			Bootstrap b = new Bootstrap();
+			b.group(group).channel(NioDatagramChannel.class)
+				.option(ChannelOption.SO_BROADCAST, true)
+				.handler(new ChannelInitializer<NioDatagramChannel>() {
+					@Override
+					public void initChannel(NioDatagramChannel ch) throws Exception {
+						ChannelPipeline p = ch.pipeline();
+						p.addLast("decoder", new JsonObjectDecoder());
+						p.addLast(new UdpServerHandler());
+					}
+				});
+			InetAddress address = InetAddress.getLocalHost();
+			channel = b.bind(address, port).sync().channel();
+			Executors.newSingleThreadExecutor().execute(new Runnable() {
+				@Override
+				public void run() {
+					try {
+						channel.closeFuture().sync();
+					} catch (InterruptedException e) {
+						e.printStackTrace();
+					} finally {
+						group.shutdownGracefully();
+					}
+				}
+			});
+			LOG.info("UDP服务器启动, host:{},port:{}", address.getHostAddress(), port);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+
+	//给管道抽象出接口,给Channel更多的能力和配置,例如Channel的状态,参数,IO操作
+	//使用ChannelPipeline实现自定义IO
+	//Channel channel;
+	public void run() {
+		Thread thread = new Thread(new Runnable() {
+			@Override
+			public void run() {
+				//InetSocketAddress socketAddress = new InetSocketAddress("s16s652780.51mypc.cn", 21403);
+				//启动服务
+				EventLoopGroup workerGroup = new NioEventLoopGroup();
+				//优化使用的线程
+				final EventExecutorGroup group = new DefaultEventExecutorGroup(16);
+
+				try {
+					Bootstrap b = new Bootstrap();//udp不能使用ServerBootstrap
+					b.group(workerGroup).channel(NioDatagramChannel.class)//设置UDP通道
+						//设置udp的管道工厂
+						.handler(new ChannelInitializer<NioDatagramChannel>() {
+							//NioDatagramChannel标志着是UDP格式的
+							@Override
+							protected void initChannel(NioDatagramChannel ch)
+								throws Exception {
+								// TODO Auto-generated method stub
+								//创建一个执行Handler的容器
+								ChannelPipeline pipeline = ch.pipeline();
+								pipeline.addLast(new StringDecoder());
+								pipeline.addLast(new StringEncoder());
+								//执行具体的处理器
+								pipeline.addLast(group, "handler", new UdpServerHandler());//消息处理器
+							}
+
+						})//初始化处理器
+						//true / false 多播模式(UDP适用),可以向多个主机发送消息
+						.option(ChannelOption.SO_BROADCAST, true)// 支持广播
+						.option(ChannelOption.SO_RCVBUF, 2048 * 1024)// 设置UDP读缓冲区为2M
+						.option(ChannelOption.SO_SNDBUF, 1024 * 1024);// 设置UDP写缓冲区为1M
+
+					// 绑定端口,开始接收进来的连接
+					ChannelFuture f = b.bind(port).sync();
+					//获取channel通道
+					//channel=f.channel();
+					System.out.println("UDP Server 启动,端口:"+port);
+					// 等待服务器 socket 关闭 。
+					// 这不会发生,可以优雅地关闭服务器。
+					f.channel().closeFuture().sync();
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				} finally {
+					// 优雅退出 释放线程池资源
+					group.shutdownGracefully();
+					workerGroup.shutdownGracefully();
+				}
+			}
+			});
+		thread.start();
+	}
+
+}
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/IDeptService.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/IDeptService.java
index 207e915..80c3045 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/service/IDeptService.java
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/IDeptService.java
@@ -117,7 +117,7 @@
 	 * @return
 	 */
 	boolean submit(Dept dept);
-	List selectInfo();
+	List<DeptVO> selectInfo();
 
 	/**
 	 * 查询所有的部门信息
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java
index e68a7c7..b109780 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java
@@ -156,7 +156,7 @@
 	}
 
 	@Override
-	public List selectInfo() {
+	public List<DeptVO> selectInfo() {
 		return baseMapper.selectInfo();
 	}
 

--
Gitblit v1.9.3