From a6ccb31191385dd9c3d2e9d75e1bcda7ff6a4ed3 Mon Sep 17 00:00:00 2001
From: bsw215583320 <baoshiwei121@163.com>
Date: 星期二, 12 九月 2023 14:47:57 +0800
Subject: [PATCH] 增加socket通讯,增加移动端控制接口

---
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java |  100 ++++++++--
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java                     |    7 
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/CacheConstants.java                   |   15 +
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/CommandMessageVo.java                     |   26 ++
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryFault.java                             |   10 +
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryEquipmentServiceImpl.java    |   22 ++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRealTimeDataService.java         |    3 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/ServerHandler.java                    |   78 ++++++++
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderVo.java                           |    2 
 jeecg-module-dry/jeecg-module-dry-biz/pom.xml                                                                          |    6 
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/SocketMsgVo.java                          |   23 ++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/listener/InitListener.java                   |   34 +++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/SocketServerConfig.java               |   47 +++++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryEquipmentService.java            |    5 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/MinaConfig.java                       |   59 ++++++
 jeecg-module-dry/jeecg-module-dry-start/src/main/resources/fault.json                                                  |    4 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryEquipmentController.java       |    4 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java    |   14 +
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/ServerReceiveThread.java              |   53 +++++
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/CommonDict.java                       |    9 +
 20 files changed, 495 insertions(+), 26 deletions(-)

diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/CacheConstants.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/CacheConstants.java
index b241dc3..8175a1d 100644
--- a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/CacheConstants.java
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/CacheConstants.java
@@ -1,8 +1,19 @@
 package org.jeecg.modules.dry.common;
 
