Forráskód Böngészése

Merge branch 'master' of http://192.168.1.43:3000/git/sass-lab-distributed-java

zhuchangxue 3 éve
szülő
commit
89cd3e4f46
26 módosított fájl, 155 hozzáadás és 104 törlés
  1. 1 0
      zd-api/zd-api-system/src/main/java/com/zd/system/api/airbottle/RemoteAirBottleService.java
  2. 1 1
      zd-api/zd-api-system/src/main/java/com/zd/system/api/airbottle/factory/RemoteAirBottleFallbackFactory.java
  3. 6 3
      zd-api/zd-api-system/src/main/java/com/zd/system/api/chemical/RemoteStockService.java
  4. 4 1
      zd-api/zd-api-system/src/main/java/com/zd/system/api/chemical/factory/RemoteStockFallbackFactory.java
  5. 5 59
      zd-api/zd-api-system/src/main/java/com/zd/system/api/domain/InventoryTag.java
  6. 7 0
      zd-api/zd-api-system/src/main/java/com/zd/system/api/netty/RemoteNettyService.java
  7. 5 0
      zd-api/zd-api-system/src/main/java/com/zd/system/api/netty/factory/RemoteNettyFallbackFactory.java
  8. 1 0
      zd-modules/zd-airbottle/src/main/java/com/zd/airbottle/controller/AlarmRecordController.java
  9. 3 1
      zd-modules/zd-airbottle/src/main/java/com/zd/airbottle/service/IAlarmRecordService.java
  10. 10 3
      zd-modules/zd-airbottle/src/main/java/com/zd/airbottle/service/impl/AlarmRecordServiceImpl.java
  11. 7 3
      zd-modules/zd-camera/src/main/java/com/zd/iot/vmp/onvif/impl/ONVIFServerIMpl.java
  12. 12 4
      zd-modules/zd-camera/src/main/java/com/zd/iot/vmp/vmanager/onvif/ONVIFController.java
  13. 5 3
      zd-modules/zd-chemical/src/main/java/com/zd/chemical/controller/HxpStockController.java
  14. 3 1
      zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/IHxpStockService.java
  15. 2 0
      zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/impl/HxpCabinetServiceImpl.java
  16. 14 3
      zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/impl/HxpStockServiceImpl.java
  17. 2 2
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/device/DeviceRemoteController.java
  18. 10 0
      zd-modules/zd-netty/src/main/java/com/zd/netty/controller/FridDeviceController.java
  19. 9 2
      zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/DeJuRFIDListenerService.java
  20. 23 16
      zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/DeJuRFIDService.java
  21. 5 0
      zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/WuYuanRFIDService.java
  22. 6 0
      zd-modules/zd-netty/src/main/java/com/zd/netty/service/IFridService.java
  23. 1 0
      zd-modules/zd-netty/src/main/java/com/zd/netty/service/ISendService.java
  24. 6 0
      zd-modules/zd-netty/src/main/java/com/zd/netty/service/IService.java
  25. 5 0
      zd-modules/zd-netty/src/main/java/com/zd/netty/service/impl/FridServiceImpl.java
  26. 2 2
      zd-modules/zd-netty/src/main/java/com/zd/netty/service/impl/SendServiceImpl.java

+ 1 - 0
zd-api/zd-api-system/src/main/java/com/zd/system/api/airbottle/RemoteAirBottleService.java

@@ -4,6 +4,7 @@ import com.zd.common.core.constant.ServiceNameConstants;
 import com.zd.common.core.domain.R;
 import com.zd.system.api.airbottle.factory.RemoteAirBottleFallbackFactory;
 import com.zd.system.api.domain.InventoryTag;
+import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;

+ 1 - 1
zd-api/zd-api-system/src/main/java/com/zd/system/api/airbottle/factory/RemoteAirBottleFallbackFactory.java

@@ -15,6 +15,6 @@ public class RemoteAirBottleFallbackFactory implements FallbackFactory<RemoteAir
     @Override
     public RemoteAirBottleService create(Throwable throwable) {
         log.error("气瓶服务调用失败:{}", throwable.getMessage());
-        return tag -> R.fail("新增报警记录失败:" + throwable.getMessage());
+        return (tag) -> R.fail("新增报警记录失败:" + throwable.getMessage());
     }
 }

