Răsfoiți Sursa

bug修改 代码提交

jingyuanchao 1 an în urmă
părinte
comite
8787afc080
22 a modificat fișierele cu 118 adăugiri și 40 ștergeri
  1. 5 3
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteProtectionService.java
  2. 3 2
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteProtectionFallbackFactory.java
  3. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java
  4. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java
  5. 2 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/controller/ProtectionController.java
  6. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/IProtectionService.java
  7. 8 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ProtectionServiceImpl.java
  8. 3 3
      soc-modules/soc-modules-core/src/main/resources/mapper/device/ProtectionMapper.xml
  9. 1 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/IIotDeviceInfoService.java
  10. 4 2
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/IotDeviceStatusService.java
  11. 26 3
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/impl/IotDeviceInfoServiceImpl.java
  12. 10 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/impl/IotDeviceStatusServiceImpl.java
  13. 1 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/video/dto/videoIntegrityCheck/VideoIntegrityCheckDto.java
  14. 3 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/video/dto/videoIntegrityCheck/VideoIntegrityCheckReq.java
  15. 14 8
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/video/service/impl/VideoIntegrityCheckServiceImpl.java
  16. 1 0
      soc-modules/soc-modules-host/src/main/resources/mapper/IotAlarmDefenceAreaMapper.xml
  17. 1 0
      soc-modules/soc-modules-host/src/main/resources/mapper/IotAlarmSubsystemMapper.xml
  18. 1 1
      soc-modules/soc-modules-host/src/main/resources/mapper/IotDeviceInfoExtendMapper.xml
  19. 1 1
      soc-modules/soc-modules-iot/src/main/resources/mapper/IotDayWorkMapper.xml
  20. 13 2
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysDeviceController.java
  21. 6 2
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysDeviceService.java
  22. 12 5
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysDeviceServiceImpl.java

+ 5 - 3
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteProtectionService.java

