This commit is contained in:
songliang 2023-06-25 15:42:03 +08:00
parent 0a24b624ab
commit 933a0c9f5c

View File

@ -44,7 +44,8 @@ use models\Transaction;
use models\BcOrder;
if (!function_exists('array_column')) {
function array_column($arr2, $column_key) {
function array_column($arr2, $column_key)
{
$data = [];
foreach ($arr2 as $arr) {
$data[] = $arr[$column_key];
@ -139,6 +140,10 @@ class ShopController extends BaseAuthedController
if (empty($goods['goods_num'])) {
$goods['goods_num'] = 1;
}
if (!empty($goods['free_type'])) {
$count = $this->countFreeBuyTimes($goods);
$goods['free_num'] = $goods['free_num'] - $count;
}
}
$this->_rspData(
@ -838,7 +843,16 @@ class ShopController extends BaseAuthedController
$desired_token_type = $row['token_type'];
$check_token_type = splitStr1($desired_token_type);
$token_pos = array_search($token_type, $check_token_type, true);
if (!in_array($token_type, $check_token_type)) {
$isFreeBuy = false;
if (!empty($row['free_type'])) {
$count = $this->countFreeBuyTimes($row);
if ($count < $row['free_num']) {
$isFreeBuy = true;
} else {
$this->_rspErr(1, "free_num parameter error, free_num: {$row['free_num']}");
return;
}
} else if (!in_array($token_type, $check_token_type)) {
$this->_rspErr(1, "token_type parameter error, desired_token_type: {$desired_token_type}");
return;
}
@ -968,7 +982,13 @@ class ShopController extends BaseAuthedController
break;
case ShopController::TOKEN_TYPE_CEG:
case ShopController::TOKEN_TYPE_CEC:
if ($isFreeBuy) {
$propertyChgService = new services\PropertyChgService();
$this->addFreeBuyRecord($row);
$itemMeta = mt\Item::get($row['goods_id']);
$this->internalAddItem($propertyChgService, $itemMeta, $goods_count);
$this->_rspOk();
} else {
$price = $this->normalizeWeb3Price($goods_num * $need_price);
$item_id = $row['goods_id'];
$item_count = $goods_num;
@ -980,7 +1000,7 @@ class ShopController extends BaseAuthedController
$item_count
);
BcOrder::upsert( $response['trans_id'], array(
BcOrder::upsert($response['trans_id'], array(
'item_id' => $item_id,
'item_num' => $item_count,
'order_type' => 1,
@ -994,6 +1014,7 @@ class ShopController extends BaseAuthedController
$this->_rspData(
$response
);
}
break;
case ShopController::TOKEN_TYPE_BCEG:
@ -1070,7 +1091,7 @@ class ShopController extends BaseAuthedController
$item_count
);
BcOrder::upsert( $response['trans_id'], array(
BcOrder::upsert($response['trans_id'], array(
'item_id' => $item_id,
'item_num' => $item_count,
'order_type' => 1,
@ -1093,8 +1114,8 @@ class ShopController extends BaseAuthedController
}
private function buyGoodsFree() {
private function buyGoodsFree()
{
}
private function decDailySelectionItem($idx, $grid, $count)
@ -1534,4 +1555,51 @@ class ShopController extends BaseAuthedController
return $price;
}
private function countFreeBuyTimes($goods) {
$conn = myself()->_getMysql('');
$account = myself()->_getAccountId();
switch($goods['free_type'])
{
case 1:
{
$dayTime = myself()->_getNowDaySeconds();
$sql = 'SELECT COUNT(*) as cnt FROM t_shop_free_record WHERE account_id = ? AND `id` = ? AND goods_id = ? AND createtime >= ?';
$row = $conn->execQueryOne($sql, array($account, $goods['id'], $goods['goods_id'], $dayTime));
return $row['cnt'];
}
break;
}
return 0;
}
private function addFreeBuyRecord($goods) {
$conn = myself()->_getMysql('');
$account = myself()->_getAccountId();
switch($goods['free_type'])
{
case 1:
{
$dayTime = myself()->_getNowTime();
SqlHelper::insert(
$conn,
't_shop_free_record',
array(
'account_id' => $account,
'shop_id' => $goods['shop_id'],
'id' => $goods['id'],
'goods_id' => $goods['goods_id'],
'goods_num' => $goods['goods_num'],
'free_type' => $goods['free_type'],
'free_num' => $goods['free_num'],
'createtime' => $dayTime,
)
);
}
break;
}
}
}