Quellcode durchsuchen

1、设备对接

wenxgdev vor 5 Jahren
Ursprung
Commit
47b1754896

+ 1 - 32
sptg-device/sptg-device-biz/src/main/java/com/sptg/device/biz/controller/DeviceController.java

@@ -713,7 +713,7 @@ public class DeviceController implements DeviceFeign {
         if(faceCodeList == null || faceCodeList.size() == 0){
             String deleteUser = map.get("deleteUser");
             if(deleteUser != null && deleteUser.equals("true")){
-                this.msgPublishService.batchPushInstruct(task.getData(),deviceList,Instruct.delete_user,map);
+                this.msgPublishService.batchPushInstruct(task.getData(),deviceList,Instruct.delete_user_face,map);
             }else{
                 this.msgPublishService.batchPushInstruct(task.getData(),deviceList,Instruct.delete_user_face,map);
             }
@@ -928,7 +928,6 @@ public class DeviceController implements DeviceFeign {
         wrapper.in("l_id",task.getDeviceIdList());
         List<Device> deviceList = this.deviceServiceInterface.selectList(wrapper);
         Map<String,String> map = new HashMap<>();
-        map.put("isAdd", "false");
         if(task.getOperType().equals(OperationConstant.THREE)){ //删除人脸
             this.msgPublishService.batchPushInstruct(task.getData(), deviceList, Instruct.delete_user_face, map);
         }else{
@@ -1539,36 +1538,6 @@ public class DeviceController implements DeviceFeign {
         }else {
             map.put("unitName",null);
         }
-        if(dbDevice.getDeviceFactory().equals(DeviceConstants.DEVICE_FACTORY_DAHAO)){ //大豪设备
-            //  权限校验
-            if (!dbDevice.getOrgPosition().startsWith(device.getOrgPosition())){
-                return new ResultBean<>(ResultEnum.FORBIDDEN);
-            }
-            // 检查大豪设备是否在线
-            Integer isOnline = this.checkDHDeviceOnLine(dbDevice.getSerialNumber());
-            if(null != isOnline && isOnline.equals(OperationConstant.ONE)){
-                //  下发指令
-                InstructDH instructDH = new InstructDH();
-                instructDH.setCode(instruct.getCode());
-                instructDH.setExchangeName(instructDH.getDHExchange(instruct.getExchangeName()));
-                instructDH.setDescribe(instruct.getDescribe());
-
-                this.msgPublishService.topicMsgAsyncPublish(device.getUserId(),dbDevice,instructDH,map);
-                return new ResultBean<>(ResultEnum.SUCCESS,true);
-            }else{
-                Assert.isTrue(0 == isOnline,"设备不在线");
-            }
-//            InstructDH instructDH = new InstructDH();
-//            instructDH.setCode(instruct.getCode());
-//            instructDH.setExchangeName(instructDH.getDHExchange(instruct.getExchangeName()));
-//            instructDH.setDescribe(instruct.getDescribe());
-//            this.msgPublishService.topicMsgAsyncPublish(device.getUserId(),dbDevice,instructDH);
-//            return new ResultBean<>(ResultEnum.SUCCESS,true);
-        }
-        //  校验设备是否在线
-//        long lastHeartbeat = System.currentTimeMillis() - DeviceServiceInterface.HEART_RATE;
-//        boolean isOnLine = null != dbDevice.getLastHeartbeat() && dbDevice.getLastHeartbeat() > lastHeartbeat;
-//        Assert.isTrue(isOnLine,"设备不在线");
         //  权限校验
         if (!dbDevice.getOrgPosition().startsWith(device.getOrgPosition())){
             return new ResultBean<>(ResultEnum.FORBIDDEN);

+ 5 - 0
sptg-device/sptg-device-biz/src/main/java/com/sptg/device/biz/controller/InstructPublishLogController.java

@@ -1,5 +1,7 @@
 package com.sptg.device.biz.controller;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.sptg.common.core.beans.PageBean;
 import com.sptg.common.core.beans.ResultBean;
@@ -34,6 +36,7 @@ public class InstructPublishLogController implements InstructPublishLogFeign {
         instructPublishLog.setErrorMsg(publishLog.getErrorMsg());
         instructPublishLog.setLastModifyTime(new Date());
         this.instructPublishLogService.updateById(instructPublishLog);
+        System.out.println("【callback】" + JSONUtil.toJsonStr(instructPublishLog));
         return ResultBean.ok(true);
     }
 
@@ -56,6 +59,8 @@ public class InstructPublishLogController implements InstructPublishLogFeign {
         InstructPublishLog instructPublishLog = this.instructPublishLogService.selectById(publishLog.getId());
         Assert.notNull(instructPublishLog,"Id不存在");
         instructPublishLog.setHandleStatus(publishLog.getHandleStatus());
+        instructPublishLog.setStatus(publishLog.getStatus());
+        instructPublishLog.setLastModifyTime(new Date());
         this.instructPublishLogService.updateById(instructPublishLog);
         return ResultBean.ok(true);
     }

+ 1 - 6
sptg-device/sptg-device-biz/src/main/java/com/sptg/device/biz/service/impl/MsgPublishServiceImpl.java

@@ -239,13 +239,8 @@ public class MsgPublishServiceImpl implements MsgPublishService {
         deviceList.forEach(device -> {
             try {
                 if(device.getDeviceFactory().equals(DeviceConstants.DEVICE_FACTORY_ZONGHENG)){
-                    String isAdd = map.get("isAdd");
                     map.put("serialNum", DeviceConstants.DEVICE_FACTORY_ZONGHENG);
-                    if("false".equals(isAdd)){ //特指更新,纵横设备更新人脸需要下发更新人脸指令
-                        this.publish(obj, device, Instruct.update_user_face, map);
-                    }else{
-                        this.publish(obj,device,instruct,map);
-                    }
+                    this.publish(obj,device,instruct,map);
                 }else{
                     this.publish(obj,device,instruct,map);
                 }

+ 40 - 32
sptg-estate/sptg-estate-biz/src/main/java/com/sptg/estate/biz/service/impl/UserServiceImpl.java

@@ -369,17 +369,25 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                     //房间住户加-1
                     room.setUserNumber(room.getUserNumber() - 1);
                     if (this.roomServiceInterface.updateById(room)) {
-                        //删除关联卡及下发的卡号
-                        if(this.accessCardServiceInterface.deleteAccessCardByUserIdAndType(String.valueOf(user.getId()),OperationConstant.ZERO)){
-                            //删除下发的人脸
-                            deletePushUserFace(user);
-                            this.deleteCache(user);
-                            //处理删除user后,与之关联的会员状态
-                            this.dealMemberState(userDto.getId());
-                            //删除和住户关联的视频通话账号
+                        //删除下发的人脸
+                        deletePushUserFace(user);
+                        this.deleteCache(user);
+                        //处理删除user后,与之关联的会员状态
+                        this.dealMemberState(userDto.getId());
+                        //删除和住户关联的视频通话账号
 //                            this.videoCallAccountServiceInterface.deleteAccountByUserId(userDto.getId());
-                            return new ResultBean<>(ResultEnum.SUCCESS, true);
-                        }
+                        return new ResultBean<>(ResultEnum.SUCCESS, true);
+                        //删除关联卡及下发的卡号
+//                        if(this.accessCardServiceInterface.deleteAccessCardByUserIdAndType(String.valueOf(user.getId()),OperationConstant.ZERO)){
+//                            //删除下发的人脸
+//                            deletePushUserFace(user);
+//                            this.deleteCache(user);
+//                            //处理删除user后,与之关联的会员状态
+//                            this.dealMemberState(userDto.getId());
+//                            //删除和住户关联的视频通话账号
+////                            this.videoCallAccountServiceInterface.deleteAccountByUserId(userDto.getId());
+//                            return new ResultBean<>(ResultEnum.SUCCESS, true);
+//                        }
                     }
                 }
             }
@@ -1231,7 +1239,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             List<Long> deviceIdList = devicesAccessPushVO.getDeviceIdList();
             Assert.notEmpty(deviceIdList, "请选择需要下发人脸的设备");
             switch (pushMaterial){
-                case 0: //人脸和门禁卡同时下发到设备
+                /*case 0: //人脸和门禁卡同时下发到设备
                     if(StringUtils.isBlank(user.getImageUri())){ //人脸下发是基于用户已存在人脸
                         return new ResultBean<>(EstateEnum.IS_NOT_FACE);
                     }
@@ -1245,8 +1253,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                         //----------------下发门禁卡-------------------//
                         resultBean = this.handleSendUserCard(accessCard0, OperationConstant.ONE, deviceIdList, true,devicesAccessPushVO.getBeginDate(), devicesAccessPushVO.getEndDate());
                     }
-                    break;
-                case 1: //仅人脸下发到设备
+                    break;*/
+                case 1: //人脸启用
                     if(StringUtils.isBlank(user.getImageUri())){ //人脸下发是基于用户已存在人脸
                         return new ResultBean<>(EstateEnum.IS_NOT_FACE);
                     }
@@ -1256,7 +1264,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                         resultBean = this.handleSendUserFace(user, deviceIdList, true,devicesAccessPushVO.getBeginDate(),devicesAccessPushVO.getEndDate());
                     }
                     break;
-                case 2: //仅门禁卡下发到设备
+               /* case 2: //门禁卡启用
                     List<AccessCard> list2 = accessCardServiceInterface.getAccessCardByUserIdAndType(String.valueOf(userId), OperationConstant.ZERO);
                     Assert.notEmpty(list2, "该用户未设置任何门禁卡");
                     AccessCard accessCard2 = list2.get(0);
@@ -1265,13 +1273,13 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                         //--------------下发门禁卡---------------------//
                         resultBean = this.handleSendUserCard(accessCard2, OperationConstant.ONE, deviceIdList, true,devicesAccessPushVO.getBeginDate(),devicesAccessPushVO.getEndDate());
                     }
-                    break;
+                    break;*/
                 default:
                     break;
             }
         }
         //同时删除设备上的人脸和门禁卡
-        else if(operType.equals(OperationConstant.TWO)){
+        /*else if(operType.equals(OperationConstant.TWO)){
             //删除人脸,有则删除
             List<Long> disFaceDeviceIdList = new ArrayList<>();
             List<Device> faceDeviceList = this.deviceFeign.getDeviceByPathUseAndType(user.getResidentialId(), user.getUnitId(), DeviceConstants.DEVICE_ACCESS_TYPE_UNIVERSAL, OperationConstant.TWO);
@@ -1318,7 +1326,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 }
             }
             resultBean = new ResultBean<>(ResultEnum.SUCCESS, true);
-        }
+        }*/
         //人脸启动
         else if(operType.equals(OperationConstant.THREE)){
             if(StringUtils.isBlank(user.getImageUri())){ //人脸下发是基于用户已存在人脸
@@ -1327,17 +1335,17 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             //获取通用人脸机
             List<Device> deviceList = this.deviceFeign.getDeviceByPathUseAndType(user.getResidentialId(), user.getUnitId(), DeviceConstants.DEVICE_ACCESS_TYPE_UNIVERSAL, OperationConstant.TWO);
             //获取已下发的特殊人脸机
-            ResultBean<AccessFacePushRecords> facePushResult = this.accessFacePushRecordsServiceInterface.getListByUserId(userId, OperationConstant.ZERO, OperationConstant.TWO);
-            List<AccessFacePushRecords> faceRecords = facePushResult.getList();
+//            ResultBean<AccessFacePushRecords> facePushResult = this.accessFacePushRecordsServiceInterface.getListByUserId(userId, OperationConstant.ZERO, OperationConstant.TWO);
+//            List<AccessFacePushRecords> faceRecords = facePushResult.getList();
             List<Long> enableDeviceIdList = new ArrayList<>();
             //添加普通设备位置的设备
             if (deviceList != null && deviceList.size() > 0){
                 deviceList.forEach(device -> enableDeviceIdList.add(device.getId()));
             }
             //添加特殊设备位置的设备
-            if(faceRecords != null && faceRecords.size() > 0){
-                faceRecords.forEach(records -> enableDeviceIdList.add(records.getDeviceId()));
-            }
+//            if(faceRecords != null && faceRecords.size() > 0){
+//                faceRecords.forEach(records -> enableDeviceIdList.add(records.getDeviceId()));
+//            }
             if (enableDeviceIdList.size() > 0){
                     resultBean = this.handleSendUserFace(user, enableDeviceIdList, true,null,null); //启用下发
             } else{ //新增启用设备
@@ -1374,7 +1382,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             }
         }
         //门禁卡启用
-        else if(operType.equals(OperationConstant.FOUR)){
+        /*else if(operType.equals(OperationConstant.FOUR)){
             List<AccessCard> cardList = this.accessCardServiceInterface.getAccessCardByUserIdAndType(String.valueOf(userId), OperationConstant.ZERO);
             Assert.notEmpty(cardList, "该用户没有门禁卡信息,无需禁用");
             ResultBean<AccessCardPushRecords> cardPushRecordsResult = this.accessCardPushRecordsServiceInterface.getListByUserId(userId, OperationConstant.ZERO, OperationConstant.TWO);
@@ -1402,23 +1410,23 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 return new ResultBean<>(ResultEnum.ERROR);
             }
 
-        }
+        }*/
         //人脸禁用
         else if(operType.equals(OperationConstant.FIVE)){
             //获取通用人脸设备
             List<Device> deviceList = this.deviceFeign.getDeviceByPathUseAndType(user.getResidentialId(), user.getUnitId(), DeviceConstants.DEVICE_ACCESS_TYPE_UNIVERSAL, OperationConstant.TWO);
-            ResultBean<AccessFacePushRecords> faceResult = this.accessFacePushRecordsServiceInterface.getListByUserId(userId, OperationConstant.ZERO, null);
-            List<AccessFacePushRecords> faceRecords = faceResult.getList();
+//            ResultBean<AccessFacePushRecords> faceResult = this.accessFacePushRecordsServiceInterface.getListByUserId(userId, OperationConstant.ZERO, null);
+//            List<AccessFacePushRecords> faceRecords = faceResult.getList();
 
             List<Long> disDeviceIdList = new ArrayList<>();
             //添加普通设备位置的设备
             if (deviceList !=null && deviceList.size() > 0){
                 deviceList.forEach(device -> disDeviceIdList.add(device.getId()));
             }
-            //添加特殊设备位置的设备
-            if(faceRecords != null && faceRecords.size() > 0){
-                faceRecords.forEach(records -> disDeviceIdList.add(records.getDeviceId()));
-            }
+//            //添加特殊设备位置的设备
+//            if(faceRecords != null && faceRecords.size() > 0){
+//                faceRecords.forEach(records -> disDeviceIdList.add(records.getDeviceId()));
+//            }
             if(disDeviceIdList.size() > 0){
                 resultBean = this.handleSendUserFace(user, disDeviceIdList, false, null, null);
             }else{
@@ -1431,7 +1439,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             }
         }
         //卡禁用
-        else if(operType.equals(6)){
+        /*else if(operType.equals(6)){
 
             List<AccessCard> cardList = this.accessCardServiceInterface.getAccessCardByUserIdAndType(String.valueOf(userId), OperationConstant.ZERO);
             if(cardList == null || cardList.size() <= 0){
@@ -1460,7 +1468,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             } else{
                 return new ResultBean<>(ResultEnum.ERROR);
             }
-        }
+        }*/
         return resultBean;
     }
 

+ 6 - 0
sptg-gateway/sptg-device-gateway/pom.xml

@@ -65,6 +65,12 @@
             <artifactId>sptg-statistics-api</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <!-- 第三方适配器模块 -->
+        <dependency>
+            <groupId>com.sptg</groupId>
+            <artifactId>sptg-third-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <!-- 广告模块 -->
         <!--<dependency>-->
             <!--<groupId>com.sptg</groupId>-->

+ 59 - 51
sptg-gateway/sptg-device-gateway/src/main/java/com/sptg/gateway/controller/DeviceController.java

@@ -22,7 +22,9 @@ import com.sptg.estate.api.entity.User;
 import com.sptg.estate.api.feigns.AccessRecordsFeign;
 import com.sptg.estate.api.feigns.UserFeign;
 import com.sptg.gateway.util.MultipartFileUpload;
+import com.sptg.permissions.api.entity.ApiLog;
 import com.sptg.permissions.api.feigns.ConfFeign;
+import com.sptg.permissions.api.feigns.SysApiLogFeign;
 import com.sptg.statistics.api.entity.SysDeviceLog;
 import com.sptg.statistics.api.feigns.SysDeviceLogFeign;
 import lombok.RequiredArgsConstructor;
@@ -68,6 +70,7 @@ public class DeviceController {
     private final UserFeign userFeign;
     private final RedisTemplate<String, String> redisTemplate;
     private final AccessRecordsFeign accessRecordsFeign;
+    private final SysApiLogFeign sysApiLogFeign;
 
     /**
      * 设备心跳检测接口
@@ -282,14 +285,12 @@ public class DeviceController {
     @PostMapping(value = "/DeviceEndianEvent")
     public Map<String, Object> DeviceEndianEvent(HttpServletRequest request) throws IOException {
         MultipartHttpServletRequest params=((MultipartHttpServletRequest) request);
-        System.out.println("【DeviceEndianEvent事件推送】\n" + request);
         MultiValueMap<String, MultipartFile> multiFileMap = params.getMultiFileMap();
         Map<String, Object> map = new HashMap<>();
         MultipartFile eventInfo = multiFileMap.get("EventInfo").get(0);
         byte[] bytes = eventInfo.getBytes();
         Object object = JSONObject.parseObject(bytes, Map.class);
         ZHAccessRecordDto zhAccessRecordDto = BeanUtil.toBean(object, ZHAccessRecordDto.class);
-        System.out.println("------------" + zhAccessRecordDto);
         List<MultipartFile> fileList = multiFileMap.get("file");
         AccessRecords accessRecords = new AccessRecords();
         for(MultipartFile multipartFile : fileList){
@@ -300,8 +301,11 @@ public class DeviceController {
                 accessRecords.setSnapshoUri(path);
             }
         }
+        ApiLog apiLog = new ApiLog();
+        apiLog.setMethodDesc("【DeviceEndianEvent】");
+        apiLog.setReqData(JSONUtil.toJsonStr(zhAccessRecordDto));
+        sysApiLogFeign.create(apiLog);
         //出入门记录:
-        //serialNumber,userId,snapshoUri,openDoorType,accessCardNo,accessDate,compareUrl,contrast
         accessRecords.setSerialNumber(zhAccessRecordDto.getSerialNum());
         ZHFaceCompareInfoDto faceCompareInfo = zhAccessRecordDto.getFaceCompareInfo();
         ZHSnapDto zhSnapDto = faceCompareInfo.getSnap().get(0);
@@ -351,7 +355,6 @@ public class DeviceController {
      */
     @PutMapping(value = "/DeviceEndianHeartbeat")
     public Map<String, Object> DeviceEndianHeartbeat(@RequestBody Map<String, Object> deviceRequest){
-        System.out.println("【DeviceEndianHeartbeat心跳推送】\n" + deviceRequest);
         String serialNum = (String)deviceRequest.get("SerialNum");
         Map<String, Object> map = new HashMap<>();
         map.put("ReturnCode", 0);
@@ -376,9 +379,9 @@ public class DeviceController {
      * @throws IOException
      */
     private final static String ZH_DEVICE_INSTRUCT_CALLBACK = "zh:device:instruct:callback";
+
     @PutMapping("/DeviceEndianCommand")
     public Map<String, Object> DeviceEndianCommand(@RequestBody Map<String, Object> deviceRequest){
-        System.out.println("【DeviceEndianCommand】指令处理回调------------------" + deviceRequest);
         String serialNum = (String)deviceRequest.get("SerialNum");
         Integer result = (Integer)deviceRequest.get("Result");
         Map<String, Object> commandMap = new HashMap<>();
@@ -387,58 +390,63 @@ public class DeviceController {
             String openDoorCommandStr = this.redisTemplate.opsForList().rightPop(serialNum + "_openDoor");
             if(StringUtils.isNotBlank(openDoorCommandStr)){ //先处理开门
                 commandMap = JSONUtil.toBean(openDoorCommandStr, Map.class);
-            }else{
+                Integer openDoor = (Integer)commandMap.get("OpenDoor");
+                if(openDoor == 0){
+                    Timer timer = new Timer();
+                    timer.schedule(new TimerTask() {
+                        @Override
+                        public void run() {
+                            //下发关门指令到redis,等下一次设备回来消费,定时6秒后发送
+                            Map<String, Object> map = JSONUtil.toBean(openDoorCommandStr, Map.class);
+                            Map<String, Object> dataMap = new HashMap<>();
+                            dataMap.put("WorkState", 1);
+                            map.put("Data", dataMap);
+                            map.put("OpenDoor", 1);
+                            String closeCommand = JSONUtil.toJsonStr(map);
+                            redisTemplate.opsForList().leftPush(serialNum + "_openDoor", closeCommand);
+                            timer.cancel();
+                        }
+                    }, 6 * 1000);
+                    String instructId = (String) commandMap.get("InstructId");
+                    Integer commandSeq = (Integer) commandMap.get("CommandSeq");
+                    this.redisTemplate.opsForList().leftPush(ZH_DEVICE_INSTRUCT_CALLBACK + ":" + serialNum + ":" + commandSeq, instructId);
+                }
+                return commandMap;
+            }else if(StringUtils.isNotBlank(commandStr)){
                 commandMap = JSONUtil.toBean(commandStr, Map.class);
-                Timer timer = new Timer();
-                timer.schedule(new TimerTask() {
-                    @Override
-                    public void run() {
-                        //下发关门指令到redis,等下一次设备回来消费,定时6秒后发送
-                        Map map = JSONUtil.toBean(commandStr, Map.class);
-                        Map<String, Integer> dataMap = new HashMap<>();
-                        dataMap.put("WorkState", 1);
-                        map.put("Data", dataMap);
-                        String closeCommand = JSONUtil.toJsonStr(map);
-                        redisTemplate.opsForList().leftPush(serialNum + "_openDoor", closeCommand);
-                        timer.cancel();
-                    }
-                }, 6 * 1000);
+                String instructId = (String) commandMap.get("InstructId");
+                Integer commandSeq = (Integer) commandMap.get("CommandSeq");
+                this.redisTemplate.opsForList().leftPush(ZH_DEVICE_INSTRUCT_CALLBACK + ":" + serialNum + ":" + commandSeq, instructId);
+                return commandMap;
             }
-            String instructId = (String) commandMap.get("InstructId");
-            Integer commandSeq = (Integer) commandMap.get("CommandSeq");
-            this.redisTemplate.opsForHash().put(ZH_DEVICE_INSTRUCT_CALLBACK, serialNum + "_" + commandSeq, instructId);
             return commandMap;
         }else{ //表示返回下发的配置命令处理结果
-            System.out.println("【DeviceEndianCommand】指令处理回调------------------");
-            if(deviceRequest.get("CommandSeq") != null){
-                Integer commandSeq = (Integer)deviceRequest.get("CommandSeq");
-                HashOperations<String, String, String> operations = this.redisTemplate.opsForHash();
-                String instructId = operations.get(ZH_DEVICE_INSTRUCT_CALLBACK, serialNum + "_" + commandSeq);
-                if(StringUtils.isNotBlank(instructId)){
-                    if(result == 0){ //指令处理成功
-                        InstructPublishLog instructPublishLog = new InstructPublishLog();
-                        instructPublishLog.setId(Long.parseLong(instructId));
-                        instructPublishLog.setSerialNumber(serialNum);
-                        instructPublishLog.setHandleStatus(OperationConstant.TWO);
-                        instructPublishLogFeign.instructHandleCallback(instructPublishLog);
-                        operations.delete(ZH_DEVICE_INSTRUCT_CALLBACK, serialNum + "_" + commandSeq);
-                    }else{ //处理异常
-                        InstructPublishLog instructPublishLog = new InstructPublishLog();
-                        instructPublishLog.setId(Long.parseLong(instructId));
-                        instructPublishLog.setSerialNumber(serialNum);
-                        instructPublishLog.setHandleStatus(OperationConstant.THREE);
-                        instructPublishLog.setErrorMsg("OK");
-                        instructPublishLogFeign.instructHandleCallback(instructPublishLog);
-                        operations.delete(ZH_DEVICE_INSTRUCT_CALLBACK, serialNum + "_" + commandSeq);
-                    }
-                }
-                //继续取下一个缓存下发给设备
-                ListOperations<String, String> opsForList = this.redisTemplate.opsForList();
-                String commandStr = opsForList.rightPop(serialNum);
-                if(StringUtils.isNotBlank(commandStr)){
-                    commandMap = JSONUtil.toBean(commandStr, Map.class);
+            Integer commandSeq = (Integer)deviceRequest.get("CommandSeq");
+            String instructId =  this.redisTemplate.opsForList().rightPop(ZH_DEVICE_INSTRUCT_CALLBACK + ":" + serialNum + ":" + commandSeq);
+            if(StringUtils.isNotBlank(instructId)){
+                if(result == 0){ //指令处理成功
+                    InstructPublishLog instructPublishLog = new InstructPublishLog();
+                    instructPublishLog.setId(Long.parseLong(instructId));
+                    instructPublishLog.setSerialNumber(serialNum);
+                    instructPublishLog.setHandleStatus(OperationConstant.TWO);
+                    instructPublishLog.setStatus(OperationConstant.TWO);
+                    instructPublishLogFeign.instructHandleCallback(instructPublishLog);
+                }else{ //处理异常
+                    InstructPublishLog instructPublishLog = new InstructPublishLog();
+                    instructPublishLog.setId(Long.parseLong(instructId));
+                    instructPublishLog.setSerialNumber(serialNum);
+                    instructPublishLog.setHandleStatus(OperationConstant.THREE);
+                    instructPublishLog.setStatus(OperationConstant.TWO);
+                    instructPublishLog.setErrorMsg(JSONUtil.toJsonStr(deviceRequest));
+                    instructPublishLogFeign.instructHandleCallback(instructPublishLog);
                 }
             }
+            //继续取下一个缓存下发给设备
+            ListOperations<String, String> opsForList = this.redisTemplate.opsForList();
+            String commandStr = opsForList.rightPop(serialNum);
+            if(StringUtils.isNotBlank(commandStr)){
+                commandMap = JSONUtil.toBean(commandStr, Map.class);
+            }
             return commandMap;
         }
     }

+ 1 - 13
sptg-gateway/sptg-housekeeper-gateway/src/main/java/com/sptg/gateway/controller/device/DeviceController.java

@@ -574,19 +574,7 @@ public class DeviceController {
         Account onLineUser = this.securityServiceInterface.getOnLineUser();
         device.setOrgPosition(onLineUser.getOrgPosition());
         device.setUserId(UserFlagConstant.ADMIN_USER_NUMBER_FLAG + onLineUser.getId());
-        if(device.getDeviceFactory().equals(DeviceConstants.DEVICE_FACTORY_QINLIN)){
-//            QLinUserDevice qLinUserDevice = new QLinUserDevice();
-//            qLinUserDevice.setUserId(UserFlagConstant.ADMIN_USER_NUMBER_FLAG + onLineUser.getId());
-//            qLinUserDevice.setDeviceId(device.getSerialNumber());
-//            ResultBean<String> resultBean = this.qLinFeign.remoteOpenDoor(qLinUserDevice);
-//            if(resultBean.getCode().equals("200")){
-                return new ResultBean<>(ResultEnum.SUCCESS);
-//            }else{
-//                return new ResultBean<>(ResultEnum.FAILURE);
-//            }
-        }else{
-            return this.deviceFeign.openDoor(device);
-        }
+        return this.deviceFeign.openDoor(device);
     }
 
     /**

+ 2 - 0
sptg-repeater/sptg-repeater-biz/src/main/java/com/sptg/repeater/biz/handler/ZHHandler.java

@@ -78,6 +78,7 @@ public class ZHHandler {
         commandMap.put("Type", ZHConstant.I8H.open_door.getType());
         commandMap.put("Data", dataMap);
         commandMap.put("InstructId", instructId);
+        commandMap.put("OpenDoor", 0);
         String commandStr = JSONUtil.toJsonStr(commandMap);
         //设备指令commonSeq计数更新
         this.redisTemplate.opsForHash().put(ZH_DEVICE_INSTRUCT_COMMAND_SEQ, serialNumber, num);
@@ -174,6 +175,7 @@ public class ZHHandler {
         commandMap.put("CommandSeq", commonSeq);
         commandMap.put("Type", ZHConstant.I8H.delete_user_face.getType());
         commandMap.put("Data", dataMap);
+        commandMap.put("InstructId", instructId);
         String delUserCommandStr = JSONUtil.toJsonStr(commandMap);
         //设备指令commonSeq计数更新
         this.redisTemplate.opsForHash().put(ZH_DEVICE_INSTRUCT_COMMAND_SEQ, serialNumber, num);

+ 12 - 0
sptg-repeater/sptg-repeater-biz/src/main/java/com/sptg/repeater/biz/service/IDeviceEndianCommandService.java

@@ -0,0 +1,12 @@
+package com.sptg.repeater.biz.service;
+
+import java.util.Map;
+
+/**
+ * @author zwx
+ * @create 2021/6/2 17:56
+ */
+public interface IDeviceEndianCommandService {
+
+    Map<String, Object> pushCommand(String serialNum, String commandStr);
+}

+ 16 - 0
sptg-repeater/sptg-repeater-biz/src/main/java/com/sptg/repeater/biz/service/impl/DelFaceCommandServiceImpl.java

@@ -0,0 +1,16 @@
+package com.sptg.repeater.biz.service.impl;
+
+import com.sptg.repeater.biz.service.IDeviceEndianCommandService;
+
+import java.util.Map;
+
+/**
+ * @author zwx
+ * @create 2021/6/2 17:58
+ */
+public class DelFaceCommandServiceImpl implements IDeviceEndianCommandService {
+    @Override
+    public Map<String, Object> pushCommand(String serialNum, String commandStr) {
+        return null;
+    }
+}

+ 52 - 0
sptg-repeater/sptg-repeater-biz/src/main/java/com/sptg/repeater/biz/service/impl/OpenDoorCommandServiceImpl.java

@@ -0,0 +1,52 @@
+package com.sptg.repeater.biz.service.impl;
+
+import cn.hutool.json.JSONUtil;
+import com.sptg.repeater.biz.service.IDeviceEndianCommandService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * @author zwx
+ * @create 2021/6/2 17:57
+ */
+@Service
+public class OpenDoorCommandServiceImpl implements IDeviceEndianCommandService {
+
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+    private final static String ZH_DEVICE_INSTRUCT_CALLBACK = "zh:device:instruct:callback";
+
+    @Override
+    public Map<String, Object> pushCommand(String serialNum, String openDoorCommandStr) {
+        Map<String, Object> commandMap = new HashMap<>();
+        commandMap = JSONUtil.toBean(openDoorCommandStr, Map.class);
+        Integer openDoor = (Integer) commandMap.get("OpenDoor");
+        if (openDoor == 0) {
+            Timer timer = new Timer();
+            timer.schedule(new TimerTask() {
+                @Override
+                public void run() {
+                    //下发关门指令到redis,等下一次设备回来消费,定时6秒后发送
+                    Map<String, Object> map = JSONUtil.toBean(openDoorCommandStr, Map.class);
+                    Map<String, Object> dataMap = new HashMap<>();
+                    dataMap.put("WorkState", 1);
+                    map.put("Data", dataMap);
+                    map.put("OpenDoor", 1);
+                    String closeCommand = JSONUtil.toJsonStr(map);
+                    redisTemplate.opsForList().leftPush(serialNum + "_openDoor", closeCommand);
+                    timer.cancel();
+                }
+            }, 6 * 1000);
+            String instructId = (String) commandMap.get("InstructId");
+            Integer commandSeq = (Integer) commandMap.get("CommandSeq");
+            this.redisTemplate.opsForList().leftPush(ZH_DEVICE_INSTRUCT_CALLBACK + ":" + serialNum + ":" + commandSeq, instructId);
+        }
+        return commandMap;
+    }
+}

+ 16 - 0
sptg-repeater/sptg-repeater-biz/src/main/java/com/sptg/repeater/biz/service/impl/PushFaceCommandServiceImpl.java

@@ -0,0 +1,16 @@
+package com.sptg.repeater.biz.service.impl;
+
+import com.sptg.repeater.biz.service.IDeviceEndianCommandService;
+
+import java.util.Map;
+
+/**
+ * @author zwx
+ * @create 2021/6/2 17:57
+ */
+public class PushFaceCommandServiceImpl implements IDeviceEndianCommandService {
+    @Override
+    public Map<String, Object> pushCommand(String serialNum, String commandStr) {
+        return null;
+    }
+}