game2006api/webapp/services/HashRateShopService.php
aozhiwei dad8021aa9 1
2024-10-11 11:25:46 +08:00

145 lines
5.7 KiB
PHP

<?php
namespace services;
require_once('models/HashRateShopBuyRecord.php');
require_once('mt/HashRateShop.php');
require_once('mt/Item.php');
use mt;
use phpcommon;
use models\HashRateShopBuyRecord;
class HashRateShopService {
public static function getGoodsList()
{
$goodsMetaList = mt\HashRateShop::all();
$buyRecordHash = HashRateShopBuyRecord::allToHash();
$goodsList = array();
foreach ($goodsMetaList as $goodsMeta) {
if ($goodsMeta['is_close']) {
continue;
}
if ($goodsMeta['first_time'] > myself()->_getNowTime()) {
continue;
}
$goodsDto = array(
'goods_id' => $goodsMeta['id'],
'price' => $goodsMeta['pile_price'],
'item_id' => $goodsMeta['type'],
'item_num' => $goodsMeta['item_num'],
'purchased_num' => 0,
'max_num' => $goodsMeta['limit_num'],
'count_down' => 0,
);
switch ($goodsMeta['limit_type']) {
case mt\HashRateShop::DAILY_BUY_LIMIT: {
$buyRecord = getXVal($buyRecordHash, $goodsMeta['id']);
$goodsDto['purchased_num'] = $buyRecord ? $buyRecord['this_day_buy_times'] : 0;
if ($buyRecord && $goodsDto['purchased_num'] > 0 &&
$goodsDto['purchased_num'] >= $goodsDto['max_num']) {
$goodsDto['count_down'] = myself()->_getNowDaySeconds() + 3600 * 24 - myself()->_getNowTime();
}
}
break;
case mt\HashRateShop::WEEKLY_BUY_LIMIT: {
$buyRecord = getXVal($buyRecordHash, $goodsMeta['id']);
$goodsDto['purchased_num'] = $buyRecord ? $buyRecord['this_week_buy_times'] : 0;
if ($buyRecord && $goodsDto['purchased_num'] > 0 &&
$goodsDto['purchased_num'] >= $goodsDto['max_num']) {
$goodsDto['count_down'] = myself()->_getMondaySeconds() + 3600 * 24 * 7 - myself()->_getNowTime();
}
}
break;
case mt\HashRateShop::MONTH_BUY_LIMIT: {
$buyRecord = getXVal($buyRecordHash, $goodsMeta['id']);
$goodsDto['purchased_num'] = $buyRecord ? $buyRecord['this_week_buy_times'] : 0;
}
break;
case mt\HashRateShop::TOTAL_BUY_LIMIT: {
$buyRecord = getXVal($buyRecordHash, $goodsMeta['id']);
$goodsDto['purchased_num'] = $buyRecord ? $buyRecord['total_buy_times'] : 0;
}
break;
default: {
}
break;
}
array_push($goodsList, $goodsDto);
}
return $goodsList;
}
public static function buyLimitCheck($goodsMeta, $goodsNum, &$errCode, &$errMsg)
{
if ($goodsMeta['is_close']) {
$errCode = 1;
$errMsg = 'cant buy';
return;
}
if ($goodsMeta['first_time'] > myself()->_getNowTime()) {
$errCode = 1;
$errMsg = 'cant buy';
return;
}
$errCode = 0;
$errMsg = '';
$buyRecordHash = HashRateShopBuyRecord::allToHash();
$boughtTimes = 1;
$goodsId = $goodsMeta['id'];
{
switch ($goodsMeta['limit_type']) {
case mt\HashRateShop::DAILY_BUY_LIMIT: {
$buyRecord = getXVal($buyRecordHash, $goodsId);
$boughtTimes = $buyRecord ? $buyRecord['this_day_buy_times'] + $goodsNum : 1;
if ($buyRecord && getXVal($buyRecord, 'this_day_buy_times', 0) >= $goodsMeta['limit_num']) {
$errCode = 2;
$errMsg = 'Daily purchase limit';
return false;
}
}
break;
case mt\HashRateShop::WEEKLY_BUY_LIMIT: {
$buyRecord = getXVal($buyRecordHash, $goodsId);
$boughtTimes = $buyRecord ? $buyRecord['this_week_buy_times'] + $goodsNum : 1;
if ($buyRecord && getXVal($buyRecord, 'this_week_buy_times', 0) >= $goodsMeta['limit_num']) {
$errCode = 2;
$errMsg = 'Weekly purchase limit reached';
return false;
}
}
break;
case mt\HashRateShop::MONTH_BUY_LIMIT: {
$buyRecord = getXVal($buyRecordHash, $goodsId);
$boughtTimes = $buyRecord ? $buyRecord['this_month_buy_times'] + $goodsNum : 1;
if ($buyRecord && getXVal($buyRecord, 'this_month_buy_times', 0) >= $goodsMeta['limit_num']) {
$errCode = 2;
$errMsg = 'Month purchase limit reached';
return false;
}
}
break;
case mt\HashRateShop::TOTAL_BUY_LIMIT: {
$buyRecord = getXVal($buyRecordHash, $goodsId);
$boughtTimes = $buyRecord ? $buyRecord['total_buy_times'] + $goodsNum : 1;
if ($buyRecord && getXVal($buyRecord, 'total_buy_times', 0) >= $goodsMeta['limit_num']) {
$errCode = 2;
$errMsg = 'Purchase limit reached';
return false;
}
}
break;
default: {
}
break;
}
}
return true;
}
}