Browse Source

完善PLC交互记录

zhifei 1 year ago
parent
commit
6318f31855

+ 1 - 6
ruoyi-admin/src/test/java/com/ruoyi/admin/test/base/WarehouseTest.java

@@ -40,20 +40,15 @@ import com.ruoyi.base.service.IBaseIdsequenceService;
 import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.base.service.IBaseWarehouseService;
 import com.ruoyi.base.utils.IdSequenceUtils;
-import com.ruoyi.framework.web.domain.server.Sys;
-import com.ruoyi.system.config.PlcProperties;
 import com.ruoyi.system.enums.PLCConnectNameEnum;
-import com.ruoyi.taiye.domain.DeviceLog;
-import com.ruoyi.taiye.mapper.DeviceLogMapper;
+import com.ruoyi.common.core.domain.DeviceLog;
 import com.ruoyi.taiye.service.IDeviceLogService;
-import com.ruoyi.taiye.service.impl.DeviceLogServiceImpl;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;

+ 7 - 2
ruoyi-dongfangyaiye/src/main/java/com/ruoyi/taiye/domain/DeviceLog.java

@@ -1,4 +1,4 @@
-package com.ruoyi.taiye.domain;
+package com.ruoyi.common.core.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -88,7 +88,11 @@ public class DeviceLog extends BaseEntity
         this.content = content;
         this.status = status;
     }
-
+    public DeviceLog(String deviceId,  String content, String status) {
+        this.deviceId = deviceId;
+        this.content = content;
+        this.status = status;
+    }
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@@ -104,4 +108,5 @@ public class DeviceLog extends BaseEntity
             .append("remark", getRemark())
             .toString();
     }
+
 }

+ 1 - 7
ruoyi-dongfangyaiye/src/main/java/com/ruoyi/taiye/controller/DeviceLogController.java

@@ -3,20 +3,14 @@ package com.ruoyi.taiye.controller;
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
 
-import com.ruoyi.system.enums.PLCConnectNameEnum;
-import com.ruoyi.system.enums.PLCEnum;
 import com.ruoyi.system.init.PlcConnectServiceRunner;
-import com.ruoyi.taiye.domain.DeviceLog;
+import com.ruoyi.common.core.domain.DeviceLog;
 import com.ruoyi.taiye.service.IDeviceLogService;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;

+ 1 - 2
ruoyi-dongfangyaiye/src/main/java/com/ruoyi/taiye/job/AMSJob.java

@@ -1,8 +1,7 @@
 package com.ruoyi.taiye.job;
 
-import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
 import com.ruoyi.system.init.PlcConnectServiceRunner;
-import com.ruoyi.taiye.domain.DeviceLog;
+import com.ruoyi.common.core.domain.DeviceLog;
 import com.ruoyi.system.enums.PLCConnectNameEnum;
 import com.ruoyi.system.enums.PLCEnum;
 import com.ruoyi.taiye.service.IDeviceLogService;

+ 1 - 1
ruoyi-dongfangyaiye/src/main/java/com/ruoyi/taiye/mapper/DeviceLogMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.taiye.mapper;
 
-import com.ruoyi.taiye.domain.DeviceLog;
+import com.ruoyi.common.core.domain.DeviceLog;
 
 import java.util.List;
 

+ 1 - 1
ruoyi-dongfangyaiye/src/main/java/com/ruoyi/taiye/service/IDeviceLogService.java

@@ -1,6 +1,6 @@
 package com.ruoyi.taiye.service;
 
-import com.ruoyi.taiye.domain.DeviceLog;
+import com.ruoyi.common.core.domain.DeviceLog;
 
 import java.util.List;
 

+ 47 - 1
ruoyi-dongfangyaiye/src/main/java/com/ruoyi/taiye/service/impl/DeviceLogServiceImpl.java

@@ -2,10 +2,13 @@ package com.ruoyi.taiye.service.impl;
 
 import java.util.List;
 import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.taiye.domain.DeviceLog;
+import com.ruoyi.common.core.domain.DeviceLog;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.taiye.mapper.DeviceLogMapper;
 import com.ruoyi.taiye.service.IDeviceLogService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 /**
@@ -68,6 +71,8 @@ public class DeviceLogServiceImpl implements IDeviceLogService
      * @return 结果
      */
     @Override