+ 6 - 3
zd-api/zd-api-system/src/main/java/com/zd/system/api/chemical/RemoteStockService.java

@@ -2,9 +2,12 @@ package com.zd.system.api.chemical;
 
 import com.zd.common.core.constant.ServiceNameConstants;
 import com.zd.system.api.chemical.factory.RemoteStockFallbackFactory;
-import io.swagger.annotations.ApiOperation;
+import com.zd.system.api.domain.InventoryTag;
+import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 /**
@@ -14,8 +17,8 @@ import org.springframework.web.bind.annotation.RequestParam;
 public interface RemoteStockService {
 
 
-    @GetMapping(value = "/hxpStock/RFIDCheck")
-    public void RFIDCheck(@RequestParam("rfidCode") String rfidCode);
+    @PostMapping(value = "/hxpStock/RFIDCheck")
+    public void RFIDCheck(@RequestBody InventoryTag tag);
 
     @GetMapping(value = "/hxpStock/expireCheck")
     public void expireCheck();

+ 4 - 1
zd-api/zd-api-system/src/main/java/com/zd/system/api/chemical/factory/RemoteStockFallbackFactory.java

@@ -3,10 +3,13 @@ package com.zd.system.api.chemical.factory;
 
 import com.zd.common.core.exception.ServiceException;
 import com.zd.system.api.chemical.RemoteStockService;
+import com.zd.system.api.domain.InventoryTag;
+import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cloud.openfeign.FallbackFactory;
 import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
 
 @Component
 public class RemoteStockFallbackFactory implements FallbackFactory<RemoteStockService> {
@@ -18,7 +21,7 @@ public class RemoteStockFallbackFactory implements FallbackFactory<RemoteStockSe
         return new RemoteStockService() {
 
             @Override
-            public void RFIDCheck(String rfidCode) {
+            public void RFIDCheck(InventoryTag tag) {
                 throw new ServiceException("保存调用失败:" + throwable.getMessage());
             }
 

+ 5 - 59
zd-api/zd-api-system/src/main/java/com/zd/system/api/domain/InventoryTag.java

@@ -1,5 +1,9 @@
 package com.zd.system.api.domain;
 
+import com.zd.system.api.laboratory.domain.RemoteLabHardware;
+import lombok.Data;
+
+@Data
 public class InventoryTag {
 
     private String pc;
@@ -21,63 +25,5 @@ public class InventoryTag {
      */
     private String freq;
 
-    public String getPc() {
-        return pc;
-    }
-
-    public void setPc(String pc) {
-        this.pc = pc;
-    }
-
-    public String getEpc() {
-        return epc;
-    }
-
-    public void setEpc(String epc) {
-        this.epc = epc;
-    }
-
-    public int getAntId() {
-        return antId;
-    }
-
-    public void setAntId(int antId) {
-        this.antId = antId;
-    }
-
-    public int getRssi() {
-        return rssi;
-    }
-
-    public void setRssi(int rssi) {
-        this.rssi = rssi;
-    }
-
-    public int getPhase() {
-        return phase;
-    }
-
-    public void setPhase(int phase) {
-        this.phase = phase;
-    }
-
-    public String getFreq() {
-        return freq;
-    }
-
-    public void setFreq(String freq) {
-        this.freq = freq;
-    }
-
-    @Override
-    public String toString() {
-        return "InventoryTag{" +
-                "pc='" + pc + '\'' +
-                ", epc='" + epc + '\'' +
-                ", antId=" + antId +
-                ", rssi=" + rssi +
-                ", phase=" + phase +
-                ", freq='" + freq + '\'' +
-                '}';
-    }
+    private RemoteLabHardware remoteLabHardware;
 }

+ 7 - 0
zd-api/zd-api-system/src/main/java/com/zd/system/api/netty/RemoteNettyService.java

