256 lines
11 KiB
Java
256 lines
11 KiB
Java
package com.caliverse.admin.domain.service;
|
|
|
|
import com.caliverse.admin.domain.datacomponent.MetaDataHandler;
|
|
import com.caliverse.admin.domain.entity.*;
|
|
import com.caliverse.admin.domain.entity.metadata.MetaBattleConfigData;
|
|
import com.caliverse.admin.domain.entity.metadata.MetaBrandData;
|
|
import com.caliverse.admin.domain.entity.metadata.MetaItemData;
|
|
import com.caliverse.admin.domain.response.BattleEventResponse;
|
|
import com.caliverse.admin.domain.response.DictionaryResponse;
|
|
import com.caliverse.admin.global.common.annotation.RequestLog;
|
|
import com.caliverse.admin.global.common.code.CommonCode;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
|
|
import java.util.Comparator;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.stream.Collectors;
|
|
|
|
@Service
|
|
@RequiredArgsConstructor
|
|
@Slf4j
|
|
public class MetaDataService {
|
|
|
|
@Autowired
|
|
private MetaDataHandler metaDataHandler;
|
|
|
|
public DictionaryResponse getBrandList(){
|
|
|
|
List<MetaBrandData> list = metaDataHandler.getMetaBrandListData();
|
|
|
|
List<MetaBrandData> items = list.stream()
|
|
.peek(data -> {
|
|
String name = metaDataHandler.getTextStringData(data.getBrandName());
|
|
data.setBrandDesc(name);
|
|
}).toList();
|
|
|
|
return DictionaryResponse.builder()
|
|
.status(CommonCode.SUCCESS.getHttpStatus())
|
|
.result(CommonCode.SUCCESS.getResult())
|
|
.resultData(DictionaryResponse.ResultData.builder()
|
|
.brandList(items)
|
|
.build()
|
|
)
|
|
.build();
|
|
}
|
|
|
|
//아이템 백과사전
|
|
@RequestLog
|
|
public DictionaryResponse getItemDictList(@RequestParam Map<String, String> requestParam){
|
|
String searchType = requestParam.get("search_type");
|
|
String searchData = requestParam.get("search_data").trim();
|
|
String largeType = requestParam.get("large_type");
|
|
String smallType = requestParam.get("small_type");
|
|
String brand = requestParam.get("brand");
|
|
String gender = requestParam.get("gender");
|
|
String orderBy = requestParam.get("orderby");
|
|
String pageNo = requestParam.get("page_no");
|
|
String pageSize = requestParam.get("page_size");
|
|
|
|
List<MetaItemData> items = metaDataHandler.getMetaItemListData();
|
|
|
|
List<ItemDict> itemDictListKo = createItemDictList(items, LANGUAGETYPE.KO, searchType, searchData, largeType, smallType, brand, gender);
|
|
List<ItemDict> itemDictListEn = createItemDictList(items, LANGUAGETYPE.EN, searchType, searchData, largeType, smallType, brand, gender);
|
|
List<ItemDict> itemDictListJa = createItemDictList(items, LANGUAGETYPE.JA, searchType, searchData, largeType, smallType, brand, gender);
|
|
|
|
int totalAll = itemDictListKo.size();
|
|
|
|
if(orderBy != null && !orderBy.isEmpty()) {
|
|
Comparator<ItemDict> comparator = null;
|
|
|
|
if(orderBy.equalsIgnoreCase("ASC")) {
|
|
comparator = Comparator.comparing(ItemDict::getItemId);
|
|
} else if(orderBy.equalsIgnoreCase("DESC")) {
|
|
comparator = Comparator.comparing(ItemDict::getItemId).reversed();
|
|
}
|
|
|
|
if(comparator != null) {
|
|
itemDictListKo = itemDictListKo.stream().sorted(comparator).toList();
|
|
itemDictListEn = itemDictListEn.stream().sorted(comparator).toList();
|
|
itemDictListJa = itemDictListJa.stream().sorted(comparator).toList();
|
|
}
|
|
}
|
|
|
|
|
|
// 페이징 처리
|
|
int currentPageNo = 1;
|
|
int currentPageSize = 10; // 기본값
|
|
|
|
if(pageNo != null && !pageNo.isEmpty()) {
|
|
try {
|
|
currentPageNo = Integer.parseInt(pageNo);
|
|
} catch(NumberFormatException e) {
|
|
currentPageNo = 1;
|
|
}
|
|
}
|
|
|
|
if(pageSize != null && !pageSize.isEmpty()) {
|
|
try {
|
|
currentPageSize = Integer.parseInt(pageSize);
|
|
} catch(NumberFormatException e) {
|
|
currentPageSize = 10;
|
|
}
|
|
}
|
|
|
|
// offset 계산
|
|
int offset = (currentPageNo - 1) * currentPageSize;
|
|
|
|
// 페이징 적용
|
|
List<ItemDict> pagedItemDictListKo = itemDictListKo.stream()
|
|
.skip(offset)
|
|
.limit(currentPageSize)
|
|
.toList();
|
|
|
|
List<ItemDict> pagedItemDictListEn = itemDictListEn.stream()
|
|
.skip(offset)
|
|
.limit(currentPageSize)
|
|
.toList();
|
|
|
|
List<ItemDict> pagedItemDictListJa = itemDictListJa.stream()
|
|
.skip(offset)
|
|
.limit(currentPageSize)
|
|
.toList();
|
|
|
|
DictionaryResponse.ItemList itemTotalList = DictionaryResponse.ItemList.builder()
|
|
.ko(pagedItemDictListKo)
|
|
.en(pagedItemDictListEn)
|
|
.ja(pagedItemDictListJa)
|
|
.build();
|
|
|
|
|
|
return DictionaryResponse.builder()
|
|
.status(CommonCode.SUCCESS.getHttpStatus())
|
|
.result(CommonCode.SUCCESS.getResult())
|
|
.resultData(DictionaryResponse.ResultData.builder()
|
|
.itemList(itemTotalList)
|
|
.totalAll(totalAll)
|
|
.total(pagedItemDictListKo.size())
|
|
.pageNo(currentPageNo)
|
|
.build()
|
|
)
|
|
.build();
|
|
}
|
|
|
|
private List<ItemDict> createItemDictList(List<MetaItemData> items, LANGUAGETYPE languageType,
|
|
String searchType, String searchData, String largeType,
|
|
String smallType, String brand, String gender) {
|
|
return items.stream()
|
|
.filter(data -> {
|
|
boolean result = true;
|
|
|
|
if(!largeType.equals("ALL")){
|
|
result = data.getLargeType().equals(largeType);
|
|
}
|
|
|
|
if(!smallType.equals("ALL")){
|
|
result = result && data.getSmallType().equals(smallType);
|
|
}
|
|
|
|
if(!brand.equals("ALL")){
|
|
result = result && data.getBrand().equals(Integer.valueOf(brand));
|
|
}
|
|
|
|
if(!gender.equals("ALL")){
|
|
result = result && data.getGender().equals(gender);
|
|
}
|
|
|
|
return result;
|
|
})
|
|
.map(item -> {
|
|
String buffName = metaDataHandler.getMetaBuffName(item.getBuffId());
|
|
String brandName = metaDataHandler.getMetaBrandName(item.getBrand());
|
|
String randomGroupAttribName = metaDataHandler.getMetaAttribData(item.getAttributeRandomGroupId());
|
|
String itemSetName = metaDataHandler.getMetaItemSetName(item.getItemSetId());
|
|
Integer gachaGroupId = metaDataHandler.getMetaGachaGroupId(item.getGachaGroupId());
|
|
String webLink = metaDataHandler.getMetaWebLinkData(item.getProductLink(), languageType);
|
|
String currencySellName = metaDataHandler.getMetaCurrencyName(item.getSellId());
|
|
String currencyBuyName = metaDataHandler.getMetaCurrencyName(item.getBuyId());
|
|
|
|
ItemDict.Country country = ItemDict.Country.builder()
|
|
.maxCount(item.getMaxCount())
|
|
.stackMaxCount(item.getStackMaxCount())
|
|
.build();
|
|
|
|
ItemDict.Attrib attrib = ItemDict.Attrib.builder()
|
|
.rarity(item.getRarity())
|
|
.defaultAttrib(item.getDefaultAttribute())
|
|
.attribRandomGroup(randomGroupAttribName)
|
|
.itemSet(metaDataHandler.getTextStringData(itemSetName, languageType))
|
|
.buff(metaDataHandler.getTextStringData(buffName, languageType))
|
|
.build();
|
|
|
|
ItemDict.Expire expire = ItemDict.Expire.builder()
|
|
.expireType(item.getExpireType())
|
|
.expireStartDt(item.getExpireFixedTermStart())
|
|
.expireEndDt(item.getExpireFixedTermEnd())
|
|
.expireTimeSec(item.getExpireTimeSec())
|
|
.build();
|
|
|
|
ItemDict.Trade trade = ItemDict.Trade.builder()
|
|
.userTradable(item.getIsUserTradable())
|
|
.cartBuy(item.getIsCartNBuy())
|
|
.throwable(item.getIsThrowable())
|
|
.systemTradable(item.getIsSystemTradable())
|
|
.build();
|
|
|
|
ItemDict.Etc etc = ItemDict.Etc.builder()
|
|
.productLink(webLink)
|
|
.propSmallType(item.getPropSmallType())
|
|
.gachaGroupId(gachaGroupId)
|
|
.ugqAction(item.getUgqAction())
|
|
.linkedLand(item.getLinkedLand())
|
|
.build();
|
|
|
|
return ItemDict.builder()
|
|
.itemId(item.getItemId())
|
|
.itemName(metaDataHandler.getTextStringData(item.getName(), languageType))
|
|
.gender(item.getGender())
|
|
.typeLarge(item.getLargeType())
|
|
.typeSmall(item.getSmallType())
|
|
.brand(metaDataHandler.getTextStringData(brandName, languageType))
|
|
.sellType(metaDataHandler.getTextStringData(currencySellName, LANGUAGETYPE.KO))
|
|
.sellPrice(item.getSellPrice())
|
|
.buyType(metaDataHandler.getTextStringData(currencyBuyName, LANGUAGETYPE.KO))
|
|
.buyPrice(item.getBuyPrice())
|
|
.buyDiscountRate(item.getBuyDiscountRate())
|
|
.country(country)
|
|
.attrib(attrib)
|
|
.expire(expire)
|
|
.trade(trade)
|
|
.etc(etc)
|
|
.build();
|
|
}).filter(data -> {
|
|
boolean result = true;
|
|
|
|
if(!searchData.isEmpty()){
|
|
if(searchType.equals("NAME")){
|
|
result = data.getItemName().contains(searchData);
|
|
}
|
|
|
|
if(searchType.equals("ID")){
|
|
result = data.getItemId().toString().equals(searchData);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
})
|
|
.collect(Collectors.toList());
|
|
}
|
|
|
|
|
|
}
|