@@ -18,11 +18,13 @@ import org.springframework.web.bind.annotation.*;
 public interface RemoteProtectionService {
     @PostMapping("/resumption/protection/addByDevice")
     public AjaxResult addByDevice(@RequestBody ProtectionDTO editDto, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
     @GetMapping("/resumption/protection/getByDeviceId")
-    public ProtectionVO getByDeviceId(@RequestParam("deviceId")Long deviceId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+    public ProtectionVO getByDeviceId(@RequestParam("deviceId") Long deviceId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
     @GetMapping("/resumption/protection/delByDeviceId")
-    public int delByDeviceId(@RequestParam("deviceId")Long deviceId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+    public int delByDeviceId(@RequestParam("deviceId") Long deviceId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 
     @GetMapping("/resumption/protection/checkExitDevice")
-    public int checkExitDevice(@RequestParam("orgId")Long orgId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+    public int checkExitDevice(@RequestParam("orgId") Long orgId, @RequestParam("deviceId") Long deviceId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 }

+ 3 - 2
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteProtectionFallbackFactory.java

@@ -16,10 +16,11 @@ import org.springframework.stereotype.Component;
 @Component
 public class RemoteProtectionFallbackFactory implements FallbackFactory<RemoteProtectionService> {
     private static final Logger log = LoggerFactory.getLogger(RemoteProtectionFallbackFactory.class);
+
     @Override
     public RemoteProtectionService create(Throwable cause) {
         log.error("机构服务调用失败:{}", cause.getMessage());
-        return new RemoteProtectionService(){
+        return new RemoteProtectionService() {
 
             @Override
             public AjaxResult addByDevice(ProtectionDTO editDto, String source) {
@@ -37,7 +38,7 @@ public class RemoteProtectionFallbackFactory implements FallbackFactory<RemotePr
             }
 
             @Override
-            public int checkExitDevice(Long orgId, String source) {
+            public int checkExitDevice(Long orgId, Long deviceId, String source) {
                 return 0;
             }
         };

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java

@@ -523,7 +523,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             coreDrillTaskService.delByStartTimeAndEndTimeAndPlanIdList(list, null, null);
             coreDrillPlanMapper.delByIds(list);
         } else {
-            //计划下有已完成:删除本轮次及以后的所有任务,计划本身做逻辑删除。
+            //计划下有已完成:删除本周期及以后的所有任务,计划本身做逻辑删除。
             final CoreDrillPlan plan = getById(id);
             Date date = null;
             if (plan.getPlanCycle().equals(DrillPlanCycleEnum.NONE.getCode())) {

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java

@@ -508,7 +508,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             coreEduTrainingTaskService.delByStartTimeAndEndTimeAndPlanIdList(list, null, null);
             coreEduTrainingPlanMapper.delByIds(list);
         } else {
-            //计划下有已完成:删除本轮次及以后的所有任务,计划本身做逻辑删除。
+            //计划下有已完成:删除本周期及以后的所有任务,计划本身做逻辑删除。
             final CoreEduTrainingPlan plan = getById(id);
             Date date = null;
             if (plan.getPlanCycle().equals(EduTrainingPlanCycleEnum.NONE.getCode())) {

+ 2 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/controller/ProtectionController.java

@@ -92,8 +92,8 @@ class ProtectionController extends BaseController {
     }
     @InnerAuth
     @GetMapping("/checkExitDevice")
-    public int checkExitDevice(Long orgId){
-        return protectionService.checkExitDevice(orgId);
+    public int checkExitDevice(Long orgId,Long deviceId){
+        return protectionService.checkExitDevice(orgId,deviceId);
     }
     @ApiOperation(value = "防区详情")
     @GetMapping("{id}")

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/IProtectionService.java

@@ -58,7 +58,7 @@ public interface IProtectionService extends IService<IotAlarmSubsystem> {
 
     boolean updateSubSystemInBook(Long id, Integer inBook);
 
-    int checkExitDevice(Long orgId);
+    int checkExitDevice(Long orgId,Long deviceId);
 
 
 

+ 8 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ProtectionServiceImpl.java

@@ -94,7 +94,6 @@ public class ProtectionServiceImpl extends ServiceImpl<ProtectionMapper, IotAlar
         }
 
 
-
         //按规则分页
         page = this.baseMapper.pageList(page, request);
 
@@ -296,8 +295,14 @@ public class ProtectionServiceImpl extends ServiceImpl<ProtectionMapper, IotAlar
     }
 
     @Override
-    public int checkExitDevice(Long orgId) {
-        return lambdaQuery().eq(IotAlarmSubsystem::getOrgId, orgId).eq(IotAlarmSubsystem::getSource,1).eq(IotAlarmSubsystem::getDeleted, 0).count().intValue();
+    public int checkExitDevice(Long orgId, Long deviceId) {
+        return lambdaQuery()
+                .eq(IotAlarmSubsystem::getOrgId, orgId)
+                .ne(ObjectUtil.isNotNull(deviceId), IotAlarmSubsystem::getDeviceId, deviceId)
+                .eq(IotAlarmSubsystem::getSource, 1)
+                .eq(IotAlarmSubsystem::getDeleted, 0)
+                .count()
+                .intValue();
     }
 
     @Override

+ 3 - 3
soc-modules/soc-modules-core/src/main/resources/mapper/device/ProtectionMapper.xml

@@ -29,12 +29,12 @@
         a.alarm_host_code as deviceCode,
         a.iot_token as iotToken,
         a.source
-        from iot_alarm_subsystem a inner join sys_device d on d.business_device_id=a.id and d.device_status = 1
-        inner join sys_org c on a.org_id = c.id and c.deleted=0
+        from iot_alarm_subsystem a inner join sys_device d on (d.business_device_id = a.id or d.id=a.device_id) and d.device_status = 1
+        inner join sys_org c on a.org_id = c.id and c.deleted=0 and c.is_lock=0
         <if test="request.checkSub==true">
             and c.path like concat((select path from sys_org where id=#{request.orgId}), '%')
         </if>
-        where a.deleted=0
+        where a.deleted=0 and d.del_flag=0
         <if test="request.checkSub==false">
             and a.org_id = #{request.orgId}
         </if>

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

@@ -60,6 +60,7 @@ public interface IIotDeviceInfoService extends IService<IotDeviceInfo> {
      * @param token
      */
     void deleteDeviceByToken(String token);
+    void deleteDeviceAndStatusByToken(String token);
 
     /**
      * 保存报警主机设备,并更新缓存

+ 4 - 2
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/IotDeviceStatusService.java

@@ -3,9 +3,9 @@ package com.xunmei.host.iot.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.host.websocket.dto.WebsocketExecuteReq;
-import com.xunmei.host.websocket.dto.WebsocketResult;
 import com.xunmei.system.api.domain.iot.IotDeviceStatus;
-import com.xunmei.system.api.domain.iot.IotDeviceStatusLog;
+
+import java.util.List;
 
 /**
  * 【请填写功能名称】Service接口
@@ -21,4 +21,6 @@ public interface IotDeviceStatusService extends IService<IotDeviceStatus> {
 
     void deviceStatusChangeDeal(WebsocketExecuteReq req);
 
+    void deletedByDeviceIds(List<Long> collect);
+
 }

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

@@ -22,6 +22,7 @@ import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.host.iot.mapper.IotDeviceInfoMapper;
 import com.xunmei.host.iot.service.IIotDeviceInfoExtendService;
 import com.xunmei.host.iot.service.IIotDeviceInfoService;
+import com.xunmei.host.iot.service.IotDeviceStatusService;
 import com.xunmei.host.iot.service.SysDeviceService;
 import com.xunmei.host.protection.service.IotAlarmDefenceAreaService;
 import com.xunmei.host.protection.service.IotAlarmSubsystemService;
@@ -47,6 +48,7 @@ import io.netty.util.internal.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RLock;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -76,6 +78,9 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
 
     @Autowired
     private SysDeviceService sysDeviceService;
+    @Lazy
+    @Autowired
+    private IotDeviceStatusService deviceStatusService;
 
     /**
      * 根据设备类型和设备编码,获取设备信息
@@ -96,7 +101,9 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
                     .eq(IotDeviceInfo::getIotToken, token)
                     .eq(IotDeviceInfo::getDeviceProduct, product)
                     .eq(IotDeviceInfo::getDeviceType, deviceType)
-                    .eq(IotDeviceInfo::getDeviceCode, deviceCode);
+                    .eq(IotDeviceInfo::getDeviceCode, deviceCode)
+                    .orderByDesc(IotDeviceInfo::getUpdateTime)
+                    .last(Constants.LIMIT1);
             IotDeviceInfo one = getOne(qw);
             if (one != null) {
                 updateCache(one, 1);
@@ -122,7 +129,9 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
             qw.lambda().eq(IotDeviceInfo::getIotToken, token)
                     .eq(IotDeviceInfo::getHostCode, hostCode)
                     .eq(IotDeviceInfo::getDeviceProduct, product)
-                    .eq(IotDeviceInfo::getDeviceCode, deviceCode);
+                    .eq(IotDeviceInfo::getDeviceCode, deviceCode)
+                    .orderByDesc(IotDeviceInfo::getUpdateTime)
+                    .last(Constants.LIMIT1);
             IotDeviceInfo one = getOne(qw);
             if (one != null) {
                 updateCache(one, 2);
@@ -209,6 +218,20 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public void deleteDeviceAndStatusByToken(String token) {
+        final LambdaQueryWrapper<IotDeviceInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(IotDeviceInfo::getIotToken, token);
+        wrapper.select(IotDeviceInfo::getId);
+        final List<IotDeviceInfo> list = list(wrapper);
+        if (ObjectUtil.isNotEmpty(list)) {
+            final List<Long> collect = list.stream().map(IotDeviceInfo::getId).collect(Collectors.toList());
+            deviceStatusService.deletedByDeviceIds(collect);
+        }
+        deleteDeviceByToken(token);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public void saveHostDevice(List<IotDeviceInfo> data) {
         if (ObjectUtil.isNotEmpty(data)) {
             saveBatch(data);
@@ -296,7 +319,7 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
         if (ObjectUtil.isEmpty(iotCode)) {
             return;
         }
-        deleteDeviceByToken(iotCode);
+        deleteDeviceAndStatusByToken(iotCode);
         dvrDiskService.deleteByTokenAndHostCode(iotCode, null);
         iotAlarmSubsystemService.deleteByIotToken(iotCode);
         iotAlarmDefenceAreaService.deleteByIotToken(iotCode);

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

@@ -113,6 +113,16 @@ public class IotDeviceStatusServiceImpl extends ServiceImpl<IotDeviceStatusMappe
     }
 
     @Override
+    public void deletedByDeviceIds(List<Long> deviceIds) {
+        if (ObjectUtil.isEmpty(deviceIds)) {
+            return;
+        }
+        LambdaQueryWrapper<IotDeviceStatus> wrapper = new LambdaQueryWrapper<IotDeviceStatus>();
+        wrapper.in(IotDeviceStatus::getDeviceId, deviceIds);
+        iotDeviceStatusMapper.delete(wrapper);
+    }
+
+    @Override
     public void deviceStatusChangeDeal(WebsocketExecuteReq req) {
         final String productName = req.getProductName();
         final String deviceName = req.getDeviceName();

+ 1 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/video/dto/videoIntegrityCheck/VideoIntegrityCheckDto.java

@@ -26,6 +26,7 @@ public class VideoIntegrityCheckDto implements IRedisCompare {
     private String recordDate;
     private List checkSpan;
     private List loseSpan;
+    private String loseTime;
     @ApiModelProperty(value = "0: 定时 |  1:移动侦测")
     private String recordType;
     @ApiModelProperty(value = "原始录像索引")

+ 3 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/video/dto/videoIntegrityCheck/VideoIntegrityCheckReq.java

@@ -32,4 +32,7 @@ public class VideoIntegrityCheckReq {
 
     @ApiModelProperty(value = "录像丢失内容")
     private List<String> loseSpan;
+
+    @ApiModelProperty(value = "丢失时长,单位秒")
+    private String loseTime;
 }

+ 14 - 8
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/video/service/impl/VideoIntegrityCheckServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xunmei.host.video.service.impl;
 
+import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -51,9 +52,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.time.LocalDate;
-import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
 import java.util.*;
 
 /**
@@ -161,6 +160,7 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
         dst.setLoseSpan(req.getLoseSpan());
         dst.setRecordSpan(req.getRecordSpan());
         dst.setCheckSpan(req.getCheckSpan());
+        dst.setLoseTime(req.getLoseTime());
         return dst;
     }
 
@@ -234,7 +234,7 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
         videoIntegrityCheck.setOrgId(org.getId());
         videoIntegrityCheck.setOrgName(org.getShortName());
         videoIntegrityCheck.setOrgPath(org.getPath());
-        videoIntegrityCheck.setLoseDuration(calculateLoseMinute(videoIntegrityCheck.getLoseSpan()));
+        videoIntegrityCheck.setLoseDuration(calculateLoseMinute(videoIntegrityCheckDto.getLoseTime()));
         videoIntegrityCheck.setStatus(getStatus(videoIntegrityCheckDto, videoIntegrityCheck.getLoseDuration()));
         videoIntegrityCheck.setRecordType(videoIntegrityCheckDto.getRecordType());
         videoIntegrityCheck.setRecordSpan(dealSpan(videoIntegrityCheckDto.getRecordSpan()));
@@ -243,7 +243,6 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
             this.saveOrUpdate(videoIntegrityCheck);
         }
         saveLog(videoIntegrityCheck);
-
         return ReceiveErrorDto.success();
     }
 
@@ -283,12 +282,19 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
 
     }
 
-    private Integer calculateLoseMinute(String loseSpan) {
-        if (ObjectUtil.isEmpty(loseSpan)) {
+
+
+    private static Integer calculateLoseMinute(String loseTime) {
+        if (ObjectUtil.isEmpty(loseTime)) {
             return 0;
         }
+        if (NumberUtil.isNumber(loseTime)) {
+            final int time = Integer.parseInt(loseTime);
+            return time / 60;
+        }
+        return 0;
 
-        JSONArray array = JSON.parseArray(loseSpan);
+       /* JSONArray array = JSON.parseArray(loseSpan);
         int min = 0;
         for (Object object : array) {
             if (object instanceof JSONObject) {
@@ -307,7 +313,7 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
                 min += (int) l;
             }
         }
-        return min;
+        return min;*/
     }
 
     private String checkParam(VideoIntegrityCheckDto videoIntegrityCheckDto) {

+ 1 - 0
soc-modules/soc-modules-host/src/main/resources/mapper/IotAlarmDefenceAreaMapper.xml

@@ -16,6 +16,7 @@
           AND a.iot_token = #{token}
           AND a.defence_area_index = #{inputIndex}
           AND a.sub_system_code = #{subSystemId}
+        order by a.update_time desc limit 1
 
     </select>
 </mapper>

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

@@ -18,6 +18,7 @@
             d.iot_token = #{token}
           AND d.device_code = #{deviceName}
           AND s.`code` = #{code}
+        order by s.update_time desc limit 1
 
     </select>
 

+ 1 - 1
soc-modules/soc-modules-host/src/main/resources/mapper/IotDeviceInfoExtendMapper.xml

@@ -4,7 +4,7 @@
 
     <select id="selectByProductDeviceNameAndToken" resultType="com.xunmei.system.api.domain.iot.IotDeviceInfoExtend">
         select e.* from iot_device_info i inner join iot_device_info_extend e on i.id=e.device_id
-        where i.iot_token=#{token} and i.device_code=#{deviceName} and i.device_type=#{deviceTypeCode} limit 1
+        where i.iot_token=#{token} and i.device_code=#{deviceName} and i.device_type=#{deviceTypeCode} order by i.update_time desc limit 1
     </select>
 
     <update id="deleteDeviceExtendByTokenAndDeviceType">

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

@@ -10,7 +10,7 @@
                JSON_UNQUOTE(JSON_EXTRACT(info, '$[0].val'))            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
+                 inner JOIN iot_device_status s ON d.device_product = s.device_product and d.device_code = s.device_code and d.id=s.device_id
         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}

+ 13 - 2
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysDeviceController.java

@@ -1,5 +1,6 @@
 package com.xunmei.system.controller;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.xunmei.common.core.domain.R;
 import com.xunmei.common.core.vo.IdNameVo;
 import com.xunmei.common.core.web.controller.BaseController;
@@ -174,9 +175,9 @@ public class SysDeviceController extends BaseController {
     @RequiresPermissions("system:device:importData")
     @PostMapping("/importData")
     @Transactional(rollbackFor = {RuntimeException.class, Exception.class})
-    public void importData(MultipartFile file, boolean updateSupport,HttpServletResponse response) {
+    public void importData(MultipartFile file, boolean updateSupport, HttpServletResponse response) {
 
-            sysDeviceService.importData(file, updateSupport, response);
+        sysDeviceService.importData(file, updateSupport, response);
 
     }
 
@@ -185,4 +186,14 @@ public class SysDeviceController extends BaseController {
     public void downInChargeOfTemplate(HttpServletResponse response) throws IOException {
         sysDeviceService.downInChargeOfTemplate(response);
     }
+
+
+    @GetMapping("/checkExitSyncSubSystem")
+    public AjaxResult checkExitSyncSubSystem(Long orgId, String deviceType, Long deviceId) throws IOException {
+        if (!ObjectUtil.equal(deviceType, "6")) {
+            return AjaxResult.success(0);
+        }
+        int i = sysDeviceService.checkExitSyncSubSystem(orgId, deviceId);
+        return AjaxResult.success(i);
+    }
 }

+ 6 - 2
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysDeviceService.java

@@ -55,7 +55,8 @@ public interface ISysDeviceService extends IService<SysDevice> {
      * @return
      */
     SysDevice checkName(Long orgId, String name);
-    boolean checkAssetNoRepeat(Long orgId, String assetNo,Long deviceId);
+
+    boolean checkAssetNoRepeat(Long orgId, String assetNo, Long deviceId);
 
     /**
      * 新增【设备管理】
@@ -67,6 +68,7 @@ public interface ISysDeviceService extends IService<SysDevice> {
 
     /**
      * excel导入时插入
+     *
      * @param sysDevice
      * @return
      */
@@ -110,13 +112,15 @@ public interface ISysDeviceService extends IService<SysDevice> {
     TableDataInfo<SysDevicePageVo> selectPage(SysDevicePageDto sysDevice);
 
 
-
     /**
      * 查询列表
+     *
      * @param listDto
      * @return
      */
     List<SysDevice> findList(SysDeviceInnerListDto listDto);
 
     void importData(MultipartFile file, boolean updateSupport, HttpServletResponse response);
+
+    int checkExitSyncSubSystem(Long orgId,Long deviceId);
 }

+ 12 - 5
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysDeviceServiceImpl.java

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.CacheConstants;
+import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.constant.DictConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.device.domain.SysMultiLayerDictionary;
@@ -229,6 +230,7 @@ public class SysDeviceServiceImpl extends ServiceImpl<SysDeviceMapper, SysDevice
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.eq("org_id", orgId);
         queryWrapper.eq("device_name", name);
+        queryWrapper.last(Constants.LIMIT1);
         return baseMapper.selectOne(queryWrapper);
     }
 
@@ -263,12 +265,12 @@ public class SysDeviceServiceImpl extends ServiceImpl<SysDeviceMapper, SysDevice
         if (null != sysDevice1) {
             throw new RuntimeException("设备名称重复");
         }
-        if (!checkAssetNoRepeat(sysDevice.getOrgId(), sysDevice.getAssetNo(),null)) {
+        if (!checkAssetNoRepeat(sysDevice.getOrgId(), sysDevice.getAssetNo(), null)) {
             throw new RuntimeException("资产编号重复");
         }
         int insert = sysDeviceMapper.insert(sysDevice);
         //如果已经存在了主机同步上来的子系统,那么设备新增的就不能再同步到子系统表去
-        final int exitDevice = remoteProtectionService.checkExitDevice(sysOrg.getId(), SecurityConstants.INNER);
+        final int exitDevice = remoteProtectionService.checkExitDevice(sysOrg.getId(), null, SecurityConstants.INNER);
 
         //未报废的子系统且当前机构不存在主机同步子系统的情况下才需要同步到子系统表
         if ("6".equals(sysDevice.getDeviceType()) && sysDevice.getDeviceStatus() != 3 && exitDevice == 0) {
@@ -337,7 +339,7 @@ public class SysDeviceServiceImpl extends ServiceImpl<SysDeviceMapper, SysDevice
      */
     @Override
     public int updateSysDevice(SysDevice sysDevice) {
-        if (!checkAssetNoRepeat(sysDevice.getOrgId(), sysDevice.getAssetNo(),sysDevice.getId())) {
+        if (!checkAssetNoRepeat(sysDevice.getOrgId(), sysDevice.getAssetNo(), sysDevice.getId())) {
             throw new RuntimeException("资产编号重复");
         }
         sysDevice.setUpdateTime(DateUtils.getNowDate());
@@ -345,7 +347,7 @@ public class SysDeviceServiceImpl extends ServiceImpl<SysDeviceMapper, SysDevice
         SysOrg sysOrg = orgService.selectSysOrgById(sysDevice.getOrgId());
         sysDevice.setOrgName(sysOrg.getShortName());
         //如果已经存在了主机同步上来的子系统,那么设备新增的就不能再同步到子系统表去
-        final int exitDevice = remoteProtectionService.checkExitDevice(sysDevice.getOrgId(), SecurityConstants.INNER);
+        final int exitDevice = remoteProtectionService.checkExitDevice(sysDevice.getOrgId(), sysDevice.getId(), SecurityConstants.INNER);
         if ("6".equals(sysDevice.getDeviceType()) && ObjectUtil.isNull(sysDevice.getBusinessDeviceId()) && exitDevice == 0) {
             ProtectionVO byDeviceId = remoteProtectionService.getByDeviceId(sysDevice.getId(), SecurityConstants.INNER);
             ProtectionDTO protectionDTO = new ProtectionDTO();
@@ -370,6 +372,11 @@ public class SysDeviceServiceImpl extends ServiceImpl<SysDeviceMapper, SysDevice
         return sysDeviceMapper.updateById(sysDevice);
     }
 
+    @Override
+    public int checkExitSyncSubSystem(Long orgId, Long deviceId) {
+        return remoteProtectionService.checkExitDevice(orgId, deviceId, SecurityConstants.INNER);
+    }
+
     /**
      * 批量删除【请填写功能名称】
      *
@@ -473,7 +480,7 @@ public class SysDeviceServiceImpl extends ServiceImpl<SysDeviceMapper, SysDevice
         if (StringUtils.isEmpty(assetNo)) {
             msgList.add("资产编号为空");
         } else {
-            if (device.getOrgId() != null && !checkAssetNoRepeat(device.getOrgId(), assetNo,null)) {
+            if (device.getOrgId() != null && !checkAssetNoRepeat(device.getOrgId(), assetNo, null)) {
                 msgList.add("资产编号重复");
             } else {
                 device.setAssetNo(assetNo);