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