+import org.jeecg.modules.dry.vo.DryFault;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 public interface CacheConstants {
     enum RedisKeyEnum{
-        WORK_ORDER("workOrder","宸ュ崟MAP");
+        WORK_ORDER("workOrder","宸ュ崟MAP"),
+
+
+        EQP_MAP("eqpMap", "璁惧MAP,key:tenantId+equipmentId");
+
         private String code;
         private String text;
         RedisKeyEnum(String code, String text) {
@@ -18,4 +29,6 @@
             return text;
         }
     }
+
+
 }
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/CommonDict.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/CommonDict.java
new file mode 100644
index 0000000..0df9477
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/CommonDict.java
@@ -0,0 +1,9 @@
+package org.jeecg.modules.dry.common;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class CommonDict {
+
+    public static Map<String, String> faultDict = new HashMap<>();
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java
index 3c1f6b6..1007d45 100644
--- a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java
@@ -10,6 +10,7 @@
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.ToString;
 import org.jeecg.modules.dry.vo.RealTimeDataVo;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.jeecgframework.poi.excel.annotation.Excel;
@@ -29,6 +30,7 @@
 @TableName("dry_equipment")
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = false)
+@ToString
 @ApiModel(value="dry_equipment瀵硅薄", description="骞茬嚗鏈�")
 public class DryEquipment implements Serializable {
     private static final long serialVersionUID = 1L;
@@ -84,6 +86,11 @@
     @ApiModelProperty(value = "绉熸埛id")
     private Integer tenantId;
 
+    /**璁惧IP*/
+    @Excel(name = "璁惧IP", width = 15)
+    @ApiModelProperty(value = "璁惧IP")
+    private String ip;
+
     public DryEquipment() {
     }
     public DryEquipment(RealTimeDataVo realTimeDataVo) {
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/CommandMessageVo.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/CommandMessageVo.java
new file mode 100644
index 0000000..0cb02ec
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/CommandMessageVo.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.dry.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString
+public class CommandMessageVo {
+    /**绉熸埛ID*/
+    private Integer tenantId;
+    /**璁惧缂栧彿*/
+    private String machineId;
+
+    /**鎸囦护缂栫爜**/
+    private String code;
+    /**娑堟伅鍐呭**/
+    private String msg;
+
+    /**
+     * 1001 椋庣鍗�     1002 椋庣闄�
+     * 1003 婊氱瓛闀�     1004 婊氱瓛闄�
+     * 1005 婊氱瓛姝h浆    1006 婊氱瓛鍙嶈浆
+     * 1007 璁惧鍋滄
+     */
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryFault.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryFault.java
new file mode 100644
index 0000000..a4ef56d
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryFault.java
@@ -0,0 +1,10 @@
+package org.jeecg.modules.dry.vo;
+
+import lombok.Data;
+
+@Data
+public class DryFault {
+
+    private String code;
+    private String text;
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderVo.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderVo.java
index c8b96a1..7560b42 100644
--- a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderVo.java
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderVo.java
@@ -115,6 +115,8 @@
     @ApiModelProperty(value = "鏁呴殰")
     private String fault;
 
+    private List<String> faultList = new ArrayList<>();
+
     @ApiModelProperty(value = "鏄庣粏鏁版嵁鍒楄〃")
     private List<DryOrderTrendVo> detailList = new ArrayList<>();
     @ApiModelProperty(value = "鏄庣粏")
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/SocketMsgVo.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/SocketMsgVo.java
new file mode 100644
index 0000000..dc25556
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/SocketMsgVo.java
@@ -0,0 +1,23 @@
+package org.jeecg.modules.dry.vo;
+
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+@NoArgsConstructor
+@Data
+@ToString
+public class SocketMsgVo implements Serializable {
+    /**鎸囦护缂栫爜**/
+    private String code;
+    /**娑堟伅鍐呭**/
+    private String msg;
+
+    public SocketMsgVo(CommandMessageVo vo) {
+        this.code = vo.getCode();
+        this.msg = vo.getMsg();
+    }
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/pom.xml b/jeecg-module-dry/jeecg-module-dry-biz/pom.xml
index 1b09f2c..759a93f 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/pom.xml
+++ b/jeecg-module-dry/jeecg-module-dry-biz/pom.xml
@@ -14,6 +14,12 @@
             <artifactId>jeecg-module-dry-api</artifactId>
             <version>3.5.0</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.mina</groupId>
+            <artifactId>mina-core</artifactId>
+            <version>2.0.17</version>
+        </dependency>
     </dependencies>
     <build>
         <!-- 鎵撳寘鍚嶇О -->
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryEquipmentController.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryEquipmentController.java
index 6f6e2a8..88b8858 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryEquipmentController.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryEquipmentController.java
@@ -104,6 +104,10 @@
 		return Result.OK(eqps);
 	}
 
+
+
+
+
 	/**
 	 *   娣诲姞
 	 *
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java
index b41f4a3..6c78f38 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java
@@ -8,6 +8,7 @@
 
 import org.jeecg.modules.dry.service.*;
 
+import org.jeecg.modules.dry.vo.CommandMessageVo;
 import org.jeecg.modules.dry.vo.RealTimeDataVo;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,4 +45,17 @@
         return dryRealTimeDataService.queryMachineRealTImeData(realTimeDataVo);
     }
 
+
+    /**
+     * 1001 椋庣鍗�     1002 椋庣闄�
+     * 1003 婊氱瓛鍗�     1004 婊氱瓛闄�
+     * 1005 婊氱瓛姝h浆    1006 婊氱瓛鍙嶈浆
+     * 1007 璁惧鍋滄
+     */
+    @ApiOperation(value="鍙戦�佹帶鍒舵寚浠�", notes="鍚戞湇鍔$鍙戦�佹帶鍒舵寚浠わ紝鐢辨湇鍔$閫氳繃socket杞彂缁欐帶鍒舵ā鍧�")
+    @PostMapping("/sendCommand")
+    public Result<?> sendCommand(@RequestBody CommandMessageVo msgVo) {
+        return dryRealTimeDataService.sendSocketMsg(msgVo);
+    }
+
 }
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/listener/InitListener.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/listener/InitListener.java
new file mode 100644
index 0000000..762f302
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/listener/InitListener.java
@@ -0,0 +1,34 @@
+package org.jeecg.modules.dry.listener;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.io.ByteStreams;
+import org.jeecg.modules.dry.common.CacheConstants;
+import org.jeecg.modules.dry.common.CommonDict;
+import org.jeecg.modules.dry.vo.DryFault;
+import org.springframework.boot.context.event.ApplicationStartedEvent;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class InitListener implements ApplicationListener<ApplicationStartedEvent> {
+    @Override
+    public void onApplicationEvent(ApplicationStartedEvent event) {
+        InputStream fault = getClass().getResourceAsStream("/fault.json");
+        try {
+            JSONObject jsonObject = JSONObject.parseObject(fault, JSONObject.class);
+            Map<String, String> map = jsonObject.toJavaObject(Map.class);
+            CommonDict.faultDict = map;
+
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryEquipmentService.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryEquipmentService.java
index aee02d9..660e823 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryEquipmentService.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryEquipmentService.java
@@ -3,6 +3,9 @@
 import org.jeecg.modules.dry.entity.DryEquipment;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.HashMap;
+import java.util.List;
+
 /**
  * @Description: 骞茬嚗鏈�
  * @Author: jeecg-boot
@@ -11,4 +14,6 @@
  */
 public interface IDryEquipmentService extends IService<DryEquipment> {
 
+    DryEquipment selectByTenantIdEquipmentId(String tenantId, String equipmentId);
+
 }
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRealTimeDataService.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRealTimeDataService.java
index 7e3844c..2d41761 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRealTimeDataService.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRealTimeDataService.java
@@ -1,10 +1,13 @@
 package org.jeecg.modules.dry.service;
 
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.dry.vo.CommandMessageVo;
 import org.jeecg.modules.dry.vo.RealTimeDataVo;
 
 public interface IDryRealTimeDataService {
     Result<?> realTimeDataHandle(RealTimeDataVo realTimeDataVo);
 
     Result<?> queryMachineRealTImeData(RealTimeDataVo realTimeDataVo);
+
+    Result<?> sendSocketMsg(CommandMessageVo msgVo);
 }
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryEquipmentServiceImpl.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryEquipmentServiceImpl.java
index d75e3a4..794a923 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryEquipmentServiceImpl.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryEquipmentServiceImpl.java
@@ -1,11 +1,17 @@
 package org.jeecg.modules.dry.service.impl;
 
+import org.jeecg.common.util.RedisUtil;
+import org.jeecg.modules.dry.common.CacheConstants;
 import org.jeecg.modules.dry.entity.DryEquipment;
 import org.jeecg.modules.dry.mapper.DryEquipmentMapper;
 import org.jeecg.modules.dry.service.IDryEquipmentService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.HashMap;
+import java.util.List;
 
 /**
  * @Description: 骞茬嚗鏈�
@@ -16,4 +22,20 @@
 @Service
 public class DryEquipmentServiceImpl extends ServiceImpl<DryEquipmentMapper, DryEquipment> implements IDryEquipmentService {
 
+    @Autowired
+    private RedisUtil redisUtil;
+    @Override
+    public DryEquipment selectByTenantIdEquipmentId(String tenantId, String equipmentId) {
+        DryEquipment dryEquipment = (DryEquipment) redisUtil.hget(CacheConstants.RedisKeyEnum.EQP_MAP.getCode(), tenantId + equipmentId);
+        if (dryEquipment == null) {
+            List<DryEquipment> list = this.list();
+            for (DryEquipment equipment : list) {
+                redisUtil.hset(CacheConstants.RedisKeyEnum.EQP_MAP.getCode(),equipment.getTenantId()+equipment.getCode(),equipment);
+                if ((equipment.getTenantId()+equipment.getCode()).equals(tenantId + equipmentId)) {
+                    dryEquipment = equipment;
+                }
+            }
+        }
+        return dryEquipment;
+    }
 }
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
index 1c5b65d..a28e5cd 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
@@ -5,24 +5,32 @@
 import com.alibaba.fastjson.TypeReference;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.mina.core.service.IoAcceptor;
+import org.apache.mina.core.service.IoHandler;
+import org.apache.mina.core.session.IoSession;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.config.TenantContext;
 import org.jeecg.common.util.RedisUtil;
 import org.jeecg.modules.dry.common.CacheConstants;
 import org.jeecg.modules.dry.entity.*;
 import org.jeecg.modules.dry.service.*;
-import org.jeecg.modules.dry.vo.DryOrderTrendVo;
-import org.jeecg.modules.dry.vo.DryOrderVo;
-import org.jeecg.modules.dry.vo.RealTimeDataVo;
+import org.jeecg.modules.dry.socket.ServerHandler;
+import org.jeecg.modules.dry.socket.SocketServerConfig;
+import org.jeecg.modules.dry.vo.*;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.net.Socket;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+
 @Slf4j
 @Service
 public class DryRealTimeDataServiceImpl implements IDryRealTimeDataService {
@@ -42,6 +50,9 @@
 
     @Autowired
     private IDryProdRecordService prodRecordService;
+
+    @Autowired
+    private IoAcceptor ioAcceptor;
 
     @Override
     @Transactional
@@ -88,6 +99,13 @@
         orderVo.setState_windbox(realTimeDataVo.getState_windbox());
         orderVo.setState_valve(realTimeDataVo.getState_valve());
         orderVo.setOrderStatus(realTimeDataVo.getWorkorder_status());
+
+        String fault = realTimeDataVo.getFault();
+//        String[] split = fault.split(",");
+//        for (String s : split) {
+//
+//        }
+
         DryOrderTrendVo trendVo = new DryOrderTrendVo(realTimeDataVo);
         // 2.2 淇濆瓨宸ュ崟鍚按鐜囧彉鍖� 鎴� 閲嶉噺鍙樺寲
 
@@ -283,32 +301,64 @@
 
         List<Double> dList = new ArrayList<>();
         DryOrderVo orderVo = (DryOrderVo) redisUtil.hget(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(), realTimeDataVo.getTenantid() + "_" + realTimeDataVo.getMachineid());
-try {
+            try {
 
 
-    if (dryEquipments != null && dryEquipments.size() > 0) {
-        dryEquipments.stream().forEach(item -> {
-            DryOrderVo order = (DryOrderVo) redisUtil.hget(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(), realTimeDataVo.getTenantid() + "_" + item.getCode());
-            if (order != null) {
-                double v = order.getOriginWeight() - order.getYield();
-                list.add(item.getName().substring(0, item.getName().indexOf('#')+1));
-                if (v > 0) {
-                    DecimalFormat df = new DecimalFormat("#.00");
-                    dList.add(Double.valueOf(df.format(v / order.getDryTime() * 60)));
-                } else {
-                    dList.add(50d);
+                if (dryEquipments != null && dryEquipments.size() > 0) {
+                    dryEquipments.stream().forEach(item -> {
+                        DryOrderVo order = (DryOrderVo) redisUtil.hget(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(), realTimeDataVo.getTenantid() + "_" + item.getCode());
+                        if (order != null) {
+                            double v = order.getOriginWeight() - order.getYield();
+                            list.add(item.getName().substring(0, item.getName().indexOf('#')+1));
+                            if (v > 0 && order.getDryTime()>0) {
+                                DecimalFormat df = new DecimalFormat("#.00");
+                                dList.add(Double.valueOf(df.format(v / order.getDryTime() * 60)));
+                            } else {
+                                dList.add(50d);
+                            }
+
+                        }
+                    });
                 }
+                if (orderVo != null) {
+                    orderVo.setCompEqpNum(list);
+                    orderVo.setCompEqpEffic(dList);
+                }
+            }catch (Exception e) {
+                e.printStackTrace();
+            }
+        return Result.ok(orderVo);
+    }
+
+
+    @Override
+    public Result<?> sendSocketMsg(CommandMessageVo msgVo) {
+
+
+        DryEquipment dryEquipment = equipmentService.selectByTenantIdEquipmentId(msgVo.getTenantId() + "", msgVo.getMachineId());
+        log.info("鑾峰彇璁惧锛�" + dryEquipment.toString());
+
+       // managedSessions.keySet().forEach(addr -> {
+           // ObjectOutputStream oos = null;
+            try {
+//                Socket socket = SocketServerConfig.clientMap.get(addr);
+                IoSession session = ServerHandler.clientSocket.get(dryEquipment.getIp());
+                if (session == null) {
+                    return Result.error("鏈幏鍙栧埌session,璇锋鏌ュ鎴风閰嶇疆鎴栬澶噄p閰嶇疆鏄惁姝e父");
+                }
+                SocketMsgVo smv = new SocketMsgVo(msgVo);
+                session.write(JSONObject.toJSONString(smv));
+//                oos = new ObjectOutputStream(socket.getOutputStream());
+//                String s = JSONObject.toJSONString(new SocketMsgVo(msgVo));
+//                oos.writeUTF(s);
+//                oos.flush();
+
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            } finally {
 
             }
-        });
-    }
-    if (orderVo != null) {
-        orderVo.setCompEqpNum(list);
-        orderVo.setCompEqpEffic(dList);
-    }
-}catch (Exception e) {
-    e.printStackTrace();
-}
-        return Result.ok(orderVo);
+     //   });
+        return Result.OK();
     }
 }
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/MinaConfig.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/MinaConfig.java
new file mode 100644
index 0000000..5addc02
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/MinaConfig.java
@@ -0,0 +1,59 @@
+package org.jeecg.modules.dry.socket;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.mina.core.service.IoAcceptor;
+import org.apache.mina.core.service.IoHandler;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
+
+import org.apache.mina.filter.logging.LoggingFilter;
+import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+import java.net.InetSocketAddress;
+import java.nio.charset.Charset;
+
+@Slf4j
+@Configuration
+public class MinaConfig {
+    // socket鍗犵敤绔彛
+    @Value("${mina.port}") 
+    private int port;
+
+    /** 15绉掑彂閫佷竴娆″績璺冲寘 */
+    private static final int HEARTBEATRATE = 15;
+
+    @Bean
+    public LoggingFilter loggingFilter() {
+        return new LoggingFilter();
+    }
+
+    @Bean
+    public IoHandler ioHandler() { return new ServerHandler(); }
+
+    @Bean
+    public InetSocketAddress inetSocketAddress() {
+        return new InetSocketAddress(port);
+    }
+
+    @Bean
+    public IoAcceptor ioAcceptor() throws Exception {
+        IoAcceptor acceptor = new NioSocketAcceptor();
+        acceptor.getFilterChain().addLast("logger", loggingFilter());
+        acceptor.getFilterChain().addLast("coderc",   // 浣跨敤鑷畾涔夌紪鐮佽В鐮佸伐鍘傜被
+                new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));//璁剧疆缂栫爜杩囨护鍣�
+        acceptor.getSessionConfig().setReadBufferSize(1024*1024);//璁剧疆缂撳啿鍖�
+        acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);  //閰嶇疆浼氳瘽淇℃伅
+
+        acceptor.setHandler(ioHandler()); //鑷畾涔夊鐞嗕笟鍔$殑浠g爜锛氳嚜瀹氫箟鐨勭被
+        acceptor.bind(inetSocketAddress());//缁戝畾绔彛鍙�
+        log.info("Socket鏈嶅姟鍣ㄥ湪绔彛锛�" + port + "宸茬粡鍚姩");
+
+        return acceptor;
+    }
+}
+
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/ServerHandler.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/ServerHandler.java
new file mode 100644
index 0000000..533c093
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/ServerHandler.java
@@ -0,0 +1,78 @@
+package org.jeecg.modules.dry.socket;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.session.IoSession;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.concurrent.ConcurrentHashMap;
+
+
+@Slf4j
+public class ServerHandler extends IoHandlerAdapter {
+
+    public static ConcurrentHashMap<String, IoSession> clientSocket = new ConcurrentHashMap<>();
+
+    @Override
+    public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
+        log.error("鍑虹幇寮傚父 :" + session.getRemoteAddress().toString() + " : " + cause.toString());
+        session.closeNow();
+
+    }
+
+
+    @Override
+    public void sessionCreated(IoSession session) throws Exception {
+        log.info("杩炴帴鍒涘缓 : " + session.getRemoteAddress().toString());
+        String remoteAddr = session.getRemoteAddress().toString().replace("/", "");
+        String remoteIp = remoteAddr.substring(0, remoteAddr.indexOf(":"));
+        clientSocket.put(remoteIp, session);
+        session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
+    }
+
+    @Override
+    public void sessionOpened(IoSession session) throws Exception {
+        System.out.println(session);
+        log.info("杩炴帴鎵撳紑: " + session.getRemoteAddress().toString());
+    }
+
+    @Override
+    public void messageReceived(IoSession session, Object message) throws Exception {
+        log.info("鎺ュ彈鍒版暟鎹� :" + message);
+
+
+    }
+
+
+    @Override
+    public void messageSent(IoSession session, Object message) throws Exception {
+        log.info("杩斿洖娑堟伅鍐呭 : " + message.toString());
+    }
+
+    @Override
+    public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
+        if (status == IdleStatus.READER_IDLE) {
+            //log.info("杩涘叆璇荤┖闂茬姸鎬�");
+            //session.closeNow();
+        } else if (status == IdleStatus.BOTH_IDLE) {
+          //  log.info("BOTH绌洪棽");
+            //session.closeNow();
+        }
+    }
+
+    @Override
+    public void sessionClosed(IoSession session) throws Exception {
+        String address = session.getRemoteAddress().toString().replace("/", "");
+        log.info(address + "  浼氳瘽鍏抽棴浜�!");
+        String remoteAddr = session.getRemoteAddress().toString().replace("/", "");
+        String remoteIp = remoteAddr.substring(0, remoteAddr.indexOf(":"));
+        clientSocket.remove(remoteIp);
+
+        }
+
+}
+
+
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/ServerReceiveThread.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/ServerReceiveThread.java
new file mode 100644
index 0000000..4378b0d
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/ServerReceiveThread.java
@@ -0,0 +1,53 @@
+package org.jeecg.modules.dry.socket;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.Socket;
+
+@Slf4j
+public class ServerReceiveThread implements Runnable{
+    private Socket socket;
+
+    public ServerReceiveThread(Socket socket) {
+        this.socket = socket;
+    }
+
+    @Override
+    public void run() {
+        try {
+            //杈撳叆娴佹帴鏀舵暟鎹�
+            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
+            //杈撳嚭娴佸彂閫佹暟鎹�
+            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
+
+            while (true) {
+
+                String o = (String) ois.readUTF();
+                JSONObject jsonObject = JSONObject.parseObject(o);
+                System.out.println(jsonObject.toJSONString());
+                String message = jsonObject.getString("msg");
+                if ("close".equals(message)) {
+                    oos.writeUTF("close");
+                    oos.flush();
+                    break;
+                } else {
+                    oos.writeUTF("鎺ユ敹鏁版嵁鎴愬姛:" + message);
+                    oos.flush();
+                }
+            }
+            log.info("鏈嶅姟绔叧闂鎴风[{}]", socket.getRemoteSocketAddress());
+            oos.close();
+            ois.close();
+            socket.close();
+        } catch (Exception e) {
+            log.info("鎺ユ敹鏁版嵁寮傚父socket鍏抽棴");
+            e.printStackTrace();
+        } finally {
+            log.info("鏁版嵁寮傚父鏁版嵁瑕佹�庝箞淇濈暀");
+        }
+    }
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/SocketServerConfig.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/SocketServerConfig.java
new file mode 100644
index 0000000..d350e1d
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/SocketServerConfig.java
@@ -0,0 +1,47 @@
+package org.jeecg.modules.dry.socket;
+
+import lombok.extern.slf4j.Slf4j;
+import org.checkerframework.checker.units.qual.C;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+@Slf4j
+public class SocketServerConfig {
+    public static ServerSocket serverSocket = null;
+
+    public static ConcurrentHashMap<String, Socket> clientMap = new ConcurrentHashMap<>();
+
+
+    private static final ThreadPoolExecutor threadpool = new ThreadPoolExecutor(15, 15,
+            10L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
+
+    public void createSocket() {
+
+            new Thread(() -> {
+                try {
+                    serverSocket = new ServerSocket(1115);
+                    log.info("寮�鍚痵ocket鐩戝惉锛岀鍙o細1115");
+                    while (true) {
+                        Socket socket = serverSocket.accept();
+                        clientMap.put(socket.getRemoteSocketAddress().toString(), socket);
+                        log.info("鎺ユ敹鍒板鎴风杩炴帴:" + socket.getRemoteSocketAddress());
+                        threadpool.execute(new ServerReceiveThread(socket));
+                    }
+                }catch (IOException e) {
+                    log.error("socket鏈嶅姟鍚姩寮傚父");
+                    e.printStackTrace();
+                }
+            }).start();
+
+    }
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-start/src/main/resources/fault.json b/jeecg-module-dry/jeecg-module-dry-start/src/main/resources/fault.json
new file mode 100644
index 0000000..60f27e4
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-start/src/main/resources/fault.json
@@ -0,0 +1,4 @@
+{
+  "6.1": "鎬ュ仠鏁呴殰",
+  "6.2": "鍏跺畠鏁呴殰"
+}
\ No newline at end of file

--
Gitblit v1.9.3