currency api 추가

This commit is contained in:
2025-06-12 14:20:13 +09:00
parent b14010f77b
commit 7e97bf9fc9
5 changed files with 241 additions and 3 deletions

View File

@@ -1,6 +1,8 @@
package com.caliverse.admin.domain.api;
import com.caliverse.admin.domain.request.LogGameRequest;
import com.caliverse.admin.domain.request.LogGenericRequest;
import com.caliverse.admin.domain.response.IndicatorsResponse;
import com.caliverse.admin.domain.response.LogResponse;
import com.caliverse.admin.domain.service.LogService;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -27,11 +29,29 @@ public class LogController {
@PostMapping("/generic/excel-export")
public void excelExport(HttpServletResponse response,
@RequestBody LogGenericRequest logGenericRequest){
logService.excelExport(response, logGenericRequest);
logService.genericExcelExport(response, logGenericRequest);
}
@GetMapping("/progress/{taskId}")
public ResponseEntity<Map<String, Object>> getProgress(@PathVariable String taskId) {
return ResponseEntity.ok().body(logService.getProgress(taskId));
}
@GetMapping("/currency/list")
public ResponseEntity<LogResponse> currencyList(
@RequestParam Map<String, String> requestParams){
return ResponseEntity.ok().body( logService.getCurrencyLogList(requestParams));
}
@GetMapping("/currency/detail/list")
public ResponseEntity<LogResponse> currencyDetailList(
@RequestParam Map<String, String> requestParams){
return ResponseEntity.ok().body( logService.getCurrencyDetailLogList(requestParams));
}
@PostMapping("/currency/detail/excel-export")
public void currencyDetailExcelExport(HttpServletResponse response,
@RequestBody LogGameRequest logGameRequest){
logService.currencyDetailExcelExport(response, logGameRequest);
}
}

View File

@@ -11,6 +11,7 @@ public enum ITEMLARGETYPE {
TATTOO,
BEAUTY,
CURRENCY,
PRODUCT
PRODUCT,
SET_BOX
;
}

View File

@@ -0,0 +1,41 @@
package com.caliverse.admin.domain.request;
import com.caliverse.admin.domain.entity.common.SearchUserType;
import com.caliverse.admin.logs.entity.LogAction;
import com.caliverse.admin.logs.entity.LogDomain;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class LogGameRequest {
@JsonProperty("search_type")
private SearchUserType searchType;
@JsonProperty("search_data")
private String searchData;
@JsonProperty("log_action")
private LogAction logAction;
@JsonProperty("log_domain")
private LogDomain logDomain;
@JsonProperty("tran_id")
private String tranId;
@JsonProperty("start_dt")
private LocalDateTime startDt;
@JsonProperty("end_dt")
private LocalDateTime endDt;
@JsonProperty("page_no")
private Integer pageNo;
@JsonProperty("page_size")
private Integer pageSize;
@JsonProperty("order_by")
private String orderBy;
private String taskId;
}

View File

@@ -1,5 +1,6 @@
package com.caliverse.admin.domain.response;
import com.caliverse.admin.Indicators.entity.CurrencyDetailLogInfo;
import com.caliverse.admin.domain.entity.log.GenericLog;
import com.caliverse.admin.logs.Indicatordomain.GenericMongoLog;
import com.fasterxml.jackson.annotation.JsonInclude;
@@ -34,6 +35,10 @@ public class LogResponse {
@JsonProperty("generic_list")
// private List<Map<String, Object>> genericList;
private List<GenericLog> genericList;
@JsonProperty("currency_list")
private List<currencyLog> currencyList;
@JsonProperty("currency_detail_list")
private List<CurrencyDetailLogInfo> currencyDetailList;
private int total;
@JsonProperty("total_all")
@@ -42,5 +47,29 @@ public class LogResponse {
private int pageNo;
}
@Data
@Builder
public static class currencyLog {
private String logDay;
private String accountId;
private String userGuid;
private String userNickname;
private Double sapphireAcquired;
private Double sapphireConsumed;
private Double sapphireNet;
private Double goldAcquired;
private Double goldConsumed;
private Double goldNet;
private Double caliumAcquired;
private Double caliumConsumed;
private Double caliumNet;
private Double beamAcquired;
private Double beamConsumed;
private Double beamNet;
private Double rubyAcquired;
private Double rubyConsumed;
private Double rubyNet;
private Integer totalCurrencies;
}
}

