Compare commits
5 Commits
825e393e05
...
feat/infer
| Author | SHA1 | Date | |
|---|---|---|---|
| e88ffd1260 | |||
| 533d97a573 | |||
| 3237863542 | |||
| 41b227de3f | |||
| 83e02c4498 |
@@ -11,6 +11,11 @@ import com.kamco.cd.kamcoback.gukyuin.dto.DetectMastDto.Basic;
|
||||
import com.kamco.cd.kamcoback.gukyuin.dto.DetectMastDto.DetectMastReq;
|
||||
import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GukYuinLinkableRes;
|
||||
import com.kamco.cd.kamcoback.gukyuin.service.GukYuinApiService;
|
||||
import com.kamco.cd.kamcoback.scheduler.service.GukYuinApiLabelJobService;
|
||||
import com.kamco.cd.kamcoback.scheduler.service.GukYuinApiPnuJobService;
|
||||
import com.kamco.cd.kamcoback.scheduler.service.GukYuinApiStatusJobService;
|
||||
import com.kamco.cd.kamcoback.scheduler.service.GukYuinApiStbltJobService;
|
||||
import io.swagger.v3.oas.annotations.Hidden;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.media.Content;
|
||||
@@ -38,6 +43,10 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
public class GukYuinApiController {
|
||||
|
||||
private final GukYuinApiService gukYuinApiService;
|
||||
private final GukYuinApiPnuJobService gukYuinApiPnuJobService;
|
||||
private final GukYuinApiStatusJobService gukYuinApiStatusJobService;
|
||||
private final GukYuinApiLabelJobService gukYuinApiLabelJobService;
|
||||
private final GukYuinApiStbltJobService gukYuinApiStbltJobService;
|
||||
|
||||
/** 탐지결과 등록 */
|
||||
@Operation(summary = "탐지결과 등록", description = "탐지결과 등록")
|
||||
@@ -261,7 +270,7 @@ public class GukYuinApiController {
|
||||
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
|
||||
})
|
||||
@PostMapping("/rlb/objt/{chnDtctObjtId}/lbl/{lblYn}")
|
||||
public ApiResponseDto<ChngDetectContDto.ResultPnuDto> updateChnDtctObjtLabelingYn(
|
||||
public ApiResponseDto<ChngDetectContDto.ResultLabelDto> updateChnDtctObjtLabelingYn(
|
||||
@PathVariable String chnDtctObjtId, @PathVariable String lblYn) {
|
||||
return ApiResponseDto.ok(gukYuinApiService.updateChnDtctObjtLabelingYn(chnDtctObjtId, lblYn));
|
||||
}
|
||||
@@ -297,8 +306,10 @@ public class GukYuinApiController {
|
||||
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
|
||||
})
|
||||
public ApiResponseDto<ChngDetectMastDto.RlbDtctDto> findRlbDtctList(
|
||||
@PathVariable String chnDtctId) {
|
||||
return ApiResponseDto.ok(gukYuinApiService.findRlbDtctList(chnDtctId));
|
||||
@PathVariable String chnDtctId,
|
||||
@Parameter(description = "날짜(기본은 어제 날짜)") @RequestParam(defaultValue = "20260205")
|
||||
String yyyymmdd) {
|
||||
return ApiResponseDto.ok(gukYuinApiService.findRlbDtctList(chnDtctId, yyyymmdd));
|
||||
}
|
||||
|
||||
@Operation(summary = "탐지객체 적합여부 조회 (객체별 조회)", description = "탐지객체 적합여부 조회 (객체별 조회)")
|
||||
@@ -319,4 +330,36 @@ public class GukYuinApiController {
|
||||
@PathVariable String chnDtctObjtId) {
|
||||
return ApiResponseDto.ok(gukYuinApiService.findRlbDtctObject(chnDtctObjtId));
|
||||
}
|
||||
|
||||
@Hidden
|
||||
@Operation(summary = "job test pnu", description = "job test pnu")
|
||||
@GetMapping("/job-test/pnu")
|
||||
public ApiResponseDto<Void> findGukYuinContListPnuUpdate() {
|
||||
gukYuinApiPnuJobService.findGukYuinContListPnuUpdate();
|
||||
return ApiResponseDto.ok(null);
|
||||
}
|
||||
|
||||
@Hidden
|
||||
@Operation(summary = "job test status", description = "job test status")
|
||||
@GetMapping("/job-test/status")
|
||||
public ApiResponseDto<Void> findGukYuinMastCompleteYn() {
|
||||
gukYuinApiStatusJobService.findGukYuinMastCompleteYn();
|
||||
return ApiResponseDto.ok(null);
|
||||
}
|
||||
|
||||
@Hidden
|
||||
@Operation(summary = "job test label", description = "job test label")
|
||||
@GetMapping("/job-test/label")
|
||||
public ApiResponseDto<Void> findLabelingCompleteSend() {
|
||||
gukYuinApiLabelJobService.findLabelingCompleteSend();
|
||||
return ApiResponseDto.ok(null);
|
||||
}
|
||||
|
||||
@Hidden
|
||||
@Operation(summary = "job test stblt", description = "job test stblt")
|
||||
@GetMapping("/job-test/stblt")
|
||||
public ApiResponseDto<Void> findGukYuinEligibleForSurvey() {
|
||||
gukYuinApiStbltJobService.findGukYuinEligibleForSurvey();
|
||||
return ApiResponseDto.ok(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ public class ChngDetectContDto {
|
||||
|
||||
private Integer code;
|
||||
private String message;
|
||||
private List<Boolean> result;
|
||||
private DtoPnuDetectMpng result;
|
||||
private Boolean success;
|
||||
}
|
||||
|
||||
|
||||
@@ -456,6 +456,16 @@ public class GukYuinApiService {
|
||||
Integer maxStage =
|
||||
gukyuinCoreService.findMapSheetLearnYearStage(info.getCompareYyyy(), info.getTargetYyyy());
|
||||
|
||||
// 1회차를 종료 상태로 처리하고 2회차를 보내야 함
|
||||
// 추론(learn), 학습데이터(inference) 둘 다 종료 처리
|
||||
if (maxStage > 0) {
|
||||
Long learnId =
|
||||
gukyuinCoreService.findMapSheetLearnInfoByYyyy(
|
||||
info.getCompareYyyy(), info.getTargetYyyy(), maxStage);
|
||||
gukyuinCoreService.updateMapSheetLearnGukyuinEndStatus(learnId);
|
||||
gukyuinCoreService.updateMapSheetInferenceLabelEndStatus(learnId);
|
||||
}
|
||||
|
||||
// reqDto 셋팅
|
||||
ChnDetectMastReqDto reqDto = new ChnDetectMastReqDto();
|
||||
reqDto.setCprsYr(String.valueOf(info.getCompareYyyy()));
|
||||
@@ -464,7 +474,7 @@ public class GukYuinApiService {
|
||||
reqDto.setChnDtctId(info.getUid());
|
||||
reqDto.setPathNm("/kamco-nfs/dataset/export/" + info.getUid());
|
||||
|
||||
if (Files.isDirectory(Path.of("/kamco-nfs/dataset/export/" + info.getUid()))) {
|
||||
if (!Files.isDirectory(Path.of("/kamco-nfs/dataset/export/" + info.getUid()))) {
|
||||
return new ResponseObj(
|
||||
ApiResponseCode.NOT_FOUND_DATA, "파일 경로에 회차 실행 파일이 생성되지 않았습니다. 확인 부탁드립니다.");
|
||||
}
|
||||
@@ -518,7 +528,7 @@ public class GukYuinApiService {
|
||||
return result.body();
|
||||
}
|
||||
|
||||
public ChngDetectMastDto.RlbDtctDto findRlbDtctList(String chnDtctId) {
|
||||
public ChngDetectMastDto.RlbDtctDto findRlbDtctList(String chnDtctId, String yyyymmdd) {
|
||||
|
||||
String url =
|
||||
gukyuinCdiUrl
|
||||
@@ -527,7 +537,9 @@ public class GukYuinApiService {
|
||||
+ "?reqIp="
|
||||
+ myip
|
||||
+ "&reqEpno="
|
||||
+ userUtil.getEmployeeNo();
|
||||
+ userUtil.getEmployeeNo()
|
||||
+ "&yyyymmdd="
|
||||
+ yyyymmdd;
|
||||
|
||||
ExternalCallResult<ChngDetectMastDto.RlbDtctDto> result =
|
||||
externalHttpClient.call(
|
||||
|
||||
@@ -64,4 +64,17 @@ public class GukYuinCoreService {
|
||||
public List<LabelSendDto> findLabelingCompleteSendList(LocalDate yesterday) {
|
||||
return gukYuinRepository.findLabelingCompleteSendList(yesterday);
|
||||
}
|
||||
|
||||
public Long findMapSheetLearnInfoByYyyy(
|
||||
Integer compareYyyy, Integer targetYyyy, Integer maxStage) {
|
||||
return gukYuinRepository.findMapSheetLearnInfoByYyyy(compareYyyy, targetYyyy, maxStage);
|
||||
}
|
||||
|
||||
public void updateMapSheetLearnGukyuinEndStatus(Long learnId) {
|
||||
gukYuinRepository.updateMapSheetLearnGukyuinEndStatus(learnId);
|
||||
}
|
||||
|
||||
public void updateMapSheetInferenceLabelEndStatus(Long learnId) {
|
||||
gukYuinRepository.updateMapSheetInferenceLabelEndStatus(learnId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,10 +24,12 @@ public class GukYuinStbltJobCoreService {
|
||||
|
||||
@Transactional
|
||||
public void updateGukYuinEligibleForSurvey(String resultUid, RlbDtctMastDto stbltDto) {
|
||||
String chnDtctObjtId = "";
|
||||
PnuEntity entity =
|
||||
gukYuinStbltRepository.findPnuEntityByResultUid(resultUid, stbltDto.getPnu());
|
||||
|
||||
if (entity != null) {
|
||||
chnDtctObjtId = resultUid;
|
||||
|
||||
entity.setPnuDtctId(stbltDto.getPnuDtctId());
|
||||
entity.setPnu(stbltDto.getPnu());
|
||||
@@ -66,6 +68,8 @@ public class GukYuinStbltJobCoreService {
|
||||
|
||||
entity.setCreatedDttm(ZonedDateTime.now());
|
||||
gukYuinStbltRepository.save(entity);
|
||||
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,13 +30,19 @@ public class GukYuinLabelJobRepositoryImpl implements GukYuinLabelJobRepositoryC
|
||||
public List<GeomUidDto> findYesterdayLabelingCompleteList() {
|
||||
ZoneId zone = ZoneId.of("Asia/Seoul");
|
||||
ZonedDateTime todayStart = ZonedDateTime.now(zone).toLocalDate().atStartOfDay(zone);
|
||||
ZonedDateTime tomorrowStart = todayStart.plusDays(1);
|
||||
ZonedDateTime yesterdayStart = todayStart.minusDays(1);
|
||||
|
||||
// BooleanExpression isYesterday =
|
||||
// labelingAssignmentEntity
|
||||
// .inspectStatDttm
|
||||
// .goe(yesterdayStart)
|
||||
// .and(labelingAssignmentEntity.inspectStatDttm.lt(todayStart));
|
||||
BooleanExpression isYesterday =
|
||||
labelingAssignmentEntity
|
||||
.inspectStatDttm
|
||||
.goe(yesterdayStart)
|
||||
.and(labelingAssignmentEntity.inspectStatDttm.lt(todayStart));
|
||||
.goe(todayStart)
|
||||
.and(labelingAssignmentEntity.inspectStatDttm.lt(tomorrowStart));
|
||||
|
||||
return queryFactory
|
||||
.select(
|
||||
|
||||
@@ -53,8 +53,9 @@ public class GukYuinPnuJobRepositoryImpl implements GukYuinPnuJobRepositoryCusto
|
||||
if (entity == null) {
|
||||
queryFactory
|
||||
.insert(pnuEntity)
|
||||
.columns(pnuEntity.geo.geoUid, pnuEntity.pnu, pnuEntity.createdDttm)
|
||||
.values(geoUid, pnu, ZonedDateTime.now())
|
||||
.columns(
|
||||
pnuEntity.geo.geoUid, pnuEntity.pnu, pnuEntity.createdDttm, pnuEntity.chnDtctObjtId)
|
||||
.values(geoUid, pnu, ZonedDateTime.now(), chnDtctObjtId)
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,4 +39,10 @@ public interface GukYuinRepositoryCustom {
|
||||
void updateAnalDataInferenceGeomSendDttm(Long geoUid);
|
||||
|
||||
List<LabelSendDto> findLabelingCompleteSendList(LocalDate yesterday);
|
||||
|
||||
Long findMapSheetLearnInfoByYyyy(Integer compareYyyy, Integer targetYyyy, Integer maxStage);
|
||||
|
||||
void updateMapSheetLearnGukyuinEndStatus(Long learnId);
|
||||
|
||||
void updateMapSheetInferenceLabelEndStatus(Long learnId);
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto;
|
||||
import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo;
|
||||
import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus;
|
||||
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState;
|
||||
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelMngState;
|
||||
import com.kamco.cd.kamcoback.postgres.entity.PnuEntity;
|
||||
import com.querydsl.core.types.Projections;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
@@ -204,6 +205,7 @@ public class GukYuinRepositoryImpl implements GukYuinRepositoryCustom {
|
||||
.update(mapSheetAnalInferenceEntity)
|
||||
.set(mapSheetAnalInferenceEntity.gukyuinUsed, "Y")
|
||||
.set(mapSheetAnalInferenceEntity.gukyuinApplyDttm, ZonedDateTime.now())
|
||||
.set(mapSheetAnalInferenceEntity.stage, Integer.parseInt(registRes.getChnDtctSno()))
|
||||
.where(mapSheetAnalInferenceEntity.learnId.eq(learnId))
|
||||
.execute();
|
||||
}
|
||||
@@ -283,6 +285,39 @@ public class GukYuinRepositoryImpl implements GukYuinRepositoryCustom {
|
||||
.fetch();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long findMapSheetLearnInfoByYyyy(
|
||||
Integer compareYyyy, Integer targetYyyy, Integer maxStage) {
|
||||
return queryFactory
|
||||
.select(mapSheetLearnEntity.id)
|
||||
.from(mapSheetLearnEntity)
|
||||
.where(
|
||||
mapSheetLearnEntity.compareYyyy.eq(compareYyyy),
|
||||
mapSheetLearnEntity.targetYyyy.eq(targetYyyy),
|
||||
mapSheetLearnEntity.stage.eq(maxStage))
|
||||
.fetchOne();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMapSheetLearnGukyuinEndStatus(Long learnId) {
|
||||
queryFactory
|
||||
.update(mapSheetLearnEntity)
|
||||
.set(mapSheetLearnEntity.applyStatus, GukYuinStatus.END.getId())
|
||||
.set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now())
|
||||
.where(mapSheetLearnEntity.id.eq(learnId))
|
||||
.execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMapSheetInferenceLabelEndStatus(Long learnId) {
|
||||
queryFactory
|
||||
.update(mapSheetAnalInferenceEntity)
|
||||
.set(mapSheetAnalInferenceEntity.analState, LabelMngState.FINISH.getId())
|
||||
.set(mapSheetAnalInferenceEntity.updatedDttm, ZonedDateTime.now())
|
||||
.where(mapSheetAnalInferenceEntity.learnId.eq(learnId))
|
||||
.execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status) {
|
||||
|
||||
@@ -6,6 +6,7 @@ import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntit
|
||||
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity;
|
||||
import static com.kamco.cd.kamcoback.postgres.entity.QPnuEntity.pnuEntity;
|
||||
|
||||
import com.kamco.cd.kamcoback.common.enums.ImageryFitStatus;
|
||||
import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto;
|
||||
import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctMastDto;
|
||||
import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus;
|
||||
@@ -15,6 +16,7 @@ import com.querydsl.core.types.Projections;
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.PersistenceContext;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Repository;
|
||||
@@ -44,7 +46,7 @@ public class GukYuinStbltJobRepositoryImpl implements GukYuinStbltJobRepositoryC
|
||||
.on(mapSheetAnalDataInferenceEntity.id.eq(mapSheetAnalDataInferenceGeomEntity.dataUid))
|
||||
.where(
|
||||
mapSheetLearnEntity.applyStatus.eq(GukYuinStatus.PNU_COMPLETED.getId()),
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull(),
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.gt(0),
|
||||
mapSheetAnalDataInferenceGeomEntity.fitState.isNull())
|
||||
.groupBy(mapSheetLearnEntity.id, mapSheetLearnEntity.uid, mapSheetLearnEntity.chnDtctMstId)
|
||||
.having(mapSheetAnalDataInferenceGeomEntity.geoUid.count().gt(1L))
|
||||
@@ -64,54 +66,21 @@ public class GukYuinStbltJobRepositoryImpl implements GukYuinStbltJobRepositoryC
|
||||
PnuEntity pnuEt =
|
||||
queryFactory
|
||||
.selectFrom(pnuEntity)
|
||||
.where(pnuEntity.pnu.eq(stbltDto.getPnu()), pnuEntity.chnDtctObjtId.eq(resultUid))
|
||||
.fetchOne();
|
||||
if (pnuEt != null) {
|
||||
// update
|
||||
queryFactory
|
||||
.update(pnuEntity)
|
||||
.set(pnuEntity.pnuDtctId, stbltDto.getPnuDtctId())
|
||||
.set(pnuEntity.lrmSyncYmd, stbltDto.getLrmSyncYmd())
|
||||
.set(pnuEntity.pnuSyncYmd, stbltDto.getPnuSyncYmd())
|
||||
.set(pnuEntity.mpqdNo, stbltDto.getMpqdNo())
|
||||
.set(pnuEntity.cprsYr, stbltDto.getCprsYr())
|
||||
.set(pnuEntity.crtrYr, stbltDto.getCrtrYr())
|
||||
.set(pnuEntity.chnDtctId, stbltDto.getChnDtctId())
|
||||
.set(pnuEntity.chnDtctMstId, stbltDto.getChnDtctMstId())
|
||||
.set(pnuEntity.chnDtctObjtId, stbltDto.getChnDtctObjtId())
|
||||
.set(pnuEntity.chnDtctContId, stbltDto.getChnDtctContId())
|
||||
.set(pnuEntity.chnCd, stbltDto.getChnCd())
|
||||
.set(pnuEntity.chnDtctProb, stbltDto.getChnDtctProb())
|
||||
.set(pnuEntity.bfClsCd, stbltDto.getBfClsCd())
|
||||
.set(pnuEntity.bfClsProb, stbltDto.getBfClsProb())
|
||||
.set(pnuEntity.afClsCd, stbltDto.getAfClsCd())
|
||||
.set(pnuEntity.afClsProb, stbltDto.getAfClsProb())
|
||||
.set(pnuEntity.pnuSqms, stbltDto.getPnuSqms())
|
||||
.set(pnuEntity.pnuDtctSqms, stbltDto.getPnuDtctSqms())
|
||||
.set(pnuEntity.chnDtctSqms, stbltDto.getChnDtctSqms())
|
||||
.set(pnuEntity.stbltYn, stbltDto.getStbltYn())
|
||||
.set(pnuEntity.incyCd, stbltDto.getIncyCd())
|
||||
.set(pnuEntity.incyRsnCont, stbltDto.getIncyRsnCont())
|
||||
.where(
|
||||
pnuEntity.geo.geoUid.eq(geomEntity.getGeoUid()),
|
||||
pnuEntity.chnDtctObjtId.eq(resultUid))
|
||||
.execute();
|
||||
} else {
|
||||
// insert
|
||||
}
|
||||
}
|
||||
// queryFactory
|
||||
// .update(mapSheetAnalDataInferenceGeomEntity)
|
||||
// .set(
|
||||
// mapSheetAnalDataInferenceGeomEntity.fitState,
|
||||
// stbltDto.getStbltYn().equals("Y") ? ImageryFitStatus.FIT.getId() :
|
||||
// ImageryFitStatus.UNFIT.getId())
|
||||
// .set(mapSheetAnalDataInferenceGeomEntity.fitStateDttm, ZonedDateTime.now())
|
||||
// .set(mapSheetAnalDataInferenceGeomEntity.lockYn, stbltDto.getLockYn())
|
||||
// .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(resultUid))
|
||||
// .execute();
|
||||
.where(pnuEntity.chnDtctObjtId.eq(resultUid))
|
||||
.fetchFirst();
|
||||
|
||||
// TODO
|
||||
queryFactory
|
||||
.update(mapSheetAnalDataInferenceGeomEntity)
|
||||
.set(
|
||||
mapSheetAnalDataInferenceGeomEntity.fitState,
|
||||
pnuEt.getStbltYn().equals("Y")
|
||||
? ImageryFitStatus.UNFIT.getId()
|
||||
: ImageryFitStatus.FIT.getId()) // 적합여부가 Y 이면 부적합인 것, N 이면 적합한 것이라고 함
|
||||
.set(mapSheetAnalDataInferenceGeomEntity.fitStateDttm, ZonedDateTime.now())
|
||||
.set(mapSheetAnalDataInferenceGeomEntity.lockYn, stbltDto.getLockYn())
|
||||
.where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(resultUid))
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -8,6 +8,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.QMemberEntity.memberEntity;
|
||||
|
||||
import com.kamco.cd.kamcoback.common.enums.ImageryFitStatus;
|
||||
import com.kamco.cd.kamcoback.common.enums.StatusType;
|
||||
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto;
|
||||
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.AllocateInfoDto;
|
||||
@@ -82,7 +83,9 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
|
||||
.innerJoin(mapSheetAnalDataInferenceGeomEntity)
|
||||
.on(
|
||||
mapSheetAnalDataInferenceEntity.id.eq(mapSheetAnalDataInferenceGeomEntity.dataUid),
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull(),
|
||||
// mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull(),
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.gt(0),
|
||||
mapSheetAnalDataInferenceGeomEntity.fitState.eq(ImageryFitStatus.UNFIT.getId()),
|
||||
mapSheetAnalDataInferenceGeomEntity.labelState.isNull())
|
||||
.where(
|
||||
mapSheetAnalInferenceEntity.uuid.eq(uuid),
|
||||
@@ -189,7 +192,9 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
|
||||
.innerJoin(mapSheetAnalDataInferenceGeomEntity)
|
||||
.on(
|
||||
mapSheetAnalDataInferenceEntity.id.eq(mapSheetAnalDataInferenceGeomEntity.dataUid),
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull(),
|
||||
// mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull(),
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.gt(0),
|
||||
mapSheetAnalDataInferenceGeomEntity.fitState.eq(ImageryFitStatus.UNFIT.getId()),
|
||||
mapSheetAnalDataInferenceGeomEntity.labelState.isNull())
|
||||
.where(mapSheetAnalInferenceEntity.uuid.eq(uuid))
|
||||
.fetchOne();
|
||||
@@ -380,9 +385,10 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
|
||||
mapSheetAnalDataInferenceGeomEntity.compareYyyy.eq(analEntity.getCompareYyyy()),
|
||||
mapSheetAnalDataInferenceGeomEntity.targetYyyy.eq(analEntity.getTargetYyyy()),
|
||||
mapSheetAnalDataInferenceGeomEntity.stage.eq(analEntity.getStage()),
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull()
|
||||
// mapSheetAnalDataInferenceGeomEntity.pnu.gt(0L)
|
||||
// mapSheetAnalDataInferenceGeomEntity.passYn.isFalse() //TODO:
|
||||
// mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull()
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.gt(0L),
|
||||
mapSheetAnalDataInferenceGeomEntity.fitState.eq(
|
||||
ImageryFitStatus.UNFIT.getId()) // TODO:
|
||||
// 추후 라벨링 대상 조건 수정하기
|
||||
)
|
||||
.fetchOne();
|
||||
@@ -554,11 +560,9 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
|
||||
mapSheetAnalDataInferenceGeomEntity.dataUid))
|
||||
.where(
|
||||
mapSheetAnalInferenceEntity.uuid.eq(targetUuid),
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull()
|
||||
// mapSheetAnalDataInferenceGeomEntity.pnu.gt(0L),
|
||||
// mapSheetAnalDataInferenceGeomEntity.passYn.isFalse() //TODO: 추후 라벨링
|
||||
// 대상 조건 수정하기
|
||||
)
|
||||
// mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull()
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.gt(0L),
|
||||
mapSheetAnalDataInferenceGeomEntity.fitState.eq(ImageryFitStatus.UNFIT.getId()))
|
||||
.fetchOne();
|
||||
}
|
||||
|
||||
@@ -575,8 +579,7 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
|
||||
queryFactory
|
||||
.select(labelingAssignmentEntity.count())
|
||||
.from(labelingAssignmentEntity)
|
||||
.where(
|
||||
analUidCondition, labelingAssignmentEntity.workState.in("ASSIGNED", "SKIP", "DONE"))
|
||||
.where(analUidCondition, labelingAssignmentEntity.workState.in("SKIP", "DONE"))
|
||||
.fetchOne();
|
||||
|
||||
Long skipCount =
|
||||
@@ -601,6 +604,13 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
|
||||
.where(analUidCondition, labelingAssignmentEntity.inspectState.eq("COMPLETE"))
|
||||
.fetchOne();
|
||||
|
||||
Long inspectionExcept =
|
||||
queryFactory
|
||||
.select(labelingAssignmentEntity.count())
|
||||
.from(labelingAssignmentEntity)
|
||||
.where(analUidCondition, labelingAssignmentEntity.inspectState.eq("EXCEPT"))
|
||||
.fetchOne();
|
||||
|
||||
Long inspectorCount =
|
||||
queryFactory
|
||||
.select(labelingAssignmentEntity.inspectorUid.countDistinct())
|
||||
@@ -613,6 +623,7 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
|
||||
long labelCompleted = labelingCompleted != null ? labelingCompleted : 0L;
|
||||
long inspectCompleted = inspectionCompleted != null ? inspectionCompleted : 0L;
|
||||
long skipped = skipCount != null ? skipCount : 0L;
|
||||
long inspectExcepted = inspectionExcept != null ? inspectionExcept : 0L;
|
||||
|
||||
long labelingRemaining = labelingTotal - labelCompleted - skipped;
|
||||
if (labelingRemaining < 0) {
|
||||
@@ -620,7 +631,7 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
|
||||
}
|
||||
|
||||
long inspectionTotal = labelingTotal;
|
||||
long inspectionRemaining = inspectionTotal - inspectCompleted - skipped;
|
||||
long inspectionRemaining = inspectionTotal - inspectCompleted - inspectExcepted;
|
||||
if (inspectionRemaining < 0) {
|
||||
inspectionRemaining = 0;
|
||||
}
|
||||
@@ -657,7 +668,7 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
|
||||
.inspectionStatus(inspectionStatus)
|
||||
.inspectionTotalCount(inspectionTotal)
|
||||
.inspectionCompletedCount(inspectCompleted)
|
||||
.inspectionSkipCount(skipped) // TODO
|
||||
.inspectionSkipCount(inspectExcepted)
|
||||
.inspectionRemainingCount(inspectionRemaining)
|
||||
.inspectorCount(inspectorCount != null ? inspectorCount : 0L)
|
||||
.progressRate(labelingRate)
|
||||
@@ -739,11 +750,9 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
|
||||
mapSheetAnalInferenceEntity.targetYyyy.eq(
|
||||
mapSheetAnalDataInferenceGeomEntity.targetYyyy),
|
||||
mapSheetAnalInferenceEntity.stage.eq(mapSheetAnalDataInferenceGeomEntity.stage),
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull()
|
||||
// mapSheetAnalDataInferenceGeomEntity.pnu.gt(0),
|
||||
// mapSheetAnalDataInferenceGeomEntity.passYn.isFalse() //TODO: 추후 라벨링 대상 조건
|
||||
// 수정하기
|
||||
)
|
||||
// mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull()
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.gt(0),
|
||||
mapSheetAnalDataInferenceGeomEntity.fitState.eq(ImageryFitStatus.UNFIT.getId()))
|
||||
.where(mapSheetAnalInferenceEntity.id.eq(analEntity.getId()))
|
||||
.groupBy(
|
||||
mapSheetAnalInferenceEntity.analTitle,
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.kamco.cd.kamcoback.postgres.repository.label;
|
||||
|
||||
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity;
|
||||
|
||||
import com.kamco.cd.kamcoback.common.enums.ImageryFitStatus;
|
||||
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;
|
||||
@@ -294,14 +295,14 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
|
||||
if (searchReq.getSearchVal() != null && !searchReq.getSearchVal().isEmpty()) {
|
||||
whereSubBuilder.and(
|
||||
Expressions.stringTemplate("{0}", memberEntity.userId)
|
||||
Expressions.stringTemplate("{0}", memberEntity.employeeNo)
|
||||
.likeIgnoreCase("%" + searchReq.getSearchVal() + "%")
|
||||
.or(
|
||||
Expressions.stringTemplate("{0}", memberEntity.name)
|
||||
.likeIgnoreCase("%" + searchReq.getSearchVal() + "%")));
|
||||
}
|
||||
|
||||
whereSubBuilder.and(labelingAssignmentEntity.workerUid.eq(memberEntity.userId));
|
||||
whereSubBuilder.and(labelingAssignmentEntity.workerUid.eq(memberEntity.employeeNo));
|
||||
|
||||
// 공통 조건 추출
|
||||
BooleanExpression doneStateCondition =
|
||||
@@ -344,7 +345,7 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
WorkerState.class,
|
||||
memberEntity.userRole,
|
||||
memberEntity.name,
|
||||
memberEntity.userId,
|
||||
memberEntity.employeeNo,
|
||||
assignedCnt.as("assignedCnt"),
|
||||
doneCnt.as("doneCnt"),
|
||||
skipCnt.as("skipCnt"),
|
||||
@@ -363,7 +364,10 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
.on(whereSubBuilder)
|
||||
.where(whereBuilder)
|
||||
.groupBy(
|
||||
memberEntity.userRole, memberEntity.name, memberEntity.userId, memberEntity.status)
|
||||
memberEntity.userRole,
|
||||
memberEntity.name,
|
||||
memberEntity.employeeNo,
|
||||
memberEntity.status)
|
||||
.orderBy(orderSpecifiers.toArray(new OrderSpecifier[0]))
|
||||
.offset(pageable.getOffset())
|
||||
.limit(pageable.getPageSize())
|
||||
@@ -441,14 +445,14 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
|
||||
if (searchReq.getSearchVal() != null && !searchReq.getSearchVal().isEmpty()) {
|
||||
whereSubBuilder.and(
|
||||
Expressions.stringTemplate("{0}", memberEntity.userId)
|
||||
Expressions.stringTemplate("{0}", memberEntity.employeeNo)
|
||||
.likeIgnoreCase("%" + searchReq.getSearchVal() + "%")
|
||||
.or(
|
||||
Expressions.stringTemplate("{0}", memberEntity.name)
|
||||
.likeIgnoreCase("%" + searchReq.getSearchVal() + "%")));
|
||||
}
|
||||
|
||||
whereSubBuilder.and(labelingAssignmentEntity.inspectorUid.eq(memberEntity.userId));
|
||||
whereSubBuilder.and(labelingAssignmentEntity.inspectorUid.eq(memberEntity.employeeNo));
|
||||
|
||||
// 공통 조건 추출
|
||||
BooleanExpression doneStateCondition =
|
||||
@@ -492,7 +496,7 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
WorkerState.class,
|
||||
memberEntity.userRole,
|
||||
memberEntity.name,
|
||||
memberEntity.userId,
|
||||
memberEntity.employeeNo,
|
||||
assignedCnt.as("assignedCnt"),
|
||||
doneCnt.as("doneCnt"),
|
||||
skipCnt.as("skipCnt"),
|
||||
@@ -511,7 +515,10 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
.on(whereSubBuilder)
|
||||
.where(whereBuilder)
|
||||
.groupBy(
|
||||
memberEntity.userRole, memberEntity.name, memberEntity.userId, memberEntity.status)
|
||||
memberEntity.userRole,
|
||||
memberEntity.name,
|
||||
memberEntity.employeeNo,
|
||||
memberEntity.status)
|
||||
.orderBy(orderSpecifiers.toArray(new OrderSpecifier[0]))
|
||||
.offset(pageable.getOffset())
|
||||
.limit(pageable.getPageSize())
|
||||
@@ -551,7 +558,14 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
|
||||
NumberExpression<Long> labelTotCnt =
|
||||
new CaseBuilder()
|
||||
.when(mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull())
|
||||
// .when(mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull())
|
||||
.when(
|
||||
mapSheetAnalDataInferenceGeomEntity
|
||||
.pnu
|
||||
.gt(0)
|
||||
.and(
|
||||
mapSheetAnalDataInferenceGeomEntity.fitState.eq(
|
||||
ImageryFitStatus.UNFIT.getId())))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum();
|
||||
|
||||
@@ -44,7 +44,7 @@ public class GukYuinApiLabelJobService {
|
||||
}
|
||||
|
||||
for (GeomUidDto gto : list) {
|
||||
ChngDetectContDto.ResultPnuDto dto =
|
||||
ChngDetectContDto.ResultLabelDto dto =
|
||||
gukYuinApiService.updateChnDtctObjtLabelingYn(gto.getResultUid(), "Y");
|
||||
if (dto.getSuccess()) {
|
||||
// inference_geom 에 label_send_dttm 업데이트 하기
|
||||
|
||||
@@ -36,7 +36,7 @@ public class GukYuinApiPnuJobService {
|
||||
}
|
||||
|
||||
/** 국유인 등록 완료 후, 탐지객체 조회해서 PNU 업데이트 하는 스케줄링 하루 1번 새벽 1시에 실행 */
|
||||
@Scheduled(cron = "0 * * * * *") // 0 0 1 * * *
|
||||
@Scheduled(cron = "0 0 1 * * *")
|
||||
public void findGukYuinContListPnuUpdate() {
|
||||
if (isLocalProfile()) {
|
||||
return;
|
||||
|
||||
@@ -33,7 +33,7 @@ public class GukYuinApiStatusJobService {
|
||||
}
|
||||
|
||||
/** 국유인 연동 후, 100% 되었는지 확인하는 스케줄링 매 10분마다 호출 */
|
||||
@Scheduled(cron = "0 0/10 * * * *") // 0 0/10 * * * *
|
||||
@Scheduled(cron = "0 0/10 * * * *")
|
||||
public void findGukYuinMastCompleteYn() {
|
||||
if (isLocalProfile()) {
|
||||
return;
|
||||
|
||||
@@ -6,6 +6,9 @@ import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctMastDto;
|
||||
import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus;
|
||||
import com.kamco.cd.kamcoback.gukyuin.service.GukYuinApiService;
|
||||
import com.kamco.cd.kamcoback.postgres.core.GukYuinStbltJobCoreService;
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
@@ -34,7 +37,7 @@ public class GukYuinApiStbltJobService {
|
||||
}
|
||||
|
||||
/** 국유인 연동 후, 실태조사 적합여부 확인하여 update */
|
||||
@Scheduled(cron = "0 * * * * *") // 0 0 3 * * *
|
||||
@Scheduled(cron = "0 0 3 * * *") // 0 0 3 * * *
|
||||
public void findGukYuinEligibleForSurvey() {
|
||||
if (isLocalProfile()) {
|
||||
return;
|
||||
@@ -49,7 +52,11 @@ public class GukYuinApiStbltJobService {
|
||||
|
||||
for (LearnKeyDto dto : list) {
|
||||
try {
|
||||
RlbDtctDto result = gukYuinApiService.findRlbDtctList(dto.getUid());
|
||||
String yesterday =
|
||||
LocalDate.now(ZoneId.of("Asia/Seoul"))
|
||||
.minusDays(1)
|
||||
.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
||||
RlbDtctDto result = gukYuinApiService.findRlbDtctList(dto.getUid(), yesterday);
|
||||
|
||||
if (result == null || result.getResult() == null || result.getResult().isEmpty()) {
|
||||
log.warn("[GUKYUIN] empty result chnDtctMstId={}", dto.getChnDtctMstId());
|
||||
@@ -60,6 +67,7 @@ public class GukYuinApiStbltJobService {
|
||||
String resultUid = stbltDto.getChnDtctObjtId();
|
||||
gukYuinStbltJobCoreService.updateGukYuinEligibleForSurvey(resultUid, stbltDto);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("[GUKYUIN] failed uid={}", dto.getChnDtctMstId(), e);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user