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