package com.doumee.service.business.impl.hksync; 
 | 
  
 | 
import com.alibaba.fastjson.JSON; 
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.aliyun.tea.TeaException; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.haikang.model.HKConstants; 
 | 
import com.doumee.core.haikang.model.param.BaseListPageResponse; 
 | 
import com.doumee.core.haikang.model.param.BaseResponse; 
 | 
import com.doumee.core.haikang.model.param.request.*; 
 | 
import com.doumee.core.haikang.model.param.respose.*; 
 | 
import com.doumee.core.haikang.service.HKService; 
 | 
import com.doumee.core.utils.Constants; 
 | 
import com.doumee.core.utils.DateUtil; 
 | 
import com.doumee.dao.business.DeviceMapper; 
 | 
import com.doumee.dao.business.ParksMapper; 
 | 
import com.doumee.dao.business.model.Device; 
 | 
import com.doumee.dao.business.model.Parks; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 设备信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2023/11/30 15:33 
 | 
 */ 
 | 
@Service 
 | 
public class HkSyncDeviceServiceImpl extends HkSyncBaseServiceImpl { 
 | 
  
 | 
    @Autowired 
 | 
    private DeviceMapper deviceMapper; 
 | 
  
 | 
    /** 
 | 
     * 同步海康门禁设备数据 
 | 
     * @param param 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
//    @Async 
 | 
    public String syncHkDevices(Device param){ 
 | 
        if(Constants.DEALING_HK_SYNCDEVICE){ 
 | 
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "同步任务正在执行哦,请稍后查看结果!") ; 
 | 
        } 
 | 
        Constants.DEALING_HK_SYNCDEVICE =true; 
 | 
        try { 
 | 
            List<Device> deleteList = new ArrayList<>(); 
 | 
            List<Device> addList = new ArrayList<>(); 
 | 
            List<Device> editList = new ArrayList<>(); 
 | 
            Date date = new Date(); 
 | 
            //查询全部门禁设备数据 
 | 
            List<Device> allList = deviceMapper.selectList(new QueryWrapper<Device>().lambda() 
 | 
                    .eq(Device::getType,Constants.ZERO)); 
 | 
            List<DoorsInfoResponse> allDoors = getAllDoorList(); 
 | 
            List<AcsDeviceInfoResponse> allHkList = getAllDeViceList(); 
 | 
            /** 
 | 
             * 获取增删改数据集合 
 | 
             */ 
 | 
            getDataChangeList(allList,allDoors,allHkList,addList,editList,deleteList,date ); 
 | 
            if(deleteList.size()>0){ 
 | 
                //逻辑删除 
 | 
                for(Device d : deleteList){ 
 | 
                    deviceMapper.updateById(d); 
 | 
                } 
 | 
            } 
 | 
            if(addList.size()>0){ 
 | 
                deviceMapper.insert(addList); 
 | 
            } 
 | 
            if(editList.size()>0){ 
 | 
                for(Device d : editList){ 
 | 
                    deviceMapper.updateById(d); 
 | 
                } 
 | 
            } 
 | 
            return "同步数据:新增【"+addList.size()+"】条,更新【"+editList.size()+"】条,删除【"+deleteList.size()+"】条"; 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "同步失败!"); 
 | 
        }finally { 
 | 
            Constants.DEALING_HK_SYNCDEVICE =false; 
 | 
        } 
 | 
    } 
 | 
    /** 
 | 
     * 同步海康门禁设备数据 
 | 
     * @param param 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
//    @Async 
 | 
    public String syncHkLed(Device param){ 
 | 
        if(Constants.DEALING_HK_SYNCDEVICE){ 
 | 
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "同步任务正在执行哦,请稍后查看结果!") ; 
 | 
        } 
 | 
        Constants.DEALING_HK_SYNCDEVICE =true; 
 | 
        try { 
 | 
            List<Device> deleteList = new ArrayList<>(); 
 | 
            List<Device> addList = new ArrayList<>(); 
 | 
            List<Device> editList = new ArrayList<>(); 
 | 
            Date date = new Date(); 
 | 
            //查询全部门禁设备数据 
 | 
            List<Device> allList = deviceMapper.selectList(new QueryWrapper<Device>().lambda() 
 | 
                    .eq(Device::getType,Constants.TWO)); 
 | 
            List<LedRecordsInfoResponse> allHkList = getAllLedList(); 
 | 
            /** 
 | 
             * 获取增删改数据集合 
 | 
             */ 
 | 
            getLedDataChangeList(allList,allHkList,addList,editList,deleteList,date); 
 | 
            if(deleteList.size()>0){ 
 | 
                //逻辑删除 
 | 
                for(Device d : deleteList){ 
 | 
                    deviceMapper.updateById(d); 
 | 
                } 
 | 
            } 
 | 
            if(addList.size()>0){ 
 | 
                deviceMapper.insert(addList); 
 | 
            } 
 | 
            if(editList.size()>0){ 
 | 
                for(Device d : editList){ 
 | 
                    deviceMapper.updateById(d); 
 | 
                } 
 | 
            } 
 | 
            return "同步数据:新增【"+addList.size()+"】条,更新【"+editList.size()+"】条,删除【"+deleteList.size()+"】条"; 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "同步失败!"); 
 | 
        }finally { 
 | 
            Constants.DEALING_HK_SYNCDEVICE =false; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void getLedDataChangeList(List<Device> allList, List<LedRecordsInfoResponse> allHkList, List<Device> addList, List<Device> editList, List<Device> deleteList, Date date) { 
 | 
        if(allHkList!=null && allHkList.size()>0){ 
 | 
            //获取海康全部门禁组数据 
 | 
            for(LedRecordsInfoResponse device : allHkList){ 
 | 
                Device model = getExistedLed(device,allList); 
 | 
                if(model !=null){ 
 | 
                    //如果已存在,则更新数据 
 | 
                    model =  initLedDataByHkData(model,device,date); 
 | 
                    editList.add(model); 
 | 
                }else{ 
 | 
                    //如果不存在,则新增数据 
 | 
                    model = new Device(); 
 | 
                    model =  initLedDataByHkData(model,device,date); 
 | 
                    model.setIsEntrance(Constants.ZERO); 
 | 
                    addList.add(model); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        //判断获取删除的门禁设备,逻辑删除 
 | 
        getDeleteLedList(allList,allHkList,deleteList,date); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 同步海康门禁设备数据 
 | 
     * @param param 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
//    @Async 
 | 
    public String syncHkBroadcast(Device param){ 
 | 
        if(Constants.DEALING_HK_SYNCDEVICE){ 
 | 
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "同步任务正在执行哦,请稍后查看结果!") ; 
 | 
        } 
 | 
        Constants.DEALING_HK_SYNCDEVICE =true; 
 | 
        try { 
 | 
            List<Device> deleteList = new ArrayList<>(); 
 | 
            List<Device> addList = new ArrayList<>(); 
 | 
            List<Device> editList = new ArrayList<>(); 
 | 
            Date date = new Date(); 
 | 
            //查询全部广播点设备数据 
 | 
            List<Device> allList = deviceMapper.selectList(new QueryWrapper<Device>().lambda() 
 | 
                    .eq(Device::getType,Constants.THREE)); 
 | 
            List<FetchAudioChannelInfoResponse> allHkList = getAllBroadcastList(); 
 | 
            /** 
 | 
             * 获取增删改数据集合 
 | 
             */ 
 | 
            getBroadcastDataChangeList(allList,allHkList,addList,editList,deleteList,date); 
 | 
            if(deleteList.size()>0){ 
 | 
                //逻辑删除 
 | 
                for(Device d : deleteList){ 
 | 
                    deviceMapper.updateById(d); 
 | 
                } 
 | 
            } 
 | 
            if(addList.size()>0){ 
 | 
                deviceMapper.insert(addList); 
 | 
            } 
 | 
            if(editList.size()>0){ 
 | 
                for(Device d : editList){ 
 | 
                    deviceMapper.updateById(d); 
 | 
                } 
 | 
            } 
 | 
            return "同步数据:新增【"+addList.size()+"】条,更新【"+editList.size()+"】条,删除【"+deleteList.size()+"】条"; 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "同步失败!"); 
 | 
        }finally { 
 | 
            Constants.DEALING_HK_SYNCDEVICE =false; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void getBroadcastDataChangeList(List<Device> allList, List<FetchAudioChannelInfoResponse> allHkList, List<Device> addList, List<Device> editList, List<Device> deleteList, Date date) { 
 | 
        if(allHkList!=null && allHkList.size()>0){ 
 | 
            //获取海康全部门禁组数据 
 | 
            for(FetchAudioChannelInfoResponse device : allHkList){ 
 | 
                Device model = getExistedBroadcast(device,allList); 
 | 
                if(model !=null){ 
 | 
                    //如果已存在,则更新数据 
 | 
                    model =  initBroadcastDataByHkData(model,device,date); 
 | 
                    editList.add(model); 
 | 
                }else{ 
 | 
                    //如果不存在,则新增数据 
 | 
                    model = new Device(); 
 | 
                    model =  initBroadcastDataByHkData(model,device,date); 
 | 
                    model.setIsEntrance(Constants.ZERO); 
 | 
                    addList.add(model); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        //判断获取删除的门禁设备,逻辑删除 
 | 
        getDeleteBroadcastList(allList,allHkList,deleteList,date); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
//    @Async 
 | 
    public void getAscDeviceStatus(){ 
 | 
        if(Constants.DEALING_HK_SYNCDEVICE_STATUS){ 
 | 
            return; 
 | 
        } 
 | 
        Constants.DEALING_HK_SYNCDEVICE_STATUS =true; 
 | 
        try { 
 | 
            List<Device> editList = new ArrayList<>(); 
 | 
            Date date = new Date(); 
 | 
            //查询全部门禁设备数据 
 | 
            List<AscDeviceStatusInfoResponse> allHkList = getAllDeviceStatusList(); 
 | 
  
 | 
            if(allHkList.size()>0){ 
 | 
                //逻辑删除 
 | 
                for(AscDeviceStatusInfoResponse d : allHkList){ 
 | 
                    deviceMapper.update(null,new UpdateWrapper<Device>().lambda() 
 | 
                            .set(Device::getOnline,d.getOnline()) 
 | 
                            .set(Device::getIp,d.getIp()) 
 | 
                            .set(Device::getPort,d.getPort()) 
 | 
                            .set(Device::getManufature,d.getManufacturer()) 
 | 
                            .set(Device::getEditDate,date) 
 | 
                            .eq(Device::getHkId,d.getIndexCode())); 
 | 
                } 
 | 
            } 
 | 
        }catch (Exception e){ 
 | 
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "同步设备状态失败!"); 
 | 
        }finally { 
 | 
            Constants.DEALING_HK_SYNCDEVICE_STATUS =false; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private List<AcsDeviceInfoResponse> getAllDeViceList() { 
 | 
        AcsDeviceListRequest param = new AcsDeviceListRequest(); 
 | 
        List<AcsDeviceInfoResponse> allHkList = new ArrayList<>(); 
 | 
        boolean hasNext = true; 
 | 
        int curTotal = 0; 
 | 
        int curPage = 1; 
 | 
        while (hasNext){ 
 | 
            //分页遍历循环查询所有门禁设备数据 
 | 
            param = new AcsDeviceListRequest(); 
 | 
            param.setPageNo(curPage); 
 | 
            param.setPageSize(100); 
 | 
            BaseResponse<AcsDeviceListResponse> response = HKService.acsDeviceList(param); 
 | 
            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ 
 | 
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); 
 | 
            } 
 | 
            AcsDeviceListResponse r = response.getData(); 
 | 
            curTotal += 100; 
 | 
            if(curTotal >= r.getTotal()){ 
 | 
                hasNext = false; 
 | 
            } 
 | 
            if(r.getList() == null || r.getList().size()==0){ 
 | 
                hasNext =false; 
 | 
            }else{ 
 | 
                allHkList.addAll(r.getList()); 
 | 
            } 
 | 
            curPage++; 
 | 
        } 
 | 
        return allHkList; 
 | 
    } 
 | 
  
 | 
    public  List<DoorsInfoResponse>  getAllDoorList(){ 
 | 
        List<DoorsInfoResponse> allDoorList = new ArrayList<>(); 
 | 
        Date date = new Date(); 
 | 
        boolean hasNext = true; 
 | 
        int curTotal = 0; 
 | 
        int curPage = 1; 
 | 
        while (hasNext){ 
 | 
            //分页遍历循环查询所有门禁设备数据 
 | 
            DoorsListRequest param = new DoorsListRequest(); 
 | 
            param.setPageNo(curPage); 
 | 
            param.setPageSize(100); 
 | 
            BaseResponse<DoorsListResponse> response = HKService.doorSearch(param); 
 | 
            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ 
 | 
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); 
 | 
            } 
 | 
            DoorsListResponse r = response.getData(); 
 | 
            curTotal += 100; 
 | 
            if(curTotal >= r.getTotal()){ 
 | 
                hasNext = false; 
 | 
            } 
 | 
            if(r.getList() == null || r.getList().size()==0){ 
 | 
                hasNext =false; 
 | 
            }else{ 
 | 
                allDoorList.addAll(r.getList()); 
 | 
            } 
 | 
            curPage++; 
 | 
        } 
 | 
        return  allDoorList; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取全部广播点数据 
 | 
     * @return 
 | 
     */ 
 | 
    public  List<FetchAudioChannelInfoResponse>  getAllBroadcastList(){ 
 | 
        List<FetchAudioChannelInfoResponse> allDoorList = new ArrayList<>(); 
 | 
        Date date = new Date(); 
 | 
        boolean hasNext = true; 
 | 
        int curTotal = 0; 
 | 
        int curPage = 1; 
 | 
        while (hasNext){ 
 | 
            //分页遍历循环查询所有门禁设备数据 
 | 
            FetchAudioChannelRequest param = new FetchAudioChannelRequest(); 
 | 
            param.setPageNo(curPage); 
 | 
            param.setPageSize(100); 
 | 
            BaseResponse<BaseListPageResponse<FetchAudioChannelInfoResponse>>  response = HKService.fetchAudioChannel(param); 
 | 
            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ 
 | 
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); 
 | 
            } 
 | 
            BaseListPageResponse<FetchAudioChannelInfoResponse> r = response.getData(); 
 | 
            curTotal += 100; 
 | 
            if(curTotal >= r.getTotal()){ 
 | 
                hasNext = false; 
 | 
            } 
 | 
            if(r.getList() == null || r.getList().size()==0){ 
 | 
                hasNext =false; 
 | 
            }else{ 
 | 
                allDoorList.addAll(r.getList()); 
 | 
            } 
 | 
            curPage++; 
 | 
        } 
 | 
        return  allDoorList; 
 | 
    } 
 | 
    /** 
 | 
     * 获取全部LED数据 
 | 
     * @return 
 | 
     */ 
 | 
    public  List<LedRecordsInfoResponse>  getAllLedList(){ 
 | 
        List<LedRecordsInfoResponse> allDoorList = new ArrayList<>(); 
 | 
        Date date = new Date(); 
 | 
        boolean hasNext = true; 
 | 
        int curTotal = 0; 
 | 
        int curPage = 1; 
 | 
        while (hasNext){ 
 | 
            //分页遍历循环查询所有门禁设备数据 
 | 
            LedRecordsRequest param = new LedRecordsRequest(); 
 | 
            param.setPageNo(curPage); 
 | 
            param.setPageSize(100); 
 | 
            BaseResponse<BaseListPageResponse<LedRecordsInfoResponse>>    response = HKService.ledRecords(param); 
 | 
            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ 
 | 
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); 
 | 
            } 
 | 
            BaseListPageResponse<LedRecordsInfoResponse> r = response.getData(); 
 | 
            curTotal += 100; 
 | 
            if(curTotal >= r.getTotal()){ 
 | 
                hasNext = false; 
 | 
            } 
 | 
            if(r.getList() == null || r.getList().size()==0){ 
 | 
                hasNext =false; 
 | 
            }else{ 
 | 
                allDoorList.addAll(r.getList()); 
 | 
            } 
 | 
            curPage++; 
 | 
        } 
 | 
        return  allDoorList; 
 | 
    } 
 | 
    public  List<AscDeviceStatusInfoResponse>  getAllDeviceStatusList(){ 
 | 
        List<AscDeviceStatusInfoResponse> allDoorList = new ArrayList<>(); 
 | 
        Date date = new Date(); 
 | 
        boolean hasNext = true; 
 | 
        int curTotal = 0; 
 | 
        int curPage = 1; 
 | 
        while (hasNext){ 
 | 
            //分页遍历循环查询所有门禁设备数据 
 | 
            AcsDeviceStatusListRequest param = new AcsDeviceStatusListRequest(); 
 | 
            param.setPageNo(curPage); 
 | 
            param.setPageSize(100); 
 | 
            BaseResponse<BaseListPageResponse<AscDeviceStatusInfoResponse>> response = HKService.acsDeviceStatus(param); 
 | 
            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ 
 | 
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); 
 | 
            } 
 | 
            BaseListPageResponse r = response.getData(); 
 | 
            curTotal += 100; 
 | 
            if(curTotal >= r.getTotal()){ 
 | 
                hasNext = false; 
 | 
            } 
 | 
            if(r.getList() == null || r.getList().size()==0){ 
 | 
                hasNext =false; 
 | 
            }else{ 
 | 
                allDoorList.addAll(r.getList()); 
 | 
            } 
 | 
            curPage++; 
 | 
        } 
 | 
        return  allDoorList; 
 | 
    } 
 | 
  
 | 
    private void getDataChangeList(List<Device> allList, 
 | 
                                   List<DoorsInfoResponse> hkDoorList , 
 | 
                                   List<AcsDeviceInfoResponse> allHkList, 
 | 
                                   List<Device> addList, 
 | 
                                   List<Device> editList, 
 | 
                                   List<Device> deleteList, 
 | 
                                   Date date ) { 
 | 
        if(hkDoorList!=null && hkDoorList.size()>0){ 
 | 
            //获取海康全部门禁组数据 
 | 
            for(DoorsInfoResponse device : hkDoorList){ 
 | 
                Device model = getExistedDoor(device,allList); 
 | 
                if(model !=null){ 
 | 
                    //如果已存在,则更新数据 
 | 
                    model =  initDoorDataByHkData(model,device,date,allHkList); 
 | 
                    editList.add(model); 
 | 
                }else{ 
 | 
                    //如果不存在,则新增数据 
 | 
                    model = new Device(); 
 | 
                    model =  initDoorDataByHkData(model,device,date,allHkList); 
 | 
                    model.setIsEntrance(Constants.ZERO); 
 | 
                    addList.add(model); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        //判断获取删除的门禁设备,逻辑删除 
 | 
        getDeleteDoorList(allList,hkDoorList,deleteList,date); 
 | 
    } 
 | 
  
 | 
    private Device initLedDataByHkData(Device model, LedRecordsInfoResponse door, Date date) { 
 | 
        model.setIsdeleted(Constants.ZERO); 
 | 
        model.setHkId(door.getModel_data_id()); 
 | 
        model.setHkDate(date); 
 | 
        model.setHkStatus(Constants.ONE); 
 | 
        model.setNo(door.getIndex_code()); 
 | 
        model.setType(Constants.TWO); 
 | 
        model.setManufature(door.getManufacturer()); 
 | 
        model.setPort(door.getPort()); 
 | 
        model.setIp(door.getAddr()); 
 | 
        model.setResourceType(door.getDevice_type()); 
 | 
        model.setName(door.getScreen_name()); 
 | 
        model.setRemark(JSONObject.toJSONString(door)); 
 | 
        return  model; 
 | 
    } 
 | 
    private Device initBroadcastDataByHkData(Device model, FetchAudioChannelInfoResponse device, Date date) { 
 | 
        model.setIsdeleted(Constants.ZERO); 
 | 
        model.setHkDate(date); 
 | 
        model.setHkId(device.getAudioChannelIndexCode()); 
 | 
        model.setName(device.getAudioChannelName()); 
 | 
        model.setHkStatus(Constants.ONE); 
 | 
        model.setType(Constants.THREE); 
 | 
        model.setChannelNo(device.getChannelNo()); 
 | 
        model.setChannelInfo(device.getChannelType()); 
 | 
        model.setResourceType(device.getAudioChannelType()); 
 | 
        model.setStatus(device.getState()); 
 | 
        model.setRegionName(device.getRegionName()); 
 | 
        return  model; 
 | 
    } 
 | 
    private Device initDoorDataByHkData(Device model, DoorsInfoResponse door, Date date, List<AcsDeviceInfoResponse> allHkList) { 
 | 
        AcsDeviceInfoResponse device = getDeviceByDoorid(door.getParentIndexCode(),allHkList); 
 | 
        model.setIsdeleted(Constants.ZERO); 
 | 
        model.setIp(device.getIp()); 
 | 
        model.setHkDate(date); 
 | 
        model.setCreateDate(DateUtil.getISO8601DateByStr(device.getCreateTime())); 
 | 
        model.setEditDate(DateUtil.getISO8601DateByStr(device.getUpdateTime())); 
 | 
        model.setNo(device.getDevSerialNum()); 
 | 
        model.setHkId(device.getIndexCode()); 
 | 
        model.setName(device.getName()); 
 | 
        model.setHkStatus(Constants.ONE); 
 | 
        model.setManufature(device.getManufacturer()); 
 | 
        model.setType(Constants.ZERO); 
 | 
//        model.setNo(device.getDevSerialNum()); 
 | 
//        model.setChannelNo(getChannelNo(device.getIndexCode(),hkDoorList,model)); 
 | 
        model.setChannelNo(door.getChannelNo()); 
 | 
        model.setChannelInfo(door.getName()); 
 | 
        model.setResourceType(device.getResourceType()); 
 | 
        model.setDevTypeCode(device.getDevTypeCode()); 
 | 
        model.setDevTypeDesc(device.getDevTypeDesc()); 
 | 
        model.setManufature(device.getManufacturer()); 
 | 
        model.setPort(device.getPort()); 
 | 
        model.setRemark(JSONObject.toJSONString(device)); 
 | 
        model.setDoorId(door.getIndexCode()); 
 | 
        model.setDoorName(door.getName()); 
 | 
        model.setRegionName(door.getRegionName()); 
 | 
        model.setRegionPathName(door.getRegionPathName()); 
 | 
        model.setDoorNo(door.getDoorNo()); 
 | 
        return  model; 
 | 
    } 
 | 
    private AcsDeviceInfoResponse getDeviceByDoorid(String indexCode, List<AcsDeviceInfoResponse> allHkList ) { 
 | 
        if(allHkList!=null && allHkList.size()>0){ 
 | 
            for(AcsDeviceInfoResponse info : allHkList){ 
 | 
                if(StringUtils.equals(indexCode,info.getIndexCode())){ 
 | 
                 return info; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return new AcsDeviceInfoResponse(); 
 | 
    } 
 | 
    private void getDataChangeList(List<Device> allList, List<AcsDeviceInfoResponse> allHkList, List<Device> addList, List<Device> editList,List<Device> deleteList, Date date) { 
 | 
        if(allHkList!=null && allHkList.size()>0){ 
 | 
            //获取海康全部门禁组数据 
 | 
            List<DoorsInfoResponse> hkDoorList = getAllDoorList(); 
 | 
            for(AcsDeviceInfoResponse device : allHkList){ 
 | 
                Device model = getExistedDevice(device,allList); 
 | 
                if(model !=null){ 
 | 
                    //如果已存在,则更新数据 
 | 
                    model =  initDataByHkData(model,device,date,hkDoorList); 
 | 
                    editList.add(model); 
 | 
                }else{ 
 | 
                    //如果不存在,则新增数据 
 | 
                    model = new Device(); 
 | 
                    model =  initDataByHkData(model,device,date,hkDoorList); 
 | 
                    addList.add(model); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        //判断获取删除的门禁设备,逻辑删除 
 | 
        getDeleteList(allList,allHkList,deleteList,date); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 初始化海康入库数据 
 | 
     * @param model 
 | 
     * @param device 
 | 
     * @param date 
 | 
     * @return 
 | 
     */ 
 | 
    private Device initDataByHkData(Device model, AcsDeviceInfoResponse device,Date date, List<DoorsInfoResponse> hkDoorList) { 
 | 
        model.setIsdeleted(Constants.ZERO); 
 | 
        model.setIp(device.getIp()); 
 | 
        model.setHkDate(date); 
 | 
        model.setCreateDate(DateUtil.getISO8601DateByStr(device.getCreateTime())); 
 | 
        model.setEditDate(DateUtil.getISO8601DateByStr(device.getUpdateTime())); 
 | 
        model.setNo(device.getDevSerialNum()); 
 | 
        model.setHkId(device.getIndexCode()); 
 | 
        model.setName(device.getName()); 
 | 
        model.setHkStatus(Constants.ONE); 
 | 
        model.setManufature(device.getManufacturer()); 
 | 
        model.setType(Constants.ZERO); 
 | 
//        model.setNo(device.getDevSerialNum()); 
 | 
        model.setChannelNo(getChannelNo(device.getIndexCode(),hkDoorList,model)); 
 | 
        model.setResourceType(device.getResourceType()); 
 | 
        model.setDevTypeCode(device.getDevTypeCode()); 
 | 
        model.setDevTypeDesc(device.getDevTypeDesc()); 
 | 
        model.setManufature(device.getManufacturer()); 
 | 
        model.setPort(device.getPort()); 
 | 
        model.setRemark(JSONObject.toJSONString(device)); 
 | 
        return  model; 
 | 
    } 
 | 
  
 | 
    private String getChannelNo(String indexCode, List<DoorsInfoResponse> hkDoorList,Device model ) { 
 | 
        String str = ""; 
 | 
        String names = ""; 
 | 
        if(hkDoorList!=null && hkDoorList.size()>0){ 
 | 
            for(DoorsInfoResponse info : hkDoorList){ 
 | 
                if(StringUtils.equals(indexCode,info.getParentIndexCode())){ 
 | 
                    if(StringUtils.isBlank(info.getChannelNo())){ 
 | 
                        continue; 
 | 
                    } 
 | 
                    if(StringUtils.isNotBlank(str)){ 
 | 
                        str += ","; 
 | 
                        names += ","; 
 | 
                    } 
 | 
                    str+=info.getChannelNo(); 
 | 
                    names+=info.getName(); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        model.setChannelNo(str); 
 | 
        model.setChannelInfo(names); 
 | 
        return str; 
 | 
    } 
 | 
  
 | 
    private Device getExistedDoor(DoorsInfoResponse device, List<Device> allList) { 
 | 
        if(allList.size()>0){ 
 | 
            for(Device r : allList){ 
 | 
                if(StringUtils.equals(r.getDoorId(), device.getIndexCode())){ 
 | 
                    //表示未删除 
 | 
                    return  r; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
    private Device getExistedLed(LedRecordsInfoResponse device, List<Device> allList) { 
 | 
        if(allList.size()>0){ 
 | 
            for(Device r : allList){ 
 | 
                if(StringUtils.equals(r.getHkId(), device.getModel_data_id())){ 
 | 
                    //表示未删除 
 | 
                    return  r; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
    private Device getExistedBroadcast(FetchAudioChannelInfoResponse device, List<Device> allList) { 
 | 
        if(allList.size()>0){ 
 | 
            for(Device r : allList){ 
 | 
                if(StringUtils.equals(r.getHkId(), device.getAudioChannelIndexCode())){ 
 | 
                    //表示未删除 
 | 
                    return  r; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
    private Device getExistedDevice(AcsDeviceInfoResponse device, List<Device> allList) { 
 | 
        if(allList.size()>0){ 
 | 
            for(Device r : allList){ 
 | 
                if(StringUtils.equals(r.getHkId(), device.getIndexCode())){ 
 | 
                    //表示未删除 
 | 
                    return  r; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
  
 | 
    private void getDeleteList(List<Device> allList, List<AcsDeviceInfoResponse> allHkList,List<Device> deleteList ,Date date) { 
 | 
        if(allList!=null && allList.size()>0){ 
 | 
            for(Device device : allList){ 
 | 
                if(isDeletedDevice(device,allHkList)){ 
 | 
                    device.setIsdeleted(Constants.ONE); 
 | 
                    device.setEditDate(date); 
 | 
                    deleteList.add(device); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    private void getDeleteDoorList(List<Device> allList,  List<DoorsInfoResponse> allHkList,List<Device> deleteList ,Date date) { 
 | 
        if(allList!=null && allList.size()>0){ 
 | 
            for(Device device : allList){ 
 | 
                if(isDeletedDoorDevice(device,allHkList)){ 
 | 
                    device.setIsdeleted(Constants.ONE); 
 | 
                    device.setEditDate(date); 
 | 
                    deleteList.add(device); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    private void getDeleteLedList(List<Device> allList,  List<LedRecordsInfoResponse> allHkList,List<Device> deleteList ,Date date) { 
 | 
        if(allList!=null && allList.size()>0){ 
 | 
            for(Device device : allList){ 
 | 
                if(isDeletedLedDevice(device,allHkList)){ 
 | 
                    device.setIsdeleted(Constants.ONE); 
 | 
                    device.setEditDate(date); 
 | 
                    deleteList.add(device); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    private void getDeleteBroadcastList(List<Device> allList,  List<FetchAudioChannelInfoResponse> allHkList,List<Device> deleteList ,Date date) { 
 | 
        if(allList!=null && allList.size()>0){ 
 | 
            for(Device device : allList){ 
 | 
                if(isDeletedBroadcastDevice(device,allHkList)){ 
 | 
                    device.setIsdeleted(Constants.ONE); 
 | 
                    device.setEditDate(date); 
 | 
                    deleteList.add(device); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private boolean isDeletedDoorDevice(Device device, List<DoorsInfoResponse> allHkList) { 
 | 
        if(allHkList.size()>0){ 
 | 
            for(DoorsInfoResponse r : allHkList){ 
 | 
                if(StringUtils.equals(device.getDoorId(), r.getIndexCode())){ 
 | 
                    //表示未删除 
 | 
                    return  false; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  true; 
 | 
  
 | 
    } 
 | 
    private boolean isDeletedLedDevice(Device device, List<LedRecordsInfoResponse> allHkList) { 
 | 
        if(allHkList.size()>0){ 
 | 
            for(LedRecordsInfoResponse r : allHkList){ 
 | 
                if(StringUtils.equals(device.getDoorId(), r.getModel_data_id())){ 
 | 
                    //表示未删除 
 | 
                    return  false; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  true; 
 | 
  
 | 
    } 
 | 
    private boolean isDeletedBroadcastDevice(Device device, List<FetchAudioChannelInfoResponse> allHkList) { 
 | 
        if(allHkList.size()>0){ 
 | 
            for(FetchAudioChannelInfoResponse r : allHkList){ 
 | 
                if(StringUtils.equals(device.getDoorId(), r.getAudioChannelIndexCode())){ 
 | 
                    //表示未删除 
 | 
                    return  false; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  true; 
 | 
  
 | 
    } 
 | 
    private boolean isDeletedDevice(Device device, List<AcsDeviceInfoResponse> allHkList) { 
 | 
        if(allHkList.size()>0){ 
 | 
            for(AcsDeviceInfoResponse r : allHkList){ 
 | 
                if(StringUtils.equals(device.getHkId(), r.getIndexCode())){ 
 | 
                    //表示未删除 
 | 
                    return  false; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  true; 
 | 
  
 | 
    } 
 | 
  
 | 
} 
 |