@@ -32,4 +32,11 @@ public interface RemoteNettyService {
     @PostMapping("/frid/startMonitorChannels")
     R<Boolean> startMonitorChannels(@RequestBody RemoteLabHardware hardware);
 
+    /**
+     * 开启设备警报
+     */
+    @ApiOperation("开启设备警报")
+    @PostMapping("/frid/alarm")
+    R<Boolean> alarm(@RequestBody RemoteLabHardware hardware);
+
 }

+ 5 - 0
zd-api/zd-api-system/src/main/java/com/zd/system/api/netty/factory/RemoteNettyFallbackFactory.java

@@ -26,6 +26,11 @@ public class RemoteNettyFallbackFactory implements FallbackFactory<RemoteNettySe
             public R<Boolean> startMonitorChannels(RemoteLabHardware hardware) {
                 return  R.fail("启动扫描失败:" + throwable.getMessage());
             }
+
+            @Override
+            public R<Boolean> alarm(RemoteLabHardware hardware) {
+                return  R.fail("开启警报失败:" + throwable.getMessage());
+            }
         };
     }
 }

+ 1 - 0
zd-modules/zd-airbottle/src/main/java/com/zd/airbottle/controller/AlarmRecordController.java

@@ -15,6 +15,7 @@ import com.zd.common.log.annotation.Log;
 import com.zd.common.log.enums.BusinessType;
 import com.zd.common.security.annotation.PreAuthorize;
 import com.zd.system.api.domain.InventoryTag;
+import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.BeanUtils;

+ 3 - 1
zd-modules/zd-airbottle/src/main/java/com/zd/airbottle/service/IAlarmRecordService.java

@@ -4,6 +4,7 @@ import com.zd.airbottle.domain.AlarmRecord;
 import com.zd.airbottle.domain.vo.AlarmRecordVo;
 import com.zd.airbottle.domain.vo.BottleStorageInfoVo;
 import com.zd.system.api.domain.InventoryTag;
+import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 
 import java.util.List;
 
