랜드 정보 조회

This commit is contained in:
2025-03-06 11:56:53 +09:00
parent 7c103cbba1
commit 4f1a26ca96
6 changed files with 180 additions and 24 deletions

View File

@@ -3,6 +3,7 @@ package com.caliverse.admin.domain.service;
import com.caliverse.admin.domain.dao.admin.LandMapper;
import com.caliverse.admin.domain.datacomponent.MetaDataHandler;
import com.caliverse.admin.domain.entity.*;
import com.caliverse.admin.dynamodb.domain.atrrib.LandAttrib;
import com.caliverse.admin.dynamodb.domain.atrrib.LandAuctionHighestBidUserAttrib;
import com.caliverse.admin.dynamodb.domain.atrrib.LandAuctionRegistryAttrib;
import com.caliverse.admin.domain.entity.metadata.MetaBuildingData;
@@ -11,9 +12,11 @@ import com.caliverse.admin.domain.request.LandRequest;
import com.caliverse.admin.domain.response.LandResponse;
import com.caliverse.admin.dynamodb.service.DynamodbLandAuctionService;
import com.caliverse.admin.dynamodb.service.DynamodbLandService;
import com.caliverse.admin.dynamodb.service.DynamodbUserService;
import com.caliverse.admin.global.common.code.CommonCode;
import com.caliverse.admin.global.common.code.ErrorCode;
import com.caliverse.admin.global.common.code.SuccessCode;
import com.caliverse.admin.global.common.constants.CommonConstants;
import com.caliverse.admin.global.common.constants.MysqlConstants;
import com.caliverse.admin.global.common.utils.CommonUtils;
import com.caliverse.admin.history.service.MysqlHistoryLogService;
@@ -26,11 +29,12 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestParam;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.time.format.DateTimeParseException;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import static com.caliverse.admin.global.common.utils.CommonUtils.convertIsoByDatetime;
@Service
@RequiredArgsConstructor
@Slf4j
@@ -39,6 +43,7 @@ public class LandService {
// private final DynamoDBService dynamoDBService;
private final DynamodbLandAuctionService dynamodbLandAuctionService;
private final DynamodbLandService dynamodbLandService;
private final DynamodbUserService dynamodbUserService;
private final LandMapper landMapper;
private final MetaDataHandler metaDataHandler;
@@ -46,7 +51,113 @@ public class LandService {
private final ObjectMapper objectMapper;
private final MysqlHistoryLogService mysqlHistoryLogService;
// 랜드 정보 조회
public LandResponse getLandInfo(@RequestParam Map<String, String> requestParam){
String searchType = requestParam.getOrDefault("land_type", "ID");
String searchData = requestParam.getOrDefault("land_data", "");
String landSize = requestParam.getOrDefault("land_size", "ALL");
String category = requestParam.getOrDefault("category", "ALL");
String status = requestParam.getOrDefault("status", "ALL");
String startDt = requestParam.getOrDefault("start_dt", "");
String endDt = requestParam.getOrDefault("end_dt", "");
int page = Integer.parseInt(requestParam.getOrDefault("page_no", "1"));
int size = Integer.parseInt(requestParam.getOrDefault("page_size", "50"));
String orderBy = requestParam.getOrDefault("orderby", "DESC");
List<MetaLandData> landData = metaDataHandler.getMetaLandListData();
List<MetaBuildingData> buildingData = metaDataHandler.getMetaBuildingListData();
List<LandInfo> list = landData.stream()
//필터 전처리(map 처리속도를 최대한 빠르게하기 위해서 먼저 필터 처리할수 있는건 한다)
.filter(info -> {
boolean result = true;
if (!searchData.isEmpty()) {
if (searchType.equals("ID")) {
String landIdStr = String.valueOf(info.getLandId());
result = landIdStr.contains(searchData);
} else if (searchType.equals("NAME")) {
String landName = metaDataHandler.getTextStringData(info.getLandName());
result = landName.contains(searchData);
}
}
if (!landSize.equals("ALL")) {
result = info.getLandSize().contains(landSize);
}
return result;
})
.map(data -> buildLandInfo(data, buildingData))
.filter(info -> {
boolean result = true;
return result;
})
.sorted(orderBy.equals("DESC") ?
Comparator.comparing(LandInfo::getLandId).reversed() :
Comparator.comparing(LandInfo::getLandId))
.toList();
// 페이징 처리
int totalItems = list.size();
int totalPages = (int) Math.ceil((double) totalItems / size);
page = (totalItems > 0 && page >= totalPages) ? totalPages - 1 : page;
List<LandInfo> pagedList = (totalItems == 0) ?
new ArrayList<>() :
list.subList(page * size, Math.min((page * size) + size, totalItems));
return LandResponse.builder()
.resultData(LandResponse.ResultData.builder()
.landInfoList(pagedList)
.total(pagedList.size())
.totalAll(totalItems)
.pageNo(requestParam.get("page_no")!=null?
Integer.parseInt(requestParam.get("page_no")):1)
.build())
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.build();
}
private LandInfo buildLandInfo(MetaLandData data, List<MetaBuildingData> buildingData){
int landId = data.getLandId();
LandAttrib land = dynamodbLandService.getLandInfo(landId);
String ownerGuid = land == null ? "" : land.getOwnerUserGuid();
String ownerName = data.getEditor().equals(CommonConstants.CALIVERSE_CODE) ? CommonConstants.CALIVERSE_NAME :
ownerGuid.isEmpty() ? "" : dynamodbUserService.getGuidByName(ownerGuid);
String ownerDate = ownerGuid.isEmpty() ? null : dynamodbLandService.getLandOwnerCreateDate(ownerGuid, landId); //랜드 소유 일자
int buildingSocket = buildingData.stream()
.filter(building -> building.getBuildingId().equals(data.getBuildingId()))
.findFirst().get()
.getInstanceSocket();
String parsedDate = null;
if (ownerDate != null && !ownerDate.isEmpty()) {
try {
parsedDate = convertIsoByDatetime(ownerDate);
} catch (DateTimeParseException e) {
log.warn("owner_date parsing fail: " + ownerDate, e);
}
}
return LandInfo.builder()
.id((long)landId)
.landId(landId)
.landName(metaDataHandler.getTextStringData(data.getLandName()))
.landDesc(metaDataHandler.getTextStringData(data.getLandDesc()))
.nonAuction(data.isNonAuction())
.landSize(data.getLandSize())
.landType(data.getLandType())
.socket(buildingSocket)
.ownerUserGuid(ownerGuid)
.ownerUserNickname(ownerName)
.ownerUserCreateDate(parsedDate)
.build();
}
// 랜드 메타데이터 정보 조회
public LandResponse getLandList(){
List<MetaLandData> landData = metaDataHandler.getMetaLandListData();
List<LandResponse.Land> landList = landData.stream()
@@ -62,7 +173,9 @@ public class LandService {
.type(data.getLandType())
.buildingId(data.getBuildingId())
.build()
).toList();
)
.sorted(Comparator.comparing(LandResponse.Land::getId))
.toList();
return LandResponse.builder()
.resultData(LandResponse.ResultData.builder()
@@ -214,22 +327,6 @@ public class LandService {
dynamodbLandAuctionService.insertLandAuctionRegistryWithActivity(landRequest);
//로그 기록
try{
JSONObject jsonObject = new JSONObject();
jsonObject.put("land_id", landRequest.getLandId());
jsonObject.put("auction_seq", landRequest.getAuctionSeq());
jsonObject.put("start_price", landRequest.getStartPrice());
jsonObject.put("recv_start_dt", landRequest.getResvStartDt());
jsonObject.put("recv_end_dt", landRequest.getResvEndDt());
jsonObject.put("auction_start_dt", landRequest.getAuctionStartDt());
jsonObject.put("auction_end_dt", landRequest.getAuctionEndDt());
jsonObject.put("message_list", map);
historyService.setLog(HISTORYTYPE.LAND_AUCTION_ADD, jsonObject);
}catch(Exception e){
log.error("history log Save Fail: {}", e.getMessage());
}
return LandResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())