diff --git a/src/main/java/com/kamco/cd/kamcoback/common/enums/ImageryFitStatus.java b/src/main/java/com/kamco/cd/kamcoback/common/enums/ImageryFitStatus.java new file mode 100644 index 00000000..c5f3aa20 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/common/enums/ImageryFitStatus.java @@ -0,0 +1,26 @@ +package com.kamco.cd.kamcoback.common.enums; + +import com.kamco.cd.kamcoback.common.utils.enums.CodeExpose; +import com.kamco.cd.kamcoback.common.utils.enums.EnumType; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@CodeExpose +@Getter +@AllArgsConstructor +public enum ImageryFitStatus implements EnumType { + FIT("적합"), + UNFIT("부적합"); + + private final String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java index 1a358bd2..4f4f4413 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java @@ -305,6 +305,8 @@ public class InferenceDetailDto { Long mapSheetNum; String mapSheetName; String subUid; + String pnu; + String passYn; // @JsonIgnore String gemoStr; // @JsonIgnore String geomCenterStr; @@ -323,7 +325,9 @@ public class InferenceDetailDto { Double classAfterProb, Long mapSheetNum, String mapSheetName, - String subUid) { + String subUid, + String pnu, + String passYn) { this.uuid = uuid; this.uid = uid; this.compareYyyy = compareYyyy; @@ -338,20 +342,8 @@ public class InferenceDetailDto { this.mapSheetNum = mapSheetNum; this.mapSheetName = mapSheetName; this.subUid = subUid; - // this.gemoStr = gemoStr; - // this.geomCenterStr = geomCenterStr; - // - // ObjectMapper mapper = new ObjectMapper(); - // JsonNode geomJson; - // JsonNode geomCenterJson; - // try { - // geomJson = mapper.readTree(gemoStr); - // geomCenterJson = mapper.readTree(geomCenterStr); - // } catch (JsonProcessingException e) { - // throw new RuntimeException(e); - // } - // this.gemo = geomJson; - // this.geomCenter = geomCenterJson; + this.pnu = pnu; + this.passYn = passYn; } } diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java index e5eb4a0a..f6920397 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java @@ -178,6 +178,12 @@ public class InferenceResultDto { @Schema(description = "uid") private String uid; + @Schema(description = "uid 앞 8자리") + @JsonProperty("subUid") + public String subUid() { + return this.uid.substring(0, 8).toUpperCase(); + } + @Schema(description = "상태명") @JsonProperty("statusName") public String statusName() { diff --git a/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelWorkDto.java b/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelWorkDto.java index 03280382..89d569d4 100644 --- a/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelWorkDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelWorkDto.java @@ -62,6 +62,10 @@ public class LabelWorkDto { private Long inspectorRemainCnt; private ZonedDateTime projectCloseDttm; + private String resultUid; + private String subUid; + private UUID learnUuid; + @JsonProperty("detectYear") public String getDetectYear() { if (compareYyyy == null || targetYyyy == null) { diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java index fa46471b..c08fee12 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java @@ -151,7 +151,7 @@ public class MapSheetAnalDataInferenceGeomEntity { private ZonedDateTime fileCreatedDttm; @Column(name = "pass_yn") - private Boolean passYn; + private String passYn; @Column(name = "pass_yn_dttm") private ZonedDateTime passYnDttm; diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.java new file mode 100644 index 00000000..46daada7 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.java @@ -0,0 +1,50 @@ +package com.kamco.cd.kamcoback.postgres.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import java.time.OffsetDateTime; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.ColumnDefault; + +@Getter +@Setter +@Entity +@Table(name = "tb_pnu") +public class PnuEntity { + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tb_pnu_id_gen") + @SequenceGenerator(name = "tb_pnu_id_gen", sequenceName = "tb_pnu_uid", allocationSize = 1) + @Column(name = "id", nullable = false) + private Long id; + + @NotNull + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "geo_uid", nullable = false) + private MapSheetAnalDataInferenceGeomEntity geo; + + @Size(max = 19) + @Column(name = "pnu", length = 19) + private String pnu; + + @Column(name = "created_dttm") + private OffsetDateTime createdDttm; + + @Column(name = "created_uid") + private Long createdUid; + + @ColumnDefault("false") + @Column(name = "del_yn") + private Boolean delYn; +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearn5kRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearn5kRepositoryImpl.java index 78c1cd70..99f07ea0 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearn5kRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearn5kRepositoryImpl.java @@ -1,8 +1,10 @@ package com.kamco.cd.kamcoback.postgres.repository.Inference; +import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx50kEntity.mapInkx50kEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity.mapInkx5kEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearn5kEntity.mapSheetLearn5kEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; +import static com.querydsl.jpa.JPAExpressions.select; import com.kamco.cd.kamcoback.scheduler.dto.JobStatusDto; import com.querydsl.core.BooleanBuilder; @@ -10,7 +12,6 @@ import com.querydsl.core.types.dsl.BooleanPath; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.NumberPath; import com.querydsl.core.types.dsl.StringPath; -import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; import java.util.UUID; @@ -55,7 +56,7 @@ public class MapSheetLearn5kRepositoryImpl implements MapSheetLearn5kRepositoryC } var learnIdSubQuery = - JPAExpressions.select(mapSheetLearnEntity.id) + select(mapSheetLearnEntity.id) .from(mapSheetLearnEntity) .where(mapSheetLearnEntity.uuid.eq(uuid)); @@ -102,7 +103,7 @@ public class MapSheetLearn5kRepositoryImpl implements MapSheetLearn5kRepositoryC } var learnIdSubQuery = - JPAExpressions.select(mapSheetLearnEntity.id) + select(mapSheetLearnEntity.id) .from(mapSheetLearnEntity) .where(mapSheetLearnEntity.uuid.eq(uuid)); @@ -201,24 +202,30 @@ public class MapSheetLearn5kRepositoryImpl implements MapSheetLearn5kRepositoryC .fetch(); } + /** + * 추론 진행 도엽 목록 + * + * @param uuid uuid + * @return + */ @Override public List getInferenceRunMapId(UUID uuid) { return queryFactory - .select(mapInkx5kEntity.mapidNm) - .from(mapSheetLearnEntity) - .innerJoin(mapSheetLearn5kEntity) - .on(mapSheetLearn5kEntity.learn.id.eq(mapSheetLearnEntity.id)) - .innerJoin(mapInkx5kEntity) - .on( - Expressions.booleanTemplate( - "function('regexp_match', {0}, '^[0-9]+$') is not null", - mapInkx5kEntity.mapidcdNo) - .and( - mapSheetLearn5kEntity.mapSheetNum.eq( - Expressions.numberTemplate( - Long.class, "cast({0} as long)", mapInkx5kEntity.mapidcdNo)))) - .where(mapSheetLearnEntity.uuid.eq(uuid)) - .groupBy(mapInkx5kEntity.mapidNm) + .select(mapInkx50kEntity.mapidNm.concat(mapInkx50kEntity.mapidcdNo)) + .from(mapInkx50kEntity) + .join(mapInkx5kEntity) + .on(mapInkx5kEntity.mapInkx50k.fid.eq(mapInkx50kEntity.fid)) + .where( + mapInkx5kEntity.mapidcdNo.in( + select( + Expressions.stringTemplate( + "CAST({0} AS text)", mapSheetLearn5kEntity.mapSheetNum)) + .from(mapSheetLearnEntity) + .join(mapSheetLearn5kEntity) + .on(mapSheetLearn5kEntity.learn.id.eq(mapSheetLearnEntity.id)) + .where(mapSheetLearnEntity.uuid.eq(uuid)))) + .groupBy(mapInkx50kEntity.mapidcdNo, mapInkx50kEntity.mapidNm) + .orderBy(mapInkx50kEntity.mapidNm.asc()) .fetch(); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java index 1d659c99..667771e1 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java @@ -7,6 +7,7 @@ import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceG import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity.mapSheetAnalInferenceEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalSttcEntity.mapSheetAnalSttcEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QPnuEntity.pnuEntity; import static com.kamco.cd.kamcoback.postgres.entity.QSystemMetricEntity.systemMetricEntity; import com.kamco.cd.kamcoback.common.exception.CustomApiException; @@ -28,6 +29,8 @@ import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.core.types.dsl.StringExpression; +import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; import java.time.OffsetDateTime; import java.util.List; @@ -415,6 +418,13 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto NumberExpression inkxNoAsLong = Expressions.numberTemplate(Long.class, "cast({0} as long)", mapInkx5kEntity.mapidcdNo); + StringExpression pnu = + Expressions.stringTemplate( + "coalesce(({0}), '')", + JPAExpressions.select(Expressions.stringTemplate("string_agg({0}, ',')", pnuEntity.pnu)) + .from(pnuEntity) + .where(pnuEntity.geo.geoUid.eq(mapSheetAnalDataInferenceGeomEntity.geoUid))); + // 4) content List content = queryFactory @@ -434,7 +444,9 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto mapInkx5kEntity.mapidNm, Expressions.stringTemplate( "substring({0} from 1 for 8)", - mapSheetAnalDataInferenceGeomEntity.resultUid))) + mapSheetAnalDataInferenceGeomEntity.resultUid), + pnu, + Expressions.nullExpression(String.class))) .from(mapSheetAnalInferenceEntity) .join(mapSheetAnalDataInferenceEntity) .on(mapSheetAnalDataInferenceEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java index 0bf68180..fd9631b6 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java @@ -381,8 +381,11 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto mapSheetAnalDataInferenceGeomEntity.compareYyyy.eq(analEntity.getCompareYyyy()), mapSheetAnalDataInferenceGeomEntity.targetYyyy.eq(analEntity.getTargetYyyy()), mapSheetAnalDataInferenceGeomEntity.stage.eq(analEntity.getStage()), - mapSheetAnalDataInferenceGeomEntity.pnu.gt(0L), - mapSheetAnalDataInferenceGeomEntity.passYn.isFalse()) + mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull() + // mapSheetAnalDataInferenceGeomEntity.pnu.gt(0L) + // mapSheetAnalDataInferenceGeomEntity.passYn.isFalse() //TODO: + // 추후 라벨링 대상 조건 수정하기 + ) .fetchOne(); } @@ -552,8 +555,11 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto mapSheetAnalDataInferenceGeomEntity.dataUid)) .where( mapSheetAnalInferenceEntity.uuid.eq(targetUuid), - mapSheetAnalDataInferenceGeomEntity.pnu.gt(0L), - mapSheetAnalDataInferenceGeomEntity.passYn.isFalse()) + mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull() + // mapSheetAnalDataInferenceGeomEntity.pnu.gt(0L), + // mapSheetAnalDataInferenceGeomEntity.passYn.isFalse() //TODO: 추후 라벨링 + // 대상 조건 수정하기 + ) .fetchOne(); } @@ -734,8 +740,11 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto mapSheetAnalInferenceEntity.targetYyyy.eq( mapSheetAnalDataInferenceGeomEntity.targetYyyy), mapSheetAnalInferenceEntity.stage.eq(mapSheetAnalDataInferenceGeomEntity.stage), - mapSheetAnalDataInferenceGeomEntity.pnu.gt(0), - mapSheetAnalDataInferenceGeomEntity.passYn.isFalse()) + mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull() + // mapSheetAnalDataInferenceGeomEntity.pnu.gt(0), + // mapSheetAnalDataInferenceGeomEntity.passYn.isFalse() //TODO: 추후 라벨링 대상 조건 + // 수정하기 + ) .where(mapSheetAnalInferenceEntity.id.eq(analEntity.getId())) .groupBy( mapSheetAnalInferenceEntity.analTitle, diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelWorkRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelWorkRepositoryImpl.java index 664a5ccc..3150d1af 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelWorkRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelWorkRepositoryImpl.java @@ -1,5 +1,7 @@ package com.kamco.cd.kamcoback.postgres.repository.label; +import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; + import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelState; import com.kamco.cd.kamcoback.label.dto.LabelWorkDto; @@ -141,7 +143,10 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom { .and( mapSheetAnalDataInferenceGeomEntity.pnu .isNotNull()) // TODO: 이노팸 연동 후 0 이상이라고 해야할 듯 - .and(mapSheetAnalDataInferenceGeomEntity.passYn.eq(Boolean.FALSE))) + // + // .and(mapSheetAnalDataInferenceGeomEntity.passYn.eq(Boolean.FALSE)) //TODO: 추후 + // 라벨링 대상 조건 수정하기 + ) .then(1L) .otherwise(0L) .sum(); @@ -225,12 +230,18 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom { new CaseBuilder() .when(mapSheetAnalInferenceEntity.inspectionClosedYn.eq("Y")) .then(mapSheetAnalInferenceEntity.updatedDttm) - .otherwise((ZonedDateTime) null))) + .otherwise((ZonedDateTime) null), + mapSheetLearnEntity.uid, + Expressions.stringTemplate( + "substring({0} from 1 for 8)", mapSheetLearnEntity.uid), + mapSheetLearnEntity.uuid)) .from(mapSheetAnalInferenceEntity) .innerJoin(mapSheetAnalDataInferenceEntity) .on(whereSubDataBuilder) .innerJoin(mapSheetAnalDataInferenceGeomEntity) .on(whereSubBuilder) + .leftJoin(mapSheetLearnEntity) + .on(mapSheetAnalInferenceEntity.learnId.eq(mapSheetLearnEntity.id)) .where(whereBuilder) .groupBy( mapSheetAnalInferenceEntity.uuid, @@ -239,7 +250,9 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom { mapSheetAnalInferenceEntity.stage, mapSheetAnalInferenceEntity.createdDttm, mapSheetAnalInferenceEntity.analState, - mapSheetAnalInferenceEntity.id) + mapSheetAnalInferenceEntity.id, + mapSheetLearnEntity.uid, + mapSheetLearnEntity.uuid) .orderBy( mapSheetAnalInferenceEntity.targetYyyy.desc(), mapSheetAnalInferenceEntity.compareYyyy.desc(), diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryImpl.java index 712dc1d8..88ec9b59 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryImpl.java @@ -591,7 +591,7 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport .afterCogUrl(afterCogUrl) .mapBox(mapBbox) .learnGeometries(learnDataList) // learnGeometry -> learnGeometries - .labelState(assignment.toDto().getWorkState()) + .workState(assignment.toDto().getWorkState()) .build(); } catch (Exception e) { diff --git a/src/main/java/com/kamco/cd/kamcoback/trainingdata/dto/TrainingDataLabelDto.java b/src/main/java/com/kamco/cd/kamcoback/trainingdata/dto/TrainingDataLabelDto.java index 65cdbb36..3f940ccd 100644 --- a/src/main/java/com/kamco/cd/kamcoback/trainingdata/dto/TrainingDataLabelDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/trainingdata/dto/TrainingDataLabelDto.java @@ -328,7 +328,7 @@ public class TrainingDataLabelDto { private List learnGeometries; @Schema(description = "라벨 상태") - private String labelState; + private String workState; } @Schema(name = "ChangeDetectionInfo", description = "변화탐지정보")