package com.lqkj.link.module.zone.service; import com.alibaba.fastjson2.JSONObject; import com.lqkj.link.module.zone.domain.GeomInfo; import com.lqkj.link.module.zone.domain.LayerInfo; import com.lqkj.link.module.zone.domain.OneZoneGeomInfos; import com.lqkj.link.module.zone.domain.ZoneInfo; import com.lqkj.link.module.zone.repository.GeomInfoRepository; import com.lqkj.link.module.zone.repository.LayerInfoRepository; import com.lqkj.link.module.zone.repository.ZoneInfoRepository; import org.apache.commons.lang3.StringUtils; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.GeometryFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; @Service public class GeomInfoService { private final GeomInfoRepository geomInfoRepository; private final ZoneInfoRepository zoneInfoRepository; private final LayerInfoRepository layerInfoRepository; public GeomInfoService(GeomInfoRepository geomInfoRepository, ZoneInfoRepository zoneInfoRepository, LayerInfoRepository layerInfoRepository) { this.geomInfoRepository = geomInfoRepository; this.zoneInfoRepository = zoneInfoRepository; this.layerInfoRepository = layerInfoRepository; } public List<GeomInfo> findAllByZoneId(Integer zoneId) { return geomInfoRepository.findAllByZoneId(zoneId); } @Transactional public void saveGeomByZone(OneZoneGeomInfos infos) { GeometryFactory geometryFactory = new GeometryFactory(); // 保存元素 if (infos.getModifyGeomList() != null && infos.getModifyGeomList().size() > 0) { for (GeomInfo geomInfo : infos.getModifyGeomList()) { geomInfo.setTrans(geomInfo.getLocation()); JSONObject pointObject = geomInfo.getLocation().getJSONObject("translation"); geomInfo.setGeom(geometryFactory.createPoint(new Coordinate( Double.parseDouble(pointObject.get("x").toString()), Double.parseDouble(pointObject.get("y").toString()), Double.parseDouble(pointObject.get("z").toString())))); if (StringUtils.isBlank(geomInfo.getLayerId())) { geomInfo.setLayerId(null); } } geomInfoRepository.saveAll(infos.getModifyGeomList()); } // 删除元素 if (infos.getDeleteGeomList() != null && infos.getDeleteGeomList().size() > 0) geomInfoRepository.deleteAllByIdInBatch(infos.getDeleteGeomList()); // 修改作品的更新时间 ZoneInfo zoneInfo = zoneInfoRepository.findById(infos.getZoneId()).get(); zoneInfo.setUpdateTime(new Date()); zoneInfo.setInitLocation(infos.getTrans()); zoneInfoRepository.save(zoneInfo); } @Transactional public void saveGeom(OneZoneGeomInfos infos) { // 保存图层 if (infos.getModifyLayerList() != null && infos.getModifyLayerList().size() > 0) { for (LayerInfo layerInfo : infos.getModifyLayerList()) { layerInfo.setZoneId(infos.getZoneId()); } layerInfoRepository.saveAll(infos.getModifyLayerList()); } // 删除图层 if (infos.getDeleteLayerList() != null && infos.getDeleteLayerList().size() > 0) layerInfoRepository.deleteAllByIdInBatch(infos.getDeleteLayerList()); saveGeomByZone(infos); } public List<GeomInfo> getNavigationInfo(Integer zoneId) { return geomInfoRepository.getNavigationInfo(zoneId); } }