58 lines
2.3 KiB
TypeScript
58 lines
2.3 KiB
TypeScript
import { gameData } from "../pubUtils/data";
|
||
import { DicShopListModel } from "../db/DicShopList";
|
||
import { ShopItem } from "../domain/dbGeneral";
|
||
import { ShopItemListParam } from '../domain/roleField/shop';
|
||
import { UserShopModel } from "../db/UserShop";
|
||
|
||
export async function getShopListById(shopId: number, roleId: string) {
|
||
|
||
let shopItemList = new Array<ShopItemListParam>(); // 返回
|
||
let dbDicShop = await DicShopListModel.findByShopId(shopId);
|
||
let userShopRecs = await UserShopModel.findMapByShopId(roleId, shopId);
|
||
// console.log(JSON.stringify([...userShopRecs]))
|
||
|
||
|
||
if(!dbDicShop || dbDicShop.useJson) { // 完全使用json中配置的商品,数据库只做排序用,数据库内没有的排到最后
|
||
let items = dbDicShop?.items||[];
|
||
let map = new Map<number, ShopItem>();
|
||
for(let item of items) {
|
||
map.set(item.id, item);
|
||
}
|
||
let dicShop = gameData.shop.get(shopId)||[];
|
||
for(let { id, type } of dicShop) {
|
||
let buyCount = userShopRecs.has(id)?userShopRecs.get(id).count: 0;
|
||
if(map.has(id)) {
|
||
let item = map.get(id);
|
||
let param = new ShopItemListParam(id, item.discount, type, buyCount, item.order);
|
||
shopItemList.push(param);
|
||
} else {
|
||
let param = new ShopItemListParam(id, 1, type, buyCount, 0);
|
||
shopItemList.push(param);
|
||
}
|
||
}
|
||
|
||
} else { // 只返回数据库内的商品
|
||
let items = dbDicShop?.items||[];
|
||
for(let item of items) {
|
||
let { id, order, discount } = item;
|
||
let buyCount = userShopRecs.has(id)?userShopRecs.get(id).count: 0;
|
||
let dicShop = gameData.shopItem.get(id);
|
||
if(dicShop) {
|
||
let param = new ShopItemListParam(id, discount, dicShop.type, buyCount, order);
|
||
shopItemList.push(param);
|
||
}
|
||
}
|
||
}
|
||
|
||
shopItemList = shopItemList.sort((a, b) => b.order - a.order);
|
||
return shopItemList;
|
||
}
|
||
|
||
export async function getAllShopList(roleId: string) {
|
||
let shopLists: {shopId: number, shopItemList: ShopItemListParam[]}[] = [];
|
||
for(let [ shopId ] of gameData.shopList) {
|
||
let shopItemList = await getShopListById(shopId, roleId);
|
||
shopLists.push({ shopId, shopItemList });
|
||
}
|
||
return shopLists;
|
||
} |