Merge pull request 'feat/demo-20251205' (#28) from feat/demo-20251205 into develop

Reviewed-on: https://kamco.gitea.gs.dabeeo.com/dabeeo/kamco-dabeeo-backoffice/pulls/28
This commit is contained in:
2025-12-01 15:21:16 +09:00

View File

@@ -10,19 +10,12 @@ import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalSttcEntity.map
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataGeomEntity;
import com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataEntity;
import com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataGeomEntity;
import com.querydsl.core.Tuple;
import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.CaseBuilder;
import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.core.types.dsl.StringExpression;
import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQueryFactory;
import java.util.List;
import java.util.stream.Collectors;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.io.geojson.GeoJsonReader;
import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;
public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
@@ -114,11 +107,15 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
public ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList(
Long analUid, String mapSheetNum) {
List<Tuple> list =
List<ChangeDetectionDto.PolygonFeature> result =
queryFactory
.select(
Expressions.stringTemplate(
"ST_AsGeoJSON(ST_Transform({0}, 4326))", mapSheetAnalDataGeomEntity.geom),
Projections.constructor(
ChangeDetectionDto.PolygonFeature.class,
Expressions.stringTemplate("{0}", "Feature"),
mapSheetAnalDataGeomEntity.geom, // polygon
Projections.constructor(
ChangeDetectionDto.PolygonProperties.class,
mapSheetAnalDataGeomEntity.id,
mapSheetAnalDataGeomEntity.area,
mapSheetAnalDataGeomEntity.compareYyyy,
@@ -126,53 +123,77 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
mapSheetAnalDataGeomEntity.classBeforeCd.toUpperCase(),
mapSheetAnalDataGeomEntity.targetYyyy,
mapSheetAnalDataGeomEntity.classAfterProb,
mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase())
.from(QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity)
mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase())))
.from(mapSheetAnalDataGeomEntity)
.innerJoin(mapSheetAnalDataEntity)
.on(mapSheetAnalDataGeomEntity.dataUid.eq(mapSheetAnalDataEntity.id))
.innerJoin(mapSheetAnalEntity)
.on(mapSheetAnalEntity.id.eq(mapSheetAnalDataEntity.analUid))
.where(
QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity.dataUid.in(
JPAExpressions.select(QMapSheetAnalDataEntity.mapSheetAnalDataEntity.id)
.from(QMapSheetAnalDataEntity.mapSheetAnalDataEntity)
.where(QMapSheetAnalDataEntity.mapSheetAnalDataEntity.analUid.eq(analUid))),
QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity.mapSheetNum.eq(
Long.valueOf(mapSheetNum)))
mapSheetAnalEntity.id.eq(analUid),
mapSheetAnalDataGeomEntity.mapSheetNum.eq(Long.valueOf(mapSheetNum)))
.fetch();
GeoJsonReader reader = new GeoJsonReader();
List<ChangeDetectionDto.PolygonFeature> result =
list.stream()
.map(
tuple -> {
String geojson = tuple.get(0, String.class);
Geometry geom;
try {
geom = reader.read(geojson);
} catch (Exception ex) {
throw new RuntimeException("GeoJSON -> Geometry 변환 실패", ex);
}
ChangeDetectionDto.PolygonProperties properties =
new ChangeDetectionDto.PolygonProperties(
tuple.get(mapSheetAnalDataGeomEntity.id).longValue(),
tuple.get(mapSheetAnalDataGeomEntity.area).doubleValue(),
tuple.get(mapSheetAnalDataGeomEntity.compareYyyy).intValue(),
tuple.get(mapSheetAnalDataGeomEntity.classBeforeProb).doubleValue(),
tuple
.get(mapSheetAnalDataGeomEntity.classBeforeCd.toUpperCase())
.toString(),
tuple.get(mapSheetAnalDataGeomEntity.targetYyyy).intValue(),
tuple.get(mapSheetAnalDataGeomEntity.classAfterProb).doubleValue(),
tuple
.get(mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase())
.toString());
return new ChangeDetectionDto.PolygonFeature("Feature", geom, properties);
})
.collect(Collectors.toList());
// List<Tuple> list =
// queryFactory
// .select(
// Expressions.stringTemplate(
// "ST_AsGeoJSON(ST_Transform({0}, 4326))", mapSheetAnalDataGeomEntity.geom),
// mapSheetAnalDataGeomEntity.id,
// mapSheetAnalDataGeomEntity.area,
// mapSheetAnalDataGeomEntity.compareYyyy,
// mapSheetAnalDataGeomEntity.classBeforeProb,
// mapSheetAnalDataGeomEntity.classBeforeCd.toUpperCase(),
// mapSheetAnalDataGeomEntity.targetYyyy,
// mapSheetAnalDataGeomEntity.classAfterProb,
// mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase())
// .from(QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity)
// .where(
// QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity.dataUid.in(
// JPAExpressions.select(QMapSheetAnalDataEntity.mapSheetAnalDataEntity.id)
// .from(QMapSheetAnalDataEntity.mapSheetAnalDataEntity)
//
// .where(QMapSheetAnalDataEntity.mapSheetAnalDataEntity.analUid.eq(analUid))),
// QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity.mapSheetNum.eq(
// Long.valueOf(mapSheetNum)))
// .fetch();
//
// GeoJsonReader reader = new GeoJsonReader();
//
// List<ChangeDetectionDto.PolygonFeature> result =
// list.stream()
// .map(
// tuple -> {
// String geojson = tuple.get(0, String.class);
// Geometry geom;
// try {
// geom = reader.read(geojson);
// } catch (Exception ex) {
// throw new RuntimeException("GeoJSON -> Geometry 변환 실패", ex);
// }
// ChangeDetectionDto.PolygonProperties properties =
// new ChangeDetectionDto.PolygonProperties(
// tuple.get(mapSheetAnalDataGeomEntity.id).longValue(),
// tuple.get(mapSheetAnalDataGeomEntity.area).doubleValue(),
// tuple.get(mapSheetAnalDataGeomEntity.compareYyyy).intValue(),
// tuple.get(mapSheetAnalDataGeomEntity.classBeforeProb).doubleValue(),
// tuple
// .get(mapSheetAnalDataGeomEntity.classBeforeCd.toUpperCase())
// .toString(),
// tuple.get(mapSheetAnalDataGeomEntity.targetYyyy).intValue(),
// tuple.get(mapSheetAnalDataGeomEntity.classAfterProb).doubleValue(),
// tuple
// .get(mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase())
// .toString());
// return new ChangeDetectionDto.PolygonFeature("Feature", geom, properties);
// })
// .collect(Collectors.toList());
ChangeDetectionDto.PolygonFeatureList polygonList = new ChangeDetectionDto.PolygonFeatureList();
polygonList.setType("FeatureCollection");
polygonList.setFeatures(result);
list.clear(); // List<Tuple> 사용 참조 해제
// list.clear(); // List<Tuple> 사용 참조 해제
return polygonList;
}
@@ -180,47 +201,70 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
@Override
public List<ChangeDetectionDto.PointFeature> getChangeDetectionPointList(
Long analUid, String mapSheetNum) {
List<Tuple> list =
queryFactory
return queryFactory
.select(
Expressions.stringTemplate(
"ST_AsGeoJSON(ST_Transform({0}, 4326))", mapSheetAnalDataGeomEntity.geomCenter),
Projections.constructor(
ChangeDetectionDto.PointFeature.class,
Expressions.stringTemplate("{0}", "Feature"),
mapSheetAnalDataGeomEntity.geomCenter, // point
Projections.constructor(
ChangeDetectionDto.PointProperties.class,
mapSheetAnalDataGeomEntity.id,
mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase())
mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase())))
.from(mapSheetAnalDataGeomEntity)
.innerJoin(mapSheetAnalDataEntity)
.on(mapSheetAnalDataGeomEntity.dataUid.eq(mapSheetAnalDataEntity.id))
.innerJoin(mapSheetAnalEntity)
.on(mapSheetAnalEntity.id.eq(mapSheetAnalDataEntity.analUid))
.where(
mapSheetAnalDataGeomEntity.dataUid.in(
JPAExpressions.select(mapSheetAnalDataEntity.id)
.from(mapSheetAnalDataEntity)
.where(mapSheetAnalDataEntity.analUid.eq(analUid))),
mapSheetAnalEntity.id.eq(analUid),
mapSheetAnalDataGeomEntity.mapSheetNum.eq(Long.valueOf(mapSheetNum)))
.fetch();
GeoJsonReader reader = new GeoJsonReader();
List<ChangeDetectionDto.PointFeature> result =
list.stream()
.map(
tuple -> {
String geojson = tuple.get(0, String.class);
Geometry geom;
try {
geom = reader.read(geojson);
} catch (Exception ex) {
throw new RuntimeException("GeoJSON -> Geometry 변환 실패", ex);
}
Long geoUid = tuple.get(mapSheetAnalDataGeomEntity.id).longValue();
String classCd =
tuple.get(mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase()).toString();
return new ChangeDetectionDto.PointFeature(
"Feature", geom, new ChangeDetectionDto.PointProperties(geoUid, classCd));
})
.collect(Collectors.toList());
list.clear(); // List<Tuple> 사용 참조 해제
return result;
// List<Tuple> list =
// queryFactory
// .select(
// Expressions.stringTemplate(
// "ST_AsGeoJSON(ST_Transform({0}, 4326))",
// mapSheetAnalDataGeomEntity.geomCenter),
// mapSheetAnalDataGeomEntity.id,
// mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase())
// .from(mapSheetAnalDataGeomEntity)
// .where(
// mapSheetAnalDataGeomEntity.dataUid.in(
// JPAExpressions.select(mapSheetAnalDataEntity.id)
// .from(mapSheetAnalDataEntity)
// .where(mapSheetAnalDataEntity.analUid.eq(analUid))),
// mapSheetAnalDataGeomEntity.mapSheetNum.eq(Long.valueOf(mapSheetNum)))
// .fetch();
//
// GeoJsonReader reader = new GeoJsonReader();
// List<ChangeDetectionDto.PointFeature> result =
// list.stream()
// .map(
// tuple -> {
// String geojson = tuple.get(0, String.class);
// Geometry geom;
// try {
// geom = reader.read(geojson);
// } catch (Exception ex) {
// throw new RuntimeException("GeoJSON -> Geometry 변환 실패", ex);
// }
//
// Long geoUid = tuple.get(mapSheetAnalDataGeomEntity.id).longValue();
// String classCd =
//
// tuple.get(mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase()).toString();
//
// return new ChangeDetectionDto.PointFeature(
// "Feature", geom, new ChangeDetectionDto.PointProperties(geoUid,
// classCd));
// })
// .collect(Collectors.toList());
//
// list.clear(); // List<Tuple> 사용 참조 해제
//
// return result;
}
@Override