Ver código fonte

1.一键上下班 单设备控制 指令下发

jingyuanchao 1 ano atrás
pai
commit
bb4e344c3e
28 arquivos alterados com 188 adições e 29 exclusões
  1. 9 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteHostService.java
  2. 6 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteHostFallbackFactory.java
  3. 2 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/work/dto/ControlDeviceDto.java
  4. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/work/DataStatusEnum.java
  5. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/work/DataValueEnum.java
  6. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/work/GroupTypeEnum.java
  7. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/work/IotTypeEnum.java
  8. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/work/RedirectTypeEnum.java
  9. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/work/WorkTypeEnum.java
  10. 1 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/mapper/IotDeviceInfoMapper.java
  11. 3 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/IIotDeviceInfoService.java
  12. 31 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/impl/IotDeviceInfoServiceImpl.java
  13. 13 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/north/controller/HostController.java
  14. 1 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/protection/mapper/IotAlarmSubsystemMapper.java
  15. 3 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/protection/service/IotAlarmSubsystemService.java
  16. 5 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/protection/service/impl/IotAlarmSubSystemServiceImpl.java
  17. 4 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/constant/WebSocketConstants.java
  18. 14 0
      soc-modules/soc-modules-host/src/main/resources/mapper/IotAlarmSubsystemMapper.xml
  19. 16 0
      soc-modules/soc-modules-host/src/main/resources/mapper/IotDeviceInfoMapper.xml
  20. 15 2
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/IotDayWorkController.java
  21. 1 1
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/interfaces/impl/DeployWorkStrategy.java
  22. 9 5
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/interfaces/impl/ElectWorkStrategy.java
  23. 3 1
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotDayWorkMapper.java
  24. 4 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotDayWorkService.java
  25. 39 9
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotDayWorkServiceImpl.java
  26. 0 1
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotServerInfoServiceImpl.java
  27. 1 1
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/utils/DayWorkUtils.java
  28. 2 2
      soc-modules/soc-modules-iot/src/main/resources/mapper/IotDayWorkMapper.xml

+ 9 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteHostService.java

@@ -3,6 +3,7 @@ package com.xunmei.system.api;
 import com.xunmei.common.core.constant.ServiceNameConstants;
 import com.xunmei.common.core.domain.host.remote.DiskInfoGetReq;
 import com.xunmei.common.core.domain.host.remote.VideoIntegrityGetReq;
+import com.xunmei.common.core.domain.work.dto.ControlDeviceDto;
 import com.xunmei.common.core.domain.work.dto.WorkDayDto;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.system.api.Eto.BreakerControlEto;
@@ -47,4 +48,12 @@ public interface RemoteHostService {
      */
     @PostMapping("/startWork")
     AjaxResult startWork(@RequestBody WorkDayDto eto);
+
+    /**
+     * 通知主机对单个设备执行控制
+     * @param eto
+     * @return
+     */
+    @PostMapping("/changeDevice")
+    AjaxResult changeDevice(@RequestBody ControlDeviceDto eto);
 }

+ 6 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteHostFallbackFactory.java

@@ -2,6 +2,7 @@ package com.xunmei.system.api.factory;
 
 import com.xunmei.common.core.domain.host.remote.DiskInfoGetReq;
 import com.xunmei.common.core.domain.host.remote.VideoIntegrityGetReq;
+import com.xunmei.common.core.domain.work.dto.ControlDeviceDto;
 import com.xunmei.common.core.domain.work.dto.WorkDayDto;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.system.api.Eto.BreakerControlEto;
@@ -63,6 +64,11 @@ public class RemoteHostFallbackFactory implements FallbackFactory<RemoteHostServ
             public AjaxResult startWork(WorkDayDto eto) {
                 return null;
             }
+
+            @Override
+            public AjaxResult changeDevice(ControlDeviceDto eto) {
+                return null;
+            }
         };
     }
 }

+ 2 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/work/dto/ControlDeviceDto.java

@@ -36,5 +36,6 @@ public class ControlDeviceDto {
     @ApiModelProperty(value = "设备控制:0,撤防,断电;1,通电,布防")
     private Integer status;
 
-
+    @ApiModelProperty(value = "组织id")
+    private Long orgId;
 }

+ 1 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/enums/work/DataStatusEnum.java → soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/work/DataStatusEnum.java

@@ -1,4 +1,4 @@
-package com.xunmei.iot.enums.work;
+package com.xunmei.common.core.enums.work;
 
 
 import lombok.AllArgsConstructor;