+    @Async
+    @EventListener
     public int insertDeviceLog(DeviceLog deviceLog)
     {
         deviceLog.setCreateTime(DateUtils.getNowDate());
@@ -84,6 +89,10 @@ public class DeviceLogServiceImpl implements IDeviceLogService
     public int updateDeviceLog(DeviceLog deviceLog)
     {
         deviceLog.setUpdateTime(DateUtils.getNowDate());
+        if (StringUtils.isEmpty( deviceLog.getDeviceName())){
+            DeviceEnum deviceEnum = DeviceEnum.valueOf(deviceLog.getDeviceId());
+            deviceLog.setDeviceName(deviceEnum.getMetadata());
+        }
         return deviceLogMapper.updateDeviceLog(deviceLog);
     }
 
@@ -117,4 +126,41 @@ public class DeviceLogServiceImpl implements IDeviceLogService
     }
 
 
+    /**
+     * 设备枚举
+     */
+    public enum DeviceEnum {
+
+        /**
+         * 一号包装机PLC
+         */
+        packingMachine_1Plc("一号包装机PLC"),
+
+        /**
+         * 二号包装机PLC
+         */
+        packingMachine_2Plc("二号包装机PLC"),
+
+        /**
+         * 三号包装机PLC
+         */
+        packingMachine_3Plc("三号包装机PLC"),
+
+        /**
+         * 叠包机PCL
+         */
+        stackingMachinePlc("叠包机PCL");
+
+        private String metadata;
+
+
+        DeviceEnum(String metadata ) {
+            this.metadata = metadata;
+        }
+
+        public String getMetadata() {
+            return metadata;
+        }
+    }
+
 }

+ 7 - 0
ruoyi-system/src/main/java/com/ruoyi/system/init/PlcConnectServiceRunner.java

@@ -2,12 +2,16 @@ package com.ruoyi.system.init;
 
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
 import com.github.rholder.retry.*;
 import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
+import com.ruoyi.common.core.domain.DeviceLog;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.config.PlcConfig;
 import com.ruoyi.system.config.PlcProperties;
+import com.ruoyi.system.enums.PLCConnectNameEnum;
+import com.ruoyi.system.enums.PLCEnum;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.core.annotation.Order;
@@ -74,6 +78,7 @@ public class PlcConnectServiceRunner implements CommandLineRunner {
     }
 
     public void retry(PlcConfig plcConfig) {
+        SpringUtil.getApplicationContext().publishEvent(new DeviceLog(plcConfig.getName(),"PLC设备已恢复连接,请联系管理员","2"));
         reTryPlc.add(plcConfig.getName());
         threadPoolTaskExecutor.execute (() -> {
             Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
@@ -89,6 +94,8 @@ public class PlcConnectServiceRunner implements CommandLineRunner {
                         S7PLC s7PLC = new S7PLC(plcConfig.getEPlcType(), plcConfig.getIp());
                         s7PLC.connect();
                         if (s7PLC.checkConnected()){
+                            SpringUtil.getApplicationContext().publishEvent(new DeviceLog(plcConfig.getName(),"PLC设备已恢复连接","1"));
+
                             plcToolsMap.put(plcConfig.getName(),s7PLC);
                             log.info("plc:{},ip:{},Retry the connection succeeded",plcConfig.getName(),plcConfig.getIp());
                             reTryPlc.remove(plcConfig.getName());

+ 11 - 10
warewms-ams/src/main/java/com/ruoyi/ams/task/service/impl/WcsTaskServiceImpl.java

@@ -1,18 +1,16 @@
 package com.ruoyi.ams.task.service.impl;
 
 import java.lang.reflect.Method;
-import java.rmi.ServerException;
 import java.util.Date;
 import java.util.List;
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
 import com.ruoyi.ams.agv.ndc.domain.AmsTask;
-import com.ruoyi.ams.agv.ndc.entity.CallbackResult;
 import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
 import com.ruoyi.ams.config.domain.FlowConfigEvent;
 import com.ruoyi.ams.config.service.IFlowConfigEventService;
-import com.ruoyi.ams.inv.domain.InvLotAtt;
 import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.inv.service.IInvLotAttService;
@@ -20,6 +18,7 @@ import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
 import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationInfo;
+import com.ruoyi.common.core.domain.DeviceLog;
 import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.redis.RedisCache;
@@ -407,15 +406,19 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
                         //叠包机
                         if ("PM_L".equals(wcsTask.getTaskType().substring(0, 4))) {
                             plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.STACKING_MACHINE.getMetadata()).writeBoolean(PLCEnum.STACKING_MACHINE_FEEDING_FINISH.getMetadata(), true);
+                            SpringUtil.getApplicationContext().publishEvent(new DeviceLog(PLCConnectNameEnum.STACKING_MACHINE.getMetadata(),PLCConnectNameEnum.STACKING_MACHINE.getMetaName(),"任务完成修改PLC数值,地址:"+PLCEnum.STACKING_MACHINE_FEEDING_FINISH.getMetadata()+"值:true","1"));
                         }
                         if (wcsTask.getTaskType().equals(Constant.FLOW_CONFIG_ID.PM_UP_1.name())) {
                             plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata()).writeBoolean(PLCEnum.PACKING_MACHINE_UP_EMPTY_Leave_1.getMetadata(), true);
+                            SpringUtil.getApplicationContext().publishEvent(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_1.getMetaName(),"任务完成修改PLC数值,地址:"+PLCEnum.PACKING_MACHINE_UP_EMPTY_Leave_1.getMetadata()+"值:true","1"));
                         }
                         if (wcsTask.getTaskType().equals(Constant.FLOW_CONFIG_ID.PM_UP_2.name())) {
                             plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_2.getMetadata()).writeBoolean(PLCEnum.PACKING_MACHINE_UP_EMPTY_Leave_2.getMetadata(), true);
+                            SpringUtil.getApplicationContext().publishEvent(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_2.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_2.getMetaName(),"任务完成修改PLC数值,地址:"+PLCEnum.PACKING_MACHINE_UP_EMPTY_Leave_2.getMetadata()+"值:true","1"));
                         }
                         if (wcsTask.getTaskType().equals(Constant.FLOW_CONFIG_ID.PM_UP_3.name())) {
-                            plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_2.getMetadata()).writeBoolean(PLCEnum.PACKING_MACHINE_UP_EMPTY_Leave_3.getMetadata(), true);
+                            plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_3.getMetadata()).writeBoolean(PLCEnum.PACKING_MACHINE_UP_EMPTY_Leave_3.getMetadata(), true);
+                            SpringUtil.getApplicationContext().publishEvent(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_3.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_3.getMetaName(),"任务完成修改PLC数值,地址:"+PLCEnum.PACKING_MACHINE_UP_EMPTY_Leave_3.getMetadata()+"值:true","1"));
                         }
                         break;
                     case 3:
