package com.doumee.service.business.impl.hksync; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.doumee.biz.system.SystemDictDataBiz; 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.PlatformDeviceMapper; import com.doumee.dao.business.PlatformJobMapper; 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 com.doumee.dao.business.model.PlatformJob; import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; /** * 设备信息表Service实现 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service public class HkSyncPlatformsServiceImpl extends HkSyncBaseServiceImpl { @Autowired private PlatformMapper platformMapper; @Autowired private PlatformJobMapper platformJobMapper; @Autowired private PlatformDeviceMapper platformDeviceMapper; @Autowired @Lazy private SystemDictDataBiz systemDictDataBiz; /** * 同步海康月台数据 * @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 deleteList = new ArrayList<>(); List addList = new ArrayList<>(); List editList = new ArrayList<>(); List deviceList = new ArrayList<>(); Date date = new Date(); //查询全部门禁设备数据 List allList = platformMapper.selectList(new QueryWrapper().lambda().eq(Platform::getIsdeleted,Constants.ZERO)); List allHkList = getAllHkList(param); /** * 获取增删改数据集合 */ getDataChangeList(allList,allHkList,addList,deviceList,editList,deleteList,date); if(deleteList.size()>0){ //逻辑删除 List platIds = new ArrayList<>(); for(Platform d : deleteList){ platformMapper.updateById(d); platIds.add(d.getId()); } //更新删除的月台信息删正在执行的作业状态为【待签到】状态 platformJobMapper.update(null, new UpdateWrapper().lambda() .eq(PlatformJob::getIsdeleted,Constants.ZERO) .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.WART_SIGN_IN.getKey() ,Constants.PlatformJobStatus.WAIT_CONFIRM.getKey() ,Constants.PlatformJobStatus.DONE.getKey() ,Constants.PlatformJobStatus.LEAVED.getKey() ,Constants.PlatformJobStatus.CANCEL.getKey() ) .in(PlatformJob::getPlatformId,platIds) .set(PlatformJob::getPlatformId,null) .set(PlatformJob::getPlatforms,null) .set(PlatformJob::getStatus,Constants.PlatformJobStatus.WART_SIGN_IN.getKey()) ); } 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 editList = new ArrayList<>(); Date date = new Date(); //查询全部门禁设备数据 List allHkList = getAllHKStatusList(param); if(allHkList.size()>0){ //更新状态 (月台状态 0-无车 1-有车 2-超时停靠 3-错误停靠) for(PlatformStatusInfoResponse d : allHkList){ platformMapper.update(null,new UpdateWrapper().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 getAllHkList(PlatformsListRequest param) { BaseResponse> 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 getAllHKStatusList(PlatformStatusRequest param){ //分页遍历循环查询所有门禁设备数据 BaseResponse> 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 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 allList, List allHkList, List addList , List deviceList, List editList, List 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().lambda() .eq(PlatformDevice::getPlatformId,model.getId()) .eq(PlatformDevice::getType,Constants.ONE) ); 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 getCameraList(List cameras, Platform model) { List 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.getCameraId()); 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 allList) { if(allList.size()>0){ for(Platform r : allList){ if(StringUtils.equals(r.getHkId(), device.getPlatformId())){ //表示未删除 return r; } } } return null; } private void getDeleteList(List allList, List allHkList,List 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 allHkList) { if(allHkList.size()>0){ for(PlatformListInfoResponse r : allHkList){ if(StringUtils.equals(device.getHkId(), r.getPlatformId())){ //表示未删除 return false; } } } return true; } public List getMenuConfig(String userId){ try { List resultList= new ArrayList<>(); Map param = new HashMap<>(); param.put("userId",userId); BaseResponse result = HKService.getMenuConfig(param); if(result !=null){ if(!StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),result.getMsg()); } MenuDataResponse menuDataResponse = result.getData(); List list = menuDataResponse.getList(); if(CollectionUtils.isNotEmpty(list)){ //分别判断4个菜单 if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.afzx)).collect(Collectors.toList()).size()>Constants.ZERO){ resultList.add(0); } if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.xkzx)).collect(Collectors.toList()).size()>Constants.ZERO){ resultList.add(1); } if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.ngzx)).collect(Collectors.toList()).size()>Constants.ZERO){ resultList.add(2); } if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.jsc)).collect(Collectors.toList()).size()>Constants.ZERO){ resultList.add(3); } if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.kqgzt)).collect(Collectors.toList()).size()>Constants.ZERO){ resultList.add(4); } } return resultList; }else{ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取菜单失败!"); } }catch (Exception e){ e.printStackTrace(); } throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取菜单失败,请稍后重试!"); } }