+ 1 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/enums/work/DataValueEnum.java → soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/work/DataValueEnum.java

@@ -1,4 +1,4 @@
-package com.xunmei.iot.enums.work;
+package com.xunmei.common.core.enums.work;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 1 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/enums/work/GroupTypeEnum.java → soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/work/GroupTypeEnum.java

@@ -1,4 +1,4 @@
-package com.xunmei.iot.enums.work;
+package com.xunmei.common.core.enums.work;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 1 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/enums/work/IotTypeEnum.java → soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/work/IotTypeEnum.java

@@ -1,4 +1,4 @@
-package com.xunmei.iot.enums.work;
+package com.xunmei.common.core.enums.work;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 1 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/enums/work/RedirectTypeEnum.java → soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/work/RedirectTypeEnum.java

@@ -1,4 +1,4 @@
-package com.xunmei.iot.enums.work;
+package com.xunmei.common.core.enums.work;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 1 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/enums/work/WorkTypeEnum.java → soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/work/WorkTypeEnum.java

@@ -1,4 +1,4 @@
-package com.xunmei.iot.enums.work;
+package com.xunmei.common.core.enums.work;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 1 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/mapper/IotDeviceInfoMapper.java

@@ -12,4 +12,5 @@ public interface IotDeviceInfoMapper extends BaseMapper<IotDeviceInfo> {
 
     void batchUpdate(@Param("list") List<IotDeviceInfo> collect);
 
+    List<IotDeviceInfo> selectLoopList(@Param("orgId") Long orgId);
 }

+ 3 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/IIotDeviceInfoService.java

@@ -2,6 +2,7 @@ package com.xunmei.host.iot.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
+import com.xunmei.common.core.domain.work.dto.ControlDeviceDto;
 import com.xunmei.common.core.domain.work.dto.WorkDayDto;
 import com.xunmei.common.core.enums.iot.BaseDeviceTypeEnum;
 import com.xunmei.host.websocket.dto.DeviceStatusInfo;
@@ -84,4 +85,6 @@ public interface IIotDeviceInfoService extends IService<IotDeviceInfo> {
     void delData(String iotCode);
 
     void startWork(WorkDayDto eto) throws IOException;
+
+    void changeDevice(ControlDeviceDto eto);
 }

+ 31 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/impl/IotDeviceInfoServiceImpl.java

@@ -12,9 +12,11 @@ import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.domain.iot.domain.IotAlarmDefenceArea;
 import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystem;
 import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
+import com.xunmei.common.core.domain.work.dto.ControlDeviceDto;
 import com.xunmei.common.core.domain.work.dto.WorkDayDto;
 import com.xunmei.common.core.enums.iot.BaseDeviceTypeEnum;
 import com.xunmei.common.core.enums.iot.DefenceAreaType;
+import com.xunmei.common.core.enums.work.RedirectTypeEnum;
 import com.xunmei.common.core.utils.JacksonUtils;
 import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.host.iot.mapper.IotDeviceInfoMapper;
@@ -39,6 +41,7 @@ import com.xunmei.host.websocket.utils.WebSocketUtils;
 import com.xunmei.system.api.domain.iot.IotDeviceInfo;
 import com.xunmei.system.api.domain.iot.IotDeviceInfoExtend;
 import com.xunmei.system.api.util.LogUtils;
+import io.netty.util.internal.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RLock;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -770,4 +773,32 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
         WebSocketUtils.sendMessage(iotCode, JacksonUtils.toJSONString(result));
 
     }