View File

@@ -1,16 +1,25 @@
package com.caliverse.admin.domain.service;
import com.caliverse.admin.Indicators.entity.CurrencyDetailLogInfo;
import com.caliverse.admin.Indicators.entity.CurrencyLogInfo;
import com.caliverse.admin.Indicators.entity.DauLogInfo;
import com.caliverse.admin.domain.cache.CommonCacheHandler;
import com.caliverse.admin.domain.entity.excel.ExcelBusinessLog;
import com.caliverse.admin.domain.entity.log.GenericLog;
import com.caliverse.admin.domain.request.LogGameRequest;
import com.caliverse.admin.domain.request.LogGenericRequest;
import com.caliverse.admin.domain.response.IndicatorsResponse;
import com.caliverse.admin.domain.response.LogResponse;
import com.caliverse.admin.global.common.code.CommonCode;
import com.caliverse.admin.global.common.code.ErrorCode;
import com.caliverse.admin.global.common.exception.RestApiException;
import com.caliverse.admin.global.common.utils.CommonUtils;
import com.caliverse.admin.global.common.utils.DateUtils;
import com.caliverse.admin.global.component.tracker.ExcelProgressTracker;
import com.caliverse.admin.logs.Indicatordomain.GenericMongoLog;
import com.caliverse.admin.logs.logservice.businesslogservice.BusinessLogGenericService;
import com.caliverse.admin.logs.logservice.indicators.IndicatorsCurrencyService;
import com.caliverse.admin.mongodb.dto.MongoPageResult;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -20,6 +29,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.CompletableFuture;
@@ -35,6 +45,7 @@ public class LogService {
private final ExcelService excelService;
private final CommonCacheHandler commonCacheHandler;
private final ExcelProgressTracker progressTracker;
private final IndicatorsCurrencyService indicatorsCurrencyService;
public LogResponse genericLogList(LogGenericRequest logGenericRequest){
int page = logGenericRequest.getPageNo();
@@ -197,7 +208,7 @@ public class LogService {
//
// }
public void excelExport(HttpServletResponse response, LogGenericRequest logGenericRequest){
public void genericExcelExport(HttpServletResponse response, LogGenericRequest logGenericRequest){
String taskId = logGenericRequest.getTaskId();
LocalDateTime startDt = logGenericRequest.getStartDt().plusHours(9);
LocalDateTime endDt = logGenericRequest.getEndDt().plusHours(9).plusDays(1);
@@ -291,4 +302,140 @@ public class LogService {
}
}
public LogResponse getCurrencyLogList(Map<String, String> requestParams){
String startDt = requestParams.get("start_dt");
String endDt = requestParams.get("end_dt");
List<CurrencyLogInfo> currencyLogList = indicatorsCurrencyService.getIndicatorsLogData(startDt, endDt, CurrencyLogInfo.class);
List<LogResponse.currencyLog> currencyList = new ArrayList<>();
for (CurrencyLogInfo info : currencyLogList){
LogResponse.currencyLog build = LogResponse.currencyLog.builder()
.logDay(info.getLogDay())
.accountId(info.getAccountId())
.userGuid(info.getUserGuid())
.userNickname(info.getUserNickname())
.goldAcquired(info.getGoldAcquired())
.goldConsumed(info.getGoldConsumed())
.goldNet(info.getGoldNet())
.sapphireAcquired(info.getSapphireAcquired())
.sapphireConsumed(info.getSapphireConsumed())
.sapphireNet(info.getSapphireNet())
.beamAcquired(info.getBeamAcquired())
.beamConsumed(info.getBeamConsumed())
.beamNet(info.getBeamNet())
.caliumAcquired(info.getCaliumAcquired())
.caliumConsumed(info.getCaliumConsumed())
.caliumNet(info.getCaliumNet())
.rubyAcquired(info.getRubyAcquired())
.rubyConsumed(info.getRubyConsumed())
.rubyNet(info.getRubyNet())
.totalCurrencies(info.getTotalCurrencies())
.build();
currencyList.add(build);
}
return LogResponse.builder()
.resultData(LogResponse.ResultData.builder()
.currencyList(currencyList)
.build())
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.build();
}
public LogResponse getCurrencyDetailLogList(Map<String, String> requestParams){
String searchType = requestParams.get("search_type");
String searchData = requestParams.get("search_data");
String tranId = requestParams.get("tran_id");
LocalDateTime startDt = DateUtils.stringISOToLocalDateTime(requestParams.get("start_dt"));
LocalDateTime endDt = DateUtils.stringISOToLocalDateTime(requestParams.get("end_dt"));
String orderBy = requestParams.get("orderby");
int pageNo = Integer.parseInt(requestParams.get("page_no"));
int pageSize = Integer.parseInt(requestParams.get("page_size"));
MongoPageResult<CurrencyDetailLogInfo> result = indicatorsCurrencyService.getCurrencyDetailLogData(
searchType,
searchData,
tranId,
startDt.toString().substring(0, 10),
endDt.toString().substring(0, 10),
orderBy,
pageNo,
pageSize,
CurrencyDetailLogInfo.class
);
List<CurrencyDetailLogInfo> currencyLogList = result.getItems();
int totalCount = result.getTotalCount();
return LogResponse.builder()
.resultData(LogResponse.ResultData.builder()
.currencyDetailList(currencyLogList)
.total(currencyLogList.size())
.totalAll(totalCount)
.pageNo(pageNo)
.build())
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.build();
}
public void currencyDetailExcelExport(HttpServletResponse response, LogGameRequest logGameRequest){
String taskId = logGameRequest.getTaskId();
LocalDateTime startDt = logGameRequest.getStartDt().plusHours(9);
LocalDateTime endDt = logGameRequest.getEndDt().plusHours(9).plusDays(1);
logGameRequest.setStartDt(startDt);
logGameRequest.setEndDt(endDt);
logGameRequest.setPageNo(null);
logGameRequest.setPageSize(null);
progressTracker.updateProgress(taskId, 5, 100, "엑셀 생성 준비 중...");
MongoPageResult<CurrencyDetailLogInfo> result = null;
try{
result = indicatorsCurrencyService.getCurrencyDetailLogData(
logGameRequest.getSearchType().toString(),
logGameRequest.getSearchData(),
logGameRequest.getTranId(),
startDt.toString().substring(0, 10),
endDt.toString().substring(0, 10),
logGameRequest.getOrderBy(),
logGameRequest.getPageNo(),
logGameRequest.getPageSize(),
CurrencyDetailLogInfo.class
);
progressTracker.updateProgress(taskId, 20, 100, "데이터 생성완료");
}catch(UncategorizedMongoDbException e){
if (e.getMessage().contains("Sort exceeded memory limit")) {
log.error("MongoDB Query memory limit error: {}", e.getMessage());
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.ERROR_LOG_MEMORY_LIMIT.toString());
} else if (e.getMessage().contains("time limit")) {
log.error("MongoDB Query operation exceeded time limit: {}", e.getMessage());
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.ERROR_LOG_MEMORY_LIMIT.toString());
}else {
log.error("MongoDB Query error", e);
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.ERROR_MONGODB_QUERY.toString());
}
}catch (Exception e){
log.error("currencyDetailExcelExport ExcelExport Data Search Error", e);
}
List<CurrencyDetailLogInfo> currencyLogList = result.getItems();
progressTracker.updateProgress(taskId, 30, 100, "데이터 파싱 완료...");
try{
excelService.generateExcelToResponse(
response,
currencyLogList,
"게임 재화 로그 데이터",
"sheet1",
taskId
);
}catch (Exception e){
log.error("currencyDetailExcelExport Excel Export Create Error", e);
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.ERROR_EXCEL_DOWN.toString());
}
}
}