@@ -31,9 +32,10 @@ public interface IAlarmRecordService {
      * 新增报警记录
      *
      * @param alarmRecord 报警记录
+     * @param hardware RFID设备信息
      * @return 结果
      */
-    int insertAlarmRecord(AlarmRecord alarmRecord);
+    int insertAlarmRecord(AlarmRecord alarmRecord, RemoteLabHardware hardware);
 
     /**
      * 获取拓展信息

+ 10 - 3
zd-modules/zd-airbottle/src/main/java/com/zd/airbottle/service/impl/AlarmRecordServiceImpl.java

@@ -26,6 +26,7 @@ import com.zd.system.api.laboratory.RemoteSubQueryService;
 import com.zd.system.api.laboratory.domain.LabSubject;
 import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 import com.zd.system.api.message.RemoteMessageService;
+import com.zd.system.api.netty.RemoteNettyService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -61,6 +62,8 @@ public class AlarmRecordServiceImpl implements IAlarmRecordService {
     private RemoteUserService userService;
     @Resource
     private RemoteMessageService messageService;
+    @Resource
+    private RemoteNettyService remoteNettyService;
 
     private static final String FRID_CODE = "FRID:";
 
@@ -88,11 +91,12 @@ public class AlarmRecordServiceImpl implements IAlarmRecordService {
      * 默认新增气瓶报警记录
      *
      * @param alarmRecord 报警记录
+     * @param hardware RFID 设备数据
      * @return 结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int insertAlarmRecord(AlarmRecord alarmRecord) {
+    public int insertAlarmRecord(AlarmRecord alarmRecord, RemoteLabHardware hardware) {
         String electronicTag = alarmRecord.getElectronicTag();
         QpBottleStorageRVo storageRVo = storageService.getByElectronicTag(electronicTag);
         if (storageRVo != null) {
@@ -103,8 +107,11 @@ public class AlarmRecordServiceImpl implements IAlarmRecordService {
                 return 1;
             }
 
+            if (hardware!=null){
+                R<Boolean> alarm = remoteNettyService.alarm(hardware);//RFID设备报警
+                log.info(alarm.getMsg());
+            }
             sendAlarm(storageRVo);// 发送报警消息
-
             redisService.setCacheObject(key, electronicTag, 300L, TimeUnit.SECONDS);
             alarmRecord.setAlarmTime(Calendar.getInstance().getTime())
                     .setMasterId(id)
@@ -226,7 +233,7 @@ public class AlarmRecordServiceImpl implements IAlarmRecordService {
     @Override
     @Transactional
     public void remoteAdd(InventoryTag tag) {
-        insertAlarmRecord(new AlarmRecord().setElectronicTag(tag.getEpc()));
+        insertAlarmRecord(new AlarmRecord().setElectronicTag(tag.getEpc()),tag.getRemoteLabHardware());
     }
 
     @Override

+ 7 - 3
zd-modules/zd-camera/src/main/java/com/zd/iot/vmp/onvif/impl/ONVIFServerIMpl.java

@@ -169,6 +169,7 @@ public class ONVIFServerIMpl implements IONVIFServer {
         param.put("app",appName);
         param.put("stream",streamName);
         param.put("api","startRecord");
+        param.remove("rstpUrl");
         return getCommonRecord(mediaServerItem,param);
     }
 
@@ -196,9 +197,10 @@ public class ONVIFServerIMpl implements IONVIFServer {
         Integer code=jsonObject.getInteger("code");
         if(code==0){
             List<String> fileLlist=getFileName(urlPath);
+            logger.error("fileLlist size:"+fileLlist.size());
             if(null!=fileLlist && fileLlist.size()>0){
-                fileLlist=fileLlist.stream().sorted(Comparator.comparing(String::toString).reversed()).collect(Collectors.toList());
-                return returnPath+fileLlist.get(0);
+                //fileLlist=fileLlist.stream().sorted(Comparator.comparing(String::toString).reversed()).collect(Collectors.toList());
+                return returnPath+fileLlist.get(fileLlist.size()-1);
             }else{
                 return null;
             }
@@ -208,12 +210,14 @@ public class ONVIFServerIMpl implements IONVIFServer {
 
     @Override
     public Boolean closeStream(MediaServerItem mediaServerItem, Map<String, Object> param) {
+        param.put("vhost","__defaultVhost__");
         param.put("schema","rtsp");
         param.put("api","close_streams");
         param.put("force",1);
         JSONObject jsonObject=getCommonRecord(mediaServerItem,param);
         Integer code=jsonObject.getInteger("code");
-        if(code==0){
+        Integer count_closed=jsonObject.getInteger("count_closed");
+        if(code==0 && count_closed>0){
             return true;
         }
         return false;

+ 12 - 4
zd-modules/zd-camera/src/main/java/com/zd/iot/vmp/vmanager/onvif/ONVIFController.java

@@ -9,11 +9,14 @@ import com.zd.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.zd.iot.vmp.onvif.IONVIFServer;
 import com.zd.iot.vmp.service.IMediaServerService;
 import com.zd.iot.vmp.vmanager.bean.WVPResult;
+import com.zd.iot.vmp.web.ApiStreamController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -31,6 +34,8 @@ import java.util.UUID;
 @RequestMapping("/api/onvif")
 public class ONVIFController {
 
+    private final static Logger logger = LoggerFactory.getLogger(ONVIFController.class);
+
     @Autowired
     private IMediaServerService mediaServerService;
 
@@ -152,9 +157,8 @@ public class ONVIFController {
             if (errorCode == 0) {
                 MediaServerItem mediaServerItem = mediaServerService.getOne("your_server_id");
                 Map<String,Object> map=new HashMap<>();
-
                 map.put("type",1);
-                map.put("vhost",UUID.randomUUID().toString());
+                map.put("vhost","__defaultVhost__");
                 map.put("customized_path","/home/upload");
                 map.put("max_second",360000);
                 String name=hostname.replace(".","");
@@ -203,9 +207,9 @@ public class ONVIFController {
         String appName="app"+hostname;
         String streamName="stream"+hostname;
         map.put("type",1);
-        map.put("vhost",UUID.randomUUID().toString());
         map.put("app",appName);
         map.put("stream",streamName);
+        map.put("vhost","__defaultVhost__");
         boolean isTrue=onvifServer.isRecording(mediaServerItem,map);
         if(isTrue==false){
             WVPResult<String> resultData = new WVPResult();
@@ -217,7 +221,11 @@ public class ONVIFController {
         }
         String urlPath=onvifServer.stopRecord(mediaServerItem,map);
         urlPath=urlPath.replace("/.","/");
-        boolean isCloseTrue=onvifServer.closeStream(mediaServerItem,map);
+        logger.error("返回路径是否重复日志:"+urlPath);
+        Map<String,Object> closeMap=new HashMap<>();
+        closeMap.put("app",appName);
+        closeMap.put("stream",streamName);
+        boolean isCloseTrue=onvifServer.closeStream(mediaServerItem,closeMap);
         WVPResult<String> resultData = new WVPResult();
         if(StringUtils.isNotBlank(urlPath) && isCloseTrue){
             resultData.setCode(HttpStatus.SUCCESS);

+ 5 - 3
zd-modules/zd-chemical/src/main/java/com/zd/chemical/controller/HxpStockController.java

@@ -13,6 +13,8 @@ import com.zd.common.core.domain.per.PerFun;
 import com.zd.common.core.domain.per.PerPrefix;
 import com.zd.common.core.utils.SecurityUtils;
 import com.zd.common.security.service.TokenService;
+import com.zd.system.api.domain.InventoryTag;
+import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import com.zd.common.response.ResultData;
@@ -196,9 +198,9 @@ public class HxpStockController extends BaseController {
 
 
     @ApiOperation(value = "RFID违规检测")
-    @GetMapping(value = "/RFIDCheck")
-    public void RFIDCheck(@RequestParam("rfidCode") String rfidCode) {
-        hxpStockService.RFIDCheck(rfidCode);
+    @PostMapping(value = "/RFIDCheck")
+    public void RFIDCheck(@RequestBody InventoryTag tag) {
+        hxpStockService.RFIDCheck(tag);
     }
 
     /**

+ 3 - 1
zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/IHxpStockService.java

@@ -6,6 +6,8 @@ import com.zd.chemical.domain.vo.HxpStockDetailVO;
 import com.zd.chemical.domain.vo.HxpStockJoinVO;
 import com.zd.chemical.domain.vo.HxpStockOutVO;
 import com.zd.chemical.domain.vo.HxpStockSearch;
+import com.zd.system.api.domain.InventoryTag;
+import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 
 /**
  * 库存管理Service接口
@@ -87,7 +89,7 @@ public interface IHxpStockService
      */
     public int deleteHxpStockById(Long id);
 
-    void RFIDCheck(String rfidCode);
+    void RFIDCheck(InventoryTag tag);
 
     int selectCountByRfidCode(HxpStock hxpStock);
 

+ 2 - 0
zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/impl/HxpCabinetServiceImpl.java

@@ -287,6 +287,7 @@ public class HxpCabinetServiceImpl implements IHxpCabinetService {
                 // 结束录像获取地址
                 R r1 = remoteCameraService.stopRecord(result.getIpAddress());
                 if(r1 != null && HttpStatus.SUCCESS == r1.getCode()){
+                    logger.info("柜锁关闭获取录像地址:" + r1.getData());
                     closeLockVideo = r1.getData() + "";
                     success = true;
                 }else {
@@ -311,6 +312,7 @@ public class HxpCabinetServiceImpl implements IHxpCabinetService {
                 // 关锁之后要存储录像
 //                HxpCabinetlockLog hxpCabinetlockLog = cabinetlockLogMapper.selectByLockId(aioCabinetLockVo.getSubId(), Integer.parseInt(result.getLockId()));
                 HxpCabinetlockLog hxpCabinetlockLog = cabinetlockLogMapper.selectHxpCabinetlockLogById(aioCabinetLockVo.getLockLogId());
+                result.setLockLogId(aioCabinetLockVo.getLockLogId());
                 if(hxpCabinetlockLog != null){
                     hxpCabinetlockLog.setCloseLockTime(DateUtils.getNowDate());
                     hxpCabinetlockLog.setCloseLockVideo(closeLockVideo);

+ 14 - 3
zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/impl/HxpStockServiceImpl.java

@@ -19,9 +19,12 @@ import com.zd.common.security.utils.SaveUtil;
 import com.zd.system.api.alarm.RemoteAlarmService;
 import com.zd.system.api.alarm.domain.AlarmEntrty;
 import com.zd.system.api.alarm.domain.Routes;
+import com.zd.system.api.domain.InventoryTag;
 import com.zd.system.api.domain.SysDictData;
 import com.zd.system.api.laboratory.RemoteLaboratoryService;
 import com.zd.system.api.laboratory.RemoteMessageContentService;
+import com.zd.system.api.laboratory.domain.RemoteLabHardware;
+import com.zd.system.api.netty.RemoteNettyService;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -31,6 +34,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
@@ -85,7 +89,8 @@ public class HxpStockServiceImpl implements IHxpStockService {
     private RemoteAlarmService remoteAlarmService;
     @Autowired
     private HxpCabinetlockLogMapper hxpCabinetlockLogMapper;
-
+    @Resource
+    private RemoteNettyService remoteNettyService;
     /**
      * 查询库存管理
      *
@@ -287,10 +292,10 @@ public class HxpStockServiceImpl implements IHxpStockService {
 
     /**
      * RFID 实时检测 是否是违规带离实验室
-     * @param rfidCode
      */
     @Override
-    public void RFIDCheck(String rfidCode) {
+    public void RFIDCheck(InventoryTag tag) {
+        String rfidCode = tag.getEpc();
         if(StringUtils.isBlank(rfidCode)){
             return;
         }
@@ -312,6 +317,12 @@ public class HxpStockServiceImpl implements IHxpStockService {
             logger.info("RFID 化学品正常使用中: " + JSONUtil.toJsonStr(hxpUserecord));
         }else {
             logger.error("RFID 检测到违规触发报警: " + JSONUtil.toJsonStr(hxpStock));
+            //触发RFID警报
+            RemoteLabHardware hardware = tag.getRemoteLabHardware();
+            if (hardware!=null){
+                R<Boolean> alarm = remoteNettyService.alarm(hardware);
+                logger.info(alarm.getMsg());
+            }
             // 如果非领用状态,做报警台账
             // 0.检测实验室声光报警器是否使用- 使用则直接调用触发- 否则跳过
             Map<String,Object> subInfo = hxpUserecordMapper.selectSubInfoById(hxpStock.getSubId());

+ 2 - 2
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/device/DeviceRemoteController.java

@@ -81,11 +81,11 @@ public class DeviceRemoteController {
         try {
             ops.write(ReUtil.hexStringToByteArray(instruct));
 
-            Thread.sleep(300);
+            Thread.sleep(100);
 
             ops.write(ReUtil.hexStringToByteArray(CRCCHECK.getReadLockOrder(Integer.parseInt(cabinetV2Lock.getLockId()))));
 
-            Thread.sleep(100);
+            Thread.sleep(300);
             Integer status = redisService.getCacheObject(relayCode + ":" + cabinetV2Lock.getLockId());
             if(status != null && status == 0){
                 return R.ok();

+ 10 - 0
zd-modules/zd-netty/src/main/java/com/zd/netty/controller/FridDeviceController.java

@@ -50,4 +50,14 @@ public class FridDeviceController {
         service.stop(hardware);
         return R.ok();
     }
+
+    /**
+     * 开启设备警报
+     */
+    @ApiOperation("开启设备警报")
+    @PostMapping("/alarm")
+    public R<Boolean> alarm(@RequestBody RemoteLabHardware hardware) {
+        service.alarm(hardware);
+        return R.ok();
+    }
 }

+ 9 - 2
zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/DeJuRFIDListenerService.java

@@ -2,7 +2,6 @@ package com.zd.netty.sdk;
 
 import com.gg.reader.api.dal.GClient;
 import com.gg.reader.api.dal.GServer;
-import com.gg.reader.api.protocol.gx.MsgBaseStop;
 import com.zd.common.core.enums.HardwareOperate;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.netty.service.IService;
@@ -26,6 +25,8 @@ public class DeJuRFIDListenerService implements IService {
     private final Map<String, GServer> serverMap = new ConcurrentHashMap<>();
     @Resource
     private RemoteLaboratoryService remoteLaboratoryService;
+    @Resource
+    private DeJuRFIDService deJuRFIDService;
 
     @Override
     public void start(RemoteLabHardware hardware) {
@@ -55,12 +56,18 @@ public class DeJuRFIDListenerService implements IService {
         String ipAddress = hardware.getIpAddress();
         if (serverMap.containsKey(ipAddress)) {
             GServer server = serverMap.get(ipAddress);
+            server.onGClientConnected= (client, s) -> DeJuRFIDService.stopGpo(client,0);
             server.close();
             log.info(ipAddress + "---监听结束");
         }
         serverMap.remove(ipAddress);
     }
 
+    @Override
+    public void alarm(RemoteLabHardware hardware) {
+        deJuRFIDService.alarm(hardware);
+    }
+
     /**
      * 订阅监听上报
      * @param server 服务对象
@@ -74,7 +81,7 @@ public class DeJuRFIDListenerService implements IService {
             subscribeTcpHandler(client,hardware);//订阅Tcp断连上报
             DeJuRFIDService.setPower(hardware, client);
             DeJuRFIDService.setInventory(hardware, client);
-            DeJuRFIDService.subscribeHandler(client);
+            DeJuRFIDService.subscribeHandler(client, hardware);
             remoteLaboratoryService.update(HardwareOperate.OPEN,hardware.getIpAddress());
         };
     }

+ 23 - 16
zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/DeJuRFIDService.java

@@ -1,23 +1,17 @@
 package com.zd.netty.sdk;
 
 import com.gg.reader.api.dal.GClient;
-import com.gg.reader.api.dal.HandlerTagEpcLog;
-import com.gg.reader.api.dal.HandlerTagEpcOver;
 import com.gg.reader.api.protocol.gx.*;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.utils.SpringUtils;
 import com.zd.netty.service.ISendService;
 import com.zd.netty.service.IService;
-import com.zd.netty.thread.ThreadPoolTaskConfig;
 import com.zd.system.api.domain.InventoryTag;
 import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.Resource;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledExecutorService;
@@ -54,7 +48,7 @@ public class DeJuRFIDService implements IService {
         }
         if (client.openTcp(ipAddress + ":"+PORT, 2000)) {
             // 订阅标签上报事件
-            subscribeHandler(client);
+            subscribeHandler(client,hardware);
             // 功率配置, 将4个天线功率都设置为30dBm.
             MsgBaseSetPower msgBaseSetPower = setPower(hardware, client);
             if (0 != msgBaseSetPower.getRtCode()) {
@@ -134,6 +128,21 @@ public class DeJuRFIDService implements IService {
         close(hardware);
     }
 
+    @Override
+    public void alarm(RemoteLabHardware hardware) {
+        //灯带设置
+        String ipAddress = hardware.getIpAddress();
+        if (clientMap.containsKey(ipAddress)){
+            GClient client = clientMap.get(ipAddress);
+            if (!isAlarm.get()) {
+                scheduledExecutorService.execute(() -> {
+                    isAlarm.set(true);
+                    changeGpo(1, client, 10);
+                });
+            }
+        }
+    }
+
     private static void close(RemoteLabHardware hardware) {
         String ipAddress = hardware.getIpAddress();
         if (clientMap.containsKey(ipAddress)) {
@@ -151,7 +160,6 @@ public class DeJuRFIDService implements IService {
         MsgAppSetGpo msgAppSetGpo = new MsgAppSetGpo();
         msgAppSetGpo.setGpo1(state);
         msgAppSetGpo.setGpo2(state);
-
         client.sendSynMsg(msgAppSetGpo);
         String status = state == 1 ? "start" : "stop";
         if (0 == msgAppSetGpo.getRtCode()) {
@@ -181,20 +189,19 @@ public class DeJuRFIDService implements IService {
      * 订阅6c标签信息上报
      *
      * @param client 客户端
+     * @param hardware 设备数据
      */
-    public static void subscribeHandler(GClient client) {
+    public static void subscribeHandler(GClient client, RemoteLabHardware hardware) {
+        String ipAddress = hardware.getIpAddress();
+        if (!clientMap.containsKey(ipAddress)){
+            clientMap.put(ipAddress,client);
+        }
         client.onTagEpcLog = (s, logBaseEpcInfo) -> {
             if (logBaseEpcInfo.getResult() == 0) {
                 log.info("===========》{}", logBaseEpcInfo.getbEpc());
-                //灯带设置
-                if (!isAlarm.get()) {
-                    scheduledExecutorService.execute(() -> {
-                        isAlarm.set(true);
-                        changeGpo(1, client, 10);
-                    });
-                }
                 InventoryTag tag = new InventoryTag();
                 BeanUtils.copyProperties(logBaseEpcInfo, tag);
+                tag.setRemoteLabHardware(hardware);
                 sendService.send(tag);
             }
         };

+ 5 - 0
zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/WuYuanRFIDService.java

@@ -115,6 +115,11 @@ public class WuYuanRFIDService implements IService {
         readerMap.remove(ipAddress);
     }
 
+    @Override
+    public void alarm(RemoteLabHardware hardware) {
+        // TODO document why this method is empty
+    }
+
     public Boolean deviceStatus(RemoteLabHardware hardware) {
         Reader reader = null;
         String ipAddress = hardware.getIpAddress();

+ 6 - 0
zd-modules/zd-netty/src/main/java/com/zd/netty/service/IFridService.java

@@ -14,4 +14,10 @@ public interface IFridService {
      * @param hardware  设备数据
      */
     void stop(RemoteLabHardware hardware);
+
+    /**
+     * 关闭RFID扫描器
+     * @param hardware  设备数据
+     */
+    void alarm(RemoteLabHardware hardware);
 }

+ 1 - 0
zd-modules/zd-netty/src/main/java/com/zd/netty/service/ISendService.java

@@ -1,6 +1,7 @@
 package com.zd.netty.service;
 
 import com.zd.system.api.domain.InventoryTag;
+import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 
 public interface ISendService {
 

+ 6 - 0
zd-modules/zd-netty/src/main/java/com/zd/netty/service/IService.java

@@ -16,4 +16,10 @@ public interface IService {
      * 断开RFID读写器
      */
     void disconnect(RemoteLabHardware hardware);
+
+    /**
+     * 启动警报
+     * @param hardware 设备数据
+     */
+    void alarm(RemoteLabHardware hardware);
 }

+ 5 - 0
zd-modules/zd-netty/src/main/java/com/zd/netty/service/impl/FridServiceImpl.java

@@ -26,4 +26,9 @@ public class FridServiceImpl implements IFridService {
     public void stop(RemoteLabHardware hardware) {
         rfidService(hardware.getManufacturerType()).disconnect(hardware);
     }
+
+    @Override
+    public void alarm(RemoteLabHardware hardware) {
+        rfidService(hardware.getManufacturerType()).disconnect(hardware);
+    }
 }

+ 2 - 2
zd-modules/zd-netty/src/main/java/com/zd/netty/service/impl/SendServiceImpl.java

@@ -4,8 +4,8 @@ import com.zd.netty.service.ISendService;
 import com.zd.system.api.airbottle.RemoteAirBottleService;
 import com.zd.system.api.chemical.RemoteStockService;
 import com.zd.system.api.domain.InventoryTag;
+import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -29,7 +29,7 @@ public class SendServiceImpl implements ISendService {
             log.info("气瓶服务异常:"+e.getMessage());
         }
         try {
-            remoteStockService.RFIDCheck(tag.getEpc());
+            remoteStockService.RFIDCheck(tag);
         } catch (Exception e) {
             log.info("化学品服务异常:"+e.getMessage());
         }