+
+    @Override
+    public void changeDevice(ControlDeviceDto eto) {
+        int redirectType = eto.getRedirectType();
+        String iotCode = StringUtil.EMPTY_STRING;
+        if (RedirectTypeEnum.DEFENSE_REDIRECT_TYPE.getNum() == redirectType) {
+            //布撤防控制逻辑
+            IotAlarmSubsystem subsystem = iotAlarmSubsystemService.findSubSystem(eto.getOrgId(), eto.getProductName(), eto.getDeviceName(), eto.getDeviceId());
+            if (subsystem != null) {
+                iotCode = subsystem.getIotToken();
+            }
+        }
+        if (RedirectTypeEnum.ELECT_REDIRECT_TYPE.getNum() == redirectType) {
+            //8小时回路控制逻辑
+            log.info("8小时回路控制");
+            final List<IotDeviceInfo> loopList = baseMapper.selectLoopList(eto.getOrgId());
+            if (ObjectUtil.isNotEmpty(loopList)) {
+                iotCode = loopList.get(0).getIotToken();
+            }
+        }
+        if (ObjectUtil.isEmpty(iotCode)) {
+            return;
+        }
+        final String topic = TopicTypeEnums.formatUrl(TopicTypeEnums.PRODUCT_SERVICE_INVOKE.getUrl(), ProductEnums.DETECTION_HOST.getProductName()[0], ProductEnums.DETECTION_HOST.getProductName()[1]);
+        final WebsocketResult result = IotServerUtils.invokeHostServer(topic, new JSONObject(), WebSocketConstants.CHANGE_DEVICE, eto);
+        WebSocketUtils.sendMessage(iotCode, JacksonUtils.toJSONString(result));
+
+    }
 }

+ 13 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/north/controller/HostController.java

@@ -3,6 +3,7 @@ package com.xunmei.host.north.controller;
 
 import com.xunmei.common.core.domain.host.remote.DiskInfoGetReq;
 import com.xunmei.common.core.domain.host.remote.VideoIntegrityGetReq;
+import com.xunmei.common.core.domain.work.dto.ControlDeviceDto;
 import com.xunmei.common.core.domain.work.dto.WorkDayDto;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.host.iot.service.IIotDeviceInfoService;
@@ -123,4 +124,16 @@ public class HostController {
         deviceInfoService.startWork(eto);
         return AjaxResult.success();
     }
+
+    /**
+     * 通知主机对单个设备执行控制
+     *
+     * @param eto
+     * @return
+     */
+    @PostMapping("/changeDevice")
+    AjaxResult changeDevice(@RequestBody ControlDeviceDto eto) {
+        deviceInfoService.changeDevice(eto);
+        return AjaxResult.success();
+    }
 }

+ 1 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/protection/mapper/IotAlarmSubsystemMapper.java

@@ -23,4 +23,5 @@ public interface IotAlarmSubsystemMapper extends BaseMapper<IotAlarmSubsystem> {
 
     IotAlarmSubsystem getByDeviceNameAndSubSystemId(@Param("token") String token,@Param("deviceName") String deviceName,@Param("code") String code);
 
+    IotAlarmSubsystem findSubSystem(@Param("orgId") Long orgId, @Param("productName") String productName, @Param("deviceName") String deviceName, @Param("deviceId") Integer deviceId);
 }

+ 3 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/protection/service/IotAlarmSubsystemService.java

@@ -34,4 +34,7 @@ public interface IotAlarmSubsystemService extends IService<IotAlarmSubsystem> {
     void saveSubSystemInfos(List<IotAlarmSubsystem> list);
 
     void updateSubSystemInfos(List<IotAlarmSubsystem> list);
+
+    IotAlarmSubsystem findSubSystem(Long orgId, String productName, String deviceName, Integer deviceId);
+
 }

+ 5 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/protection/service/impl/IotAlarmSubSystemServiceImpl.java

@@ -285,6 +285,11 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
         }
     }
 
