package com.doumee.service.business.impl.hksync; 
 | 
  
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
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.PlatformDeviceMapper; 
 | 
import com.doumee.dao.business.PlatformMapper; 
 | 
import com.doumee.dao.business.model.Device; 
 | 
import com.doumee.dao.business.model.Platform; 
 | 
import com.doumee.dao.business.model.PlatformDevice; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.Collection; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 设备信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2023/11/30 15:33 
 | 
 */ 
 | 
@Service 
 | 
public class HkSyncPlatformsServiceImpl extends HkSyncBaseServiceImpl { 
 | 
  
 | 
    @Autowired 
 | 
    private PlatformMapper platformMapper; 
 | 
    @Autowired 
 | 
    private PlatformDeviceMapper platformDeviceMapper; 
 | 
  
 | 
    /** 
 | 
     * 同步海康月台数据 
 | 
     * @param param 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    @Transactional 
 | 
    public String syncPlatforms(PlatformsListRequest param){ 
 | 
        if(Constants.DEALING_HK_SYNCPLATFORM){ 
 | 
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "同步任务正在执行哦,请稍后查看结果!") ; 
 | 
        } 
 | 
        Constants.DEALING_HK_SYNCPLATFORM =true; 
 | 
        try { 
 | 
            List<Platform> deleteList = new ArrayList<>(); 
 | 
            List<Platform> addList = new ArrayList<>(); 
 | 
            List<Platform> editList = new ArrayList<>(); 
 | 
            List<PlatformDevice> deviceList = new ArrayList<>(); 
 | 
            Date date = new Date(); 
 | 
            //查询全部门禁设备数据 
 | 
            List<Platform> allList = platformMapper.selectList(null); 
 | 
            List<PlatformListInfoResponse> allHkList = getAllHkList(param); 
 | 
            /** 
 | 
             * 获取增删改数据集合 
 | 
             */ 
 | 
            getDataChangeList(allList,allHkList,addList,deviceList,editList,deleteList,date); 
 | 
            if(deleteList.size()>0){ 
 | 
                //逻辑删除 
 | 
                for(Platform d : deleteList){ 
 | 
                    platformMapper.updateById(d); 
 | 
                } 
 | 
            } 
 | 
            if(deviceList.size()>0){ 
 | 
                platformDeviceMapper.insert(deviceList); 
 | 
            } 
 | 
            if(editList.size()>0){ 
 | 
                for(Platform d : editList){ 
 | 
                    platformMapper.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_SYNCPLATFORM =false; 
 | 
        } 
 | 
    } 
 | 
    @Override 
 | 
//    @Async 
 | 
    public String getPlatformStatus(PlatformStatusRequest param){ 
 | 
        if(Constants.DEALING_HK_SYNCPLATFORM_STATUS){ 
 | 
            return null; 
 | 
        } 
 | 
        Constants.DEALING_HK_SYNCPLATFORM_STATUS =true; 
 | 
        try { 
 | 
            List<Device> editList = new ArrayList<>(); 
 | 
            Date date = new Date(); 
 | 
            //查询全部门禁设备数据 
 | 
            List<PlatformStatusInfoResponse> allHkList = getAllHKStatusList(param); 
 | 
  
 | 
            if(allHkList.size()>0){ 
 | 
                //更新状态 (月台状态 0-无车 1-有车 2-超时停靠 3-错误停靠) 
 | 
                for(PlatformStatusInfoResponse d : allHkList){ 
 | 
                    platformMapper.update(null,new UpdateWrapper<Platform>().lambda() 
 | 
                            .set(Platform::getPlatformStatus,d.getStatus()) 
 | 
                            .set(Platform::getEditDate,date) 
 | 
                            .eq(Platform::getHkId,d.getPlatformId())); 
 | 
                } 
 | 
            } 
 | 
        }catch (Exception e){ 
 | 
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "同步设备状态失败!"); 
 | 
        }finally { 
 | 
            Constants.DEALING_HK_SYNCPLATFORM_STATUS =false; 
 | 
        } 
 | 
        return "同步成功"; 
 | 
    } 
 | 
  
 | 
    private List<PlatformListInfoResponse> getAllHkList(PlatformsListRequest param) { 
 | 
        BaseResponse<BaseListPageResponse<PlatformListInfoResponse>> response = HKService.platformsList(param); 
 | 
        if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) || response.getData() ==null){ 
 | 
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); 
 | 
        } 
 | 
  
 | 
        return response.getData().getList(); 
 | 
    } 
 | 
  
 | 
    public  List<PlatformStatusInfoResponse>  getAllHKStatusList(PlatformStatusRequest param){ 
 | 
            //分页遍历循环查询所有门禁设备数据 
 | 
            BaseResponse<BaseListPageResponse<PlatformStatusInfoResponse>> response = HKService.platformStatus(param); 
 | 
            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) || response.getData() ==null){ 
 | 
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); 
 | 
            } 
 | 
          return  response.getData().getList(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    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<Platform> allList, 
 | 
                                   List<PlatformListInfoResponse> allHkList, 
 | 
                                   List<Platform> addList , 
 | 
                                   List<PlatformDevice> deviceList, 
 | 
                                   List<Platform> editList, 
 | 
                                   List<Platform> deleteList, Date date) { 
 | 
        if(allHkList!=null && allHkList.size()>0){ 
 | 
            //获取海康全部门禁组数据 
 | 
            for(PlatformListInfoResponse device : allHkList){ 
 | 
                Platform model = getExistedDevice(device,allList); 
 | 
                if(model !=null){ 
 | 
                    //如果已存在,则更新数据 
 | 
                    model =  initDataByHkData(model,device,date); 
 | 
                    editList.add(model); 
 | 
                    //清空监控点数据 
 | 
                    platformDeviceMapper.delete(new UpdateWrapper<PlatformDevice>().lambda() 
 | 
                            .eq(PlatformDevice::getPlatformId,model.getId())); 
 | 
                    deviceList.addAll(getCameraList(device.getCameras(),model)); 
 | 
                }else{ 
 | 
                    //如果不存在,则新增数据 
 | 
                    model = new Platform(); 
 | 
                    model =  initDataByHkData(model,device,date); 
 | 
                    platformMapper.insert(model); 
 | 
                    addList.add(model); 
 | 
                    deviceList.addAll(getCameraList(device.getCameras(),model)); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        //判断获取删除的门禁设备,逻辑删除 
 | 
        getDeleteList(allList,allHkList,deleteList,date); 
 | 
    } 
 | 
  
 | 
    private List<PlatformDevice> getCameraList(List<PlatformCameraInfoResponse> cameras, Platform model) { 
 | 
        List<PlatformDevice> list = new ArrayList<>(); 
 | 
        if(cameras!=null || cameras.size()>0){ 
 | 
            for(PlatformCameraInfoResponse param :cameras){ 
 | 
                PlatformDevice d = new PlatformDevice(); 
 | 
                d.setCreateDate(model.getCreateDate()); 
 | 
                d.setPlatformId(model.getId()); 
 | 
                d.setIsdeleted(Constants.ZERO); 
 | 
                d.setDeviceId(param.getCameraIdompan()); 
 | 
                d.setName(param.getCameraName()); 
 | 
                d.setType(Constants.ONE); 
 | 
                list.add(d); 
 | 
            } 
 | 
        } 
 | 
        return list; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 初始化海康入库数据 
 | 
     * @param model 
 | 
     * @param device 
 | 
     * @param date 
 | 
     * @return 
 | 
     */ 
 | 
    private Platform initDataByHkData(Platform model, PlatformListInfoResponse device,Date date ) { 
 | 
        model.setIsdeleted(Constants.ZERO); 
 | 
        model.setCreateDate(date); 
 | 
        model.setHkDate(date); 
 | 
        model.setHkId(device.getPlatformId()); 
 | 
        model.setCreateDate(DateUtil.getISO8601DateByStr(device.getCreateTime())); 
 | 
        model.setName(device.getPlatformName()); 
 | 
        model.setCompanys(device.getCompanyNames()); 
 | 
        model.setAngle(device.getAngle()); 
 | 
        model.setXpos(device.getX()); 
 | 
        model.setYpos(device.getY()); 
 | 
        model.setWidth(device.getWidth()); 
 | 
        model.setHeight(device.getHeight()); 
 | 
        model.setRemark(JSONObject.toJSONString(device)); 
 | 
        return  model; 
 | 
    } 
 | 
  
 | 
    private Platform getExistedDevice(PlatformListInfoResponse device, List<Platform> allList) { 
 | 
        if(allList.size()>0){ 
 | 
            for(Platform r : allList){ 
 | 
                if(StringUtils.equals(r.getHkId(), device.getPlatformId())){ 
 | 
                    //表示未删除 
 | 
                    return  r; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
  
 | 
    private void getDeleteList(List<Platform> allList, List<PlatformListInfoResponse> allHkList,List<Platform> deleteList ,Date date) { 
 | 
        if(allList!=null && allList.size()>0){ 
 | 
            for(Platform device : allList){ 
 | 
                if(isDeletedData(device,allHkList)){ 
 | 
                    device.setIsdeleted(Constants.ONE); 
 | 
                    device.setEditDate(date); 
 | 
                    deleteList.add(device); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    private boolean isDeletedData(Platform device, List<PlatformListInfoResponse> allHkList) { 
 | 
        if(allHkList.size()>0){ 
 | 
            for(PlatformListInfoResponse r : allHkList){ 
 | 
                if(StringUtils.equals(device.getHkId(), r.getPlatformId())){ 
 | 
                    //表示未删除 
 | 
                    return  false; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  true; 
 | 
  
 | 
    } 
 | 
  
 | 
} 
 |