@@ -436,18 +439,17 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
                                 , Constant.WAREHOUSE_ID, updateBy);
                         // 将起始点库存移动到中间缓存位
                         moveStartingPointToMiddleCache(wcsTask);
-                        //释放redis锁
-                        if (!StringUtils.isEmpty(wcsTask.getExt8())) {
-                            redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()), wcsTask.getLocationFrom());
-                        }
                         if (wcsTask.getTaskType().equals(Constant.FLOW_CONFIG_ID.PM_L_1.name())) {
                             plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata()).writeBoolean(PLCEnum.PACKING_MACHINE_UNLOADING_Leave_1.getMetadata(), true);
+                            SpringUtil.getApplicationContext().publishEvent(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_1.getMetaName(),"取货完成修改PLC数值,地址:"+PLCEnum.PACKING_MACHINE_UNLOADING_Leave_1.getMetadata()+"值:true","1"));
                         }
                         if (wcsTask.getTaskType().equals(Constant.FLOW_CONFIG_ID.PM_L_2.name())) {
                             plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_2.getMetadata()).writeBoolean(PLCEnum.PACKING_MACHINE_UNLOADING_Leave_2.getMetadata(), true);
+                            SpringUtil.getApplicationContext().publishEvent(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_2.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_2.getMetaName(),"取货完成修改PLC数值,地址:"+PLCEnum.PACKING_MACHINE_UNLOADING_Leave_2.getMetadata()+"值:true","1"));
                         }
                         if (wcsTask.getTaskType().equals(Constant.FLOW_CONFIG_ID.PM_L_3.name())) {
                             plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_3.getMetadata()).writeBoolean(PLCEnum.PACKING_MACHINE_UNLOADING_Leave_3.getMetadata(), true);
+                            SpringUtil.getApplicationContext().publishEvent(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_3.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_3.getMetaName(),"取货完成修改PLC数值,地址:"+PLCEnum.PACKING_MACHINE_UNLOADING_Leave_3.getMetadata()+"值:true","1"));
                         }
                         break;
                     case 5:
@@ -484,8 +486,6 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
                             baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom()), Long.parseLong(wcsTask.getLocationTo())
                                     , Constant.WAREHOUSE_ID, updateBy);
                         }
-                        // 取消任务删除中间缓存库存
-//                        cancelTaskDelMiddleCache(wcsTask);
                         break;
                     case 8:
                         log.error("任务异常状态------------" + wcsTask.getTaskNo());
@@ -496,6 +496,7 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
             } catch (Exception e) {
                 log.info(wcsTask.getTaskNo() + "-----" + "回调状态:" + state + "异常", e);
                 wcsTask.setRemark("回调状态:" + state + "异常");
+                SpringUtil.getApplicationContext().publishEvent(new DeviceLog(wcsTask.getTaskNo(),"AGV","任务失败,发生异常:"+e.getMessage(),"2"));
                 throw new RuntimeException();
             }
         } else {