+    @Override
+    public IotAlarmSubsystem findSubSystem(Long orgId, String productName, String deviceName, Integer deviceId) {
+        return baseMapper.findSubSystem(orgId, productName, deviceName, deviceId);
+    }
+
     private void updateSubSystemCache(IotAlarmSubsystem subsystem){
         String key = DeviceCacheEnum.IOT_SUB_SYSTEM.getCode() + subsystem.getIotToken() + "_" + subsystem.getAlarmHostCode() + "_" + subsystem.getCode();
         RedisUtils.setCacheObject(key, subsystem, Duration.ofMillis(1000 * 60 * 60));

+ 4 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/constant/WebSocketConstants.java

@@ -96,6 +96,10 @@ public interface WebSocketConstants {
      * 通知主机执行上下班操作
      */
     String DO_WORK = "doWork";
+    /**
+     * 通知主机执行单设备控制操作
+     */
+    String CHANGE_DEVICE = "changeDevice";
 
     /**
      * 获取监控主机下通道、硬盘和监控主机扩展信息

+ 14 - 0
soc-modules/soc-modules-host/src/main/resources/mapper/IotAlarmSubsystemMapper.xml

@@ -20,4 +20,18 @@
           AND s.`code` = #{code}
 
     </select>
+
+    <select id="findSubSystem" resultType="com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystem">
+        select s.*
+        from iot_device_info i
+                 inner join iot_alarm_subsystem s on i.device_code = s.alarm_host_code
+        where i.org_id = #{orgId}
+          and i.device_product = #{productName}
+          and i.device_code = #{deviceName}
+          and s.code = #{deviceId}
+          and s.deleted = 0
+          and i.deleted = 0
+        order by s.status_update_time desc
+        limit 1
+    </select>
 </mapper>

+ 16 - 0
soc-modules/soc-modules-host/src/main/resources/mapper/IotDeviceInfoMapper.xml

@@ -40,4 +40,20 @@
             WHERE id = #{item.id}
         </foreach>
     </update>
+
+    <select id="selectLoopList" resultType="com.xunmei.system.api.domain.iot.IotDeviceInfo">
+        select d.device_product    as productName,
+               d.device_name       AS object_name,
+               d.`device_code`     AS device_name,
+               d.id                AS zone_id,
+               s.state             AS object_status,
+               s.state_update_time as object_time
+        from iot_device_info d
+                 inner JOIN iot_device_status s ON d.device_product = s.device_product and d.device_code = s.device_code
+        where d.device_product = 'FSU_DoPowerCollection'
+          AND (d.`device_code` LIKE CONCAT('%', '41860001') OR d.`device_code` LIKE CONCAT('%', '41860002'))
+          and d.org_id=#{orgId}
+          and d.deleted = 0
+          and s.org_id=#{orgId}
+    </select>
 </mapper>

+ 15 - 2
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/IotDayWorkController.java

@@ -1,12 +1,13 @@
 package com.xunmei.iot.controller;
 
 
-import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.common.core.domain.work.dto.ControlDeviceDto;
 import com.xunmei.common.core.domain.work.dto.OperationPassDto;
 import com.xunmei.common.core.domain.work.dto.WorkDayDto;
+import com.xunmei.common.core.domain.work.vo.WorkVo;
+import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.iot.service.IotDayWorkService;
 import com.xunmei.iot.service.IotServerInfoService;
-import com.xunmei.common.core.domain.work.vo.WorkVo;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -73,5 +74,17 @@ public class IotDayWorkController {
             return AjaxResult.error("指令下发失败:,"+ e.getMessage());
         }
     }
+    @ApiOperation(value = "单设备控制")
+    @PostMapping("/controlDevice")
+    public AjaxResult controlDevice(@RequestBody ControlDeviceDto controlDeviceDto) {
+        try {
+            workService.changeDevice(controlDeviceDto);
+            return AjaxResult.success("指令下发成功!");
+        } catch (Exception e) {
+            e.printStackTrace();
+            return AjaxResult.error("指令下发失败!", e.getMessage());
+        }
+    }
+
 }
 

+ 1 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/interfaces/impl/DeployWorkStrategy.java

@@ -5,7 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.xunmei.common.core.domain.work.domain.IotDayWorkOperation;
 import com.xunmei.common.core.domain.work.domain.IotWorkRule;
 import com.xunmei.iot.dto.workRule.WorkRuleReq;
-import com.xunmei.iot.enums.work.DataValueEnum;
+import com.xunmei.common.core.enums.work.DataValueEnum;
 import com.xunmei.iot.interfaces.WorkFieldStrategy;
 import com.xunmei.iot.mapper.IotWorkRuleItemMapper;
 import com.xunmei.iot.service.IotWorkRuleService;

+ 9 - 5
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/interfaces/impl/ElectWorkStrategy.java

@@ -4,10 +4,11 @@ import cn.hutool.core.util.ObjectUtil;
 import com.xunmei.common.core.domain.work.domain.IotDayWorkField;
 import com.xunmei.common.core.domain.work.domain.IotDayWorkOperation;
 import com.xunmei.common.core.domain.work.domain.IotWorkRule;
+import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.iot.dto.workRule.WorkRuleReq;
-import com.xunmei.iot.enums.work.DataStatusEnum;
-import com.xunmei.iot.enums.work.DataValueEnum;
-import com.xunmei.iot.enums.work.RedirectTypeEnum;
+import com.xunmei.common.core.enums.work.DataStatusEnum;
+import com.xunmei.common.core.enums.work.DataValueEnum;
+import com.xunmei.common.core.enums.work.RedirectTypeEnum;
 import com.xunmei.iot.interfaces.WorkFieldStrategy;
 import com.xunmei.iot.mapper.IotDayWorkMapper;
 import com.xunmei.iot.service.IotWorkRuleService;
@@ -15,6 +16,7 @@ import com.xunmei.iot.utils.DayWorkUtils;
 import com.xunmei.common.core.domain.work.vo.WorkControlVo;
 import com.xunmei.common.core.domain.work.vo.WorkFieldDataVo;
 import com.xunmei.system.api.RemoteHostService;
+import com.xunmei.system.api.domain.SysUser;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -58,8 +60,9 @@ public class ElectWorkStrategy implements WorkFieldStrategy {
      */
     private List<WorkFieldDataVo> dealLoopData(List<IotDayWorkOperation> operation){
         List<WorkFieldDataVo> list = new ArrayList<>();
+        final SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
         //获取回路数据
-        List<WorkControlVo> workControlVos = dayWorkMapper.selectLoopList();
+        List<WorkControlVo> workControlVos = dayWorkMapper.selectLoopList(sysUser.getOrgId());
         WorkFieldDataVo field = null;
         for (WorkControlVo workControlVo : workControlVos) {
             field = new WorkFieldDataVo();
@@ -94,8 +97,9 @@ public class ElectWorkStrategy implements WorkFieldStrategy {
      * @return
      */
     public List<IotDayWorkField> getWorkLoopData(Integer workType, Integer sourceType) {
+        final SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
         //获取回路数据
-        List<WorkControlVo> workControlVos = dayWorkMapper.selectLoopList();
+        List<WorkControlVo> workControlVos = dayWorkMapper.selectLoopList(sysUser.getOrgId());
         if (ObjectUtil.isEmpty(workControlVos)) {
             List<IotDayWorkField> fields = new ArrayList<>();
             IotDayWorkField field = DayWorkUtils.createTDayWorkErrorField(0,

+ 3 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotDayWorkMapper.java

@@ -3,6 +3,7 @@ package com.xunmei.iot.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xunmei.common.core.domain.work.domain.IotDayWork;
 import com.xunmei.common.core.domain.work.vo.WorkControlVo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -19,10 +20,11 @@ public interface IotDayWorkMapper extends BaseMapper<IotDayWork> {
 
     /**
      * 获取回路状态数据
+     *
      * @param ids
      * @return
      */
-    List<WorkControlVo> selectLoopList();
+    List<WorkControlVo> selectLoopList(@Param("orgId") Long orgId);
 
     List<WorkControlVo> selectUPSList();
 }

+ 4 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotDayWorkService.java

@@ -2,6 +2,7 @@ package com.xunmei.iot.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.domain.work.domain.IotDayWork;
+import com.xunmei.common.core.domain.work.dto.ControlDeviceDto;
 import com.xunmei.common.core.domain.work.dto.WorkDayDto;
 import com.xunmei.common.core.domain.work.vo.WorkVo;
 
@@ -35,4 +36,7 @@ public interface IotDayWorkService extends IService<IotDayWork> {
      * @param workDayDto
      */
     void startWork(WorkDayDto workDayDto);
+
+    void changeDevice(ControlDeviceDto controlDeviceDto);
+
 }

+ 39 - 9
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotDayWorkServiceImpl.java

@@ -7,18 +7,20 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.domain.work.domain.IotDayWork;
 import com.xunmei.common.core.domain.work.domain.IotDayWorkOperation;
-import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.common.core.domain.work.dto.ControlDeviceDto;
 import com.xunmei.common.core.domain.work.dto.WorkDayDto;
-import com.xunmei.iot.enums.work.GroupTypeEnum;
-import com.xunmei.iot.enums.work.RedirectTypeEnum;
-import com.xunmei.iot.enums.work.WorkTypeEnum;
+import com.xunmei.common.core.domain.work.vo.WorkFieldDataVo;
+import com.xunmei.common.core.domain.work.vo.WorkVo;
+import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.common.core.enums.work.GroupTypeEnum;
+import com.xunmei.common.core.enums.work.RedirectTypeEnum;
+import com.xunmei.common.core.enums.work.WorkTypeEnum;
 import com.xunmei.iot.factory.WorkStrategyFactory;
 import com.xunmei.iot.interfaces.WorkFieldStrategy;
 import com.xunmei.iot.mapper.IotDayWorkMapper;
 import com.xunmei.iot.service.IotDayWorkOperationService;
 import com.xunmei.iot.service.IotDayWorkService;
-import com.xunmei.common.core.domain.work.vo.WorkFieldDataVo;
-import com.xunmei.common.core.domain.work.vo.WorkVo;
+import com.xunmei.system.api.RemoteHostService;
 import com.xunmei.system.api.domain.SysUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -43,7 +45,8 @@ public class IotDayWorkServiceImpl extends ServiceImpl<IotDayWorkMapper, IotDayW
     private WorkStrategyFactory workStrategyFactory;
     @Resource
     IotDayWorkOperationService operationService;
-
+    @Resource
+    RemoteHostService hostService;
 
     @Override
     public WorkVo getRealWorkData(WorkDayDto workDayDto) {
@@ -119,11 +122,38 @@ public class IotDayWorkServiceImpl extends ServiceImpl<IotDayWorkMapper, IotDayW
     public void startWork(WorkDayDto workDayDto) {
 
         //直接通知主机开始执行命令,平台不做任何逻辑处理;
+        final SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
+        workDayDto.setOrgId(sysUser.getOrgId());
+        hostService.startWork(workDayDto);
 
+    }
 
-
+    @Override
+    public void changeDevice(ControlDeviceDto controlDeviceDto) {
+        //直接通知主机开始执行命令,平台不做任何逻辑处理;
+        final SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
+        controlDeviceDto.setOrgId(sysUser.getOrgId());
+        hostService.changeDevice(controlDeviceDto);
 
     }
 
-
+    /**
+     * 判断设备是否处于操作中
+     *
+     * @param controlDeviceDto
+     * @return
+     */
+    private boolean validateOperation(ControlDeviceDto controlDeviceDto) {
+        QueryWrapper<IotDayWorkOperation> qw = new QueryWrapper<>();
+        qw.lambda().eq(IotDayWorkOperation::getOperationType, controlDeviceDto.getRedirectType())
+                .eq(IotDayWorkOperation::getOperationStatus, 0);
+        if (RedirectTypeEnum.DEFENSE_REDIRECT_TYPE.getNum() == controlDeviceDto.getRedirectType()) {
+            //如果是布撤防
+            qw.lambda().eq(IotDayWorkOperation::getDeviceId, controlDeviceDto.getDeviceId())
+                    .eq(IotDayWorkOperation::getDeviceName, controlDeviceDto.getDeviceName())
+                    .eq(IotDayWorkOperation::getProductName, controlDeviceDto.getProductName());
+        }
+        long count = operationService.count(qw);
+        return count == 0;
+    }
 }

+ 0 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotServerInfoServiceImpl.java

@@ -194,7 +194,6 @@ public class IotServerInfoServiceImpl extends ServiceImpl<IotServerInfoMapper, I
     @Override
     public Integer comparePass(OperationPassDto operationPassDto) {
         final Long orgId = SecurityUtils.getLoginUser().getSysUser().getOrgId();
-        //final Long orgId =4358025846522215L;
         final LambdaQueryWrapper<IotServerInfo> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(IotServerInfo::getOrgId, orgId);
         wrapper.last(Constants.LIMIT1);

+ 1 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/utils/DayWorkUtils.java

@@ -2,7 +2,7 @@ package com.xunmei.iot.utils;
 
 import cn.hutool.core.date.DateTime;
 import com.xunmei.common.core.domain.work.domain.IotDayWorkField;
-import com.xunmei.iot.enums.work.DataStatusEnum;
+import com.xunmei.common.core.enums.work.DataStatusEnum;
 
 /**
  * 一键上下班工具类

+ 2 - 2
soc-modules/soc-modules-iot/src/main/resources/mapper/IotDayWorkMapper.xml

@@ -13,9 +13,9 @@
                  inner JOIN iot_device_status s ON d.device_product = s.device_product and d.device_code = s.device_code
         where d.device_product = 'FSU_DoPowerCollection'
           AND (d.`device_code` LIKE CONCAT('%', '41860001') OR d.`device_code` LIKE CONCAT('%', '41860002'))
-          and d.iot_token = 'ef261d3a-c768-4df6-8142-bc7fc12a4067'
+          and d.org_id=#{orgId}
           and d.deleted = 0
-          and s.iot_token = 'ef261d3a-c768-4df6-8142-bc7fc12a4067'
+          and s.org_id=#{orgId}
     </select>
 
     <select id="selectUPSList" resultType="com.xunmei.common.core.domain.work.vo.WorkControlVo">