랜드 정보 조회

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

@@ -20,6 +20,12 @@ import java.util.Map;
@RequestMapping("/api/v1/land")
public class LandController {
private final LandService landService;
@GetMapping("/info")
public ResponseEntity<LandResponse> getLandInfoList(
@RequestParam Map<String, String> requestParam){
return ResponseEntity.ok().body( landService.getLandInfo(requestParam));
}
@GetMapping("/auction/list")
public ResponseEntity<LandResponse> getLandAuctionList(
@RequestParam Map<String, String> requestParam){

View File

@@ -0,0 +1,47 @@
package com.caliverse.admin.domain.entity;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public class LandInfo {
private Long id;
@JsonProperty("row_num")
private Integer rowNum;
@JsonProperty("land_id")
private Integer landId;
@JsonProperty("land_name")
private String landName;
@JsonProperty("land_desc")
private String landDesc;
@JsonProperty("land_size")
private String landSize;
@JsonProperty("land_type")
private String landType;
private String category;
@JsonProperty("owner_user_guid")
private String ownerUserGuid;
@JsonProperty("owner_user_nickname")
private String ownerUserNickname;
@JsonProperty("owner_user_create_date")
// private LocalDateTime ownerUserCreateDate;
private String ownerUserCreateDate;
@JsonProperty("owner_user_price")
private String ownerUserPrice;
@JsonProperty("non_auction")
private boolean nonAuction;
private Integer socket;
private Integer editor;
private String status;
private String isUpdate;
}

View File

@@ -1,6 +1,7 @@
package com.caliverse.admin.domain.response;
import com.caliverse.admin.domain.entity.LandAuction;
import com.caliverse.admin.domain.entity.LandInfo;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
@@ -35,6 +36,9 @@ public class LandResponse {
@JsonProperty("building_list")
private List<Building> buildingList;
@JsonProperty("land_info_list")
private List<LandInfo> landInfoList;
private String message;
@JsonProperty("land_list")
private List<Land> landList;

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())

View File

@@ -8,6 +8,8 @@ public class CommonConstants {
public static final int BATTLE_SERVER_WAIT_TIME = 600; // (seconds) 이벤트 홍보시간이 300초인데 여유있게 처리하게 하기위해 600으로 준다.
public static final int BATTLE_INSTANCE_ID = 1017007;
public static final String CALIUM_ITEM_CODE = "19010003";
public static final String CALIVERSE_CODE = "CALIVERSE";
public static final String CALIVERSE_NAME = "칼리버스";
public static final String FORMAT_DATE_ISO_DATETIME_MILLIS = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
public static final String FORMAT_DATE_DATETIME = "yyyy-MM-dd HH:mm:ss";

View File

@@ -107,8 +107,8 @@ public class DynamicScheduler {
map.put("id", event.getId());
if(status.equals(BattleEvent.BATTLE_STATUS.REGISTER) || status.equals(BattleEvent.BATTLE_STATUS.WAIT)){
if(!now.isBefore(todayStart) && !now.isAfter(todayEnd)){
log.info("battle event_id: {}, todayStart: {}, todayEnd: {} STATUS CHANGE RUNNING", event.getId(), todayStart, todayEnd);
if(!now.isBefore(start_dt) && (!now.isBefore(todayStart) && !now.isAfter(todayEnd))){
log.info("battle event_id: {}, start_dt: {}, todayStart: {}, todayEnd: {} STATUS CHANGE RUNNING", event.getId(), start_dt, todayStart, todayEnd);
change_status = BattleEvent.BATTLE_STATUS.RUNNING;
map.put("status", change_status);
battleEventService.updateBattleEventStatus(map);
@@ -120,7 +120,7 @@ public class DynamicScheduler {
}else{
change_status = BattleEvent.BATTLE_STATUS.WAIT;
}
log.info("battle event_id: {}, todayStart: {}, todayEnd: {} STATUS CHANGE {}", event.getId(), todayStart, todayEnd, change_status);
log.info("battle event_id: {}, start_dt: {}, end_dt: {}, todayStart: {}, todayEnd: {} STATUS CHANGE {}", event.getId(), start_dt, end_dt, todayStart, todayEnd, change_status);
map.put("status", change_status);
battleEventService.updateBattleEventStatus(map);
}