|
|
|
@ -77,44 +77,47 @@ class ActivityService implements ActivityServiceInterface |
|
|
|
$settingsStr = $activitySettings[$activity['type']] ?? ''; |
|
|
|
$activity['settings'] = json_decode($settingsStr, true); |
|
|
|
$activity['settings'] = !empty($activity['settings']) ? $activity['settings'] : (object)[]; |
|
|
|
|
|
|
|
$storeTable = ApplicationContext::getContainer()->get(Store::class)->getTable(); |
|
|
|
$goodsTable = ApplicationContext::getContainer()->get(GoodsActivity::class)->getTable(); |
|
|
|
|
|
|
|
$builder = GoodsActivity::query() |
|
|
|
->join($storeTable, ''.$storeTable.'.id', '=', ''.$goodsTable.'.store_id') |
|
|
|
->with(['store']) |
|
|
|
->where([''.$goodsTable.'.type' => $type]) |
|
|
|
->where(function ($query) use ($marketId, $goodsTable) { |
|
|
|
$query->whereJsonContains(''.$goodsTable.'.market_ids', [(string)$marketId]) |
|
|
|
->orWhereJsonLength(''.$goodsTable.'.market_ids', '=', 0); |
|
|
|
}) |
|
|
|
->where([''.$goodsTable.'.on_sale' => GoodsConstants::ON_SALE_YES]) |
|
|
|
// ->where(function ($query) use ($goodsTable) {
|
|
|
|
// $query->where(''.$goodsTable.'.inventory', '>', 0)->orWhere(''.$goodsTable.'.is_infinite', '=', 1);
|
|
|
|
// })
|
|
|
|
->whereRaw(''.$goodsTable.'.deleted_at IS NULL') |
|
|
|
->where([''.$storeTable.'.market_id' => $marketId]) |
|
|
|
->where([''.$storeTable.'.is_open' => \App\Constants\v3\Store::IS_OPEN_YES]) |
|
|
|
->where([''.$storeTable.'.is_rest' => \App\Constants\v3\Store::IS_REST_NO]) |
|
|
|
->where('time1', '<=', date('H:i')) |
|
|
|
->where(function ($query) { |
|
|
|
$query->where('time2', '>=', date('H:i')) |
|
|
|
->orWhere('time4', '>=', date('H:i')); |
|
|
|
}) |
|
|
|
->where(''.$goodsTable.'.expire_time', '>', time()); |
|
|
|
|
|
|
|
$builder = $builder->select(''.$goodsTable.'.*')->addSelect(''.$goodsTable.'.sales as total_sales') |
|
|
|
->orderBy(''.$goodsTable.'.sort', 'DESC') |
|
|
|
->orderBy(''.$goodsTable.'.expire_time', 'ASC') |
|
|
|
->orderBy(''.$goodsTable.'.created_at', 'DESC'); |
|
|
|
|
|
|
|
if (is_array($activity['settings'])&&isset($activity['settings']['index_num_limit'])&&!empty($activity['settings']['index_num_limit'])) { |
|
|
|
$builder = $builder->limit($activity['settings']['index_num_limit']); |
|
|
|
$activity['goods'] = []; |
|
|
|
|
|
|
|
if ($activity['settings']['show_type'] == 'list') { |
|
|
|
$storeTable = ApplicationContext::getContainer()->get(Store::class)->getTable(); |
|
|
|
$goodsTable = ApplicationContext::getContainer()->get(GoodsActivity::class)->getTable(); |
|
|
|
|
|
|
|
$builder = GoodsActivity::query() |
|
|
|
->join($storeTable, ''.$storeTable.'.id', '=', ''.$goodsTable.'.store_id') |
|
|
|
->with(['store']) |
|
|
|
->where([''.$goodsTable.'.type' => $type]) |
|
|
|
->where(function ($query) use ($marketId, $goodsTable) { |
|
|
|
$query->whereJsonContains(''.$goodsTable.'.market_ids', [(string)$marketId]) |
|
|
|
->orWhereJsonLength(''.$goodsTable.'.market_ids', '=', 0); |
|
|
|
}) |
|
|
|
->where([''.$goodsTable.'.on_sale' => GoodsConstants::ON_SALE_YES]) |
|
|
|
// ->where(function ($query) use ($goodsTable) {
|
|
|
|
// $query->where(''.$goodsTable.'.inventory', '>', 0)->orWhere(''.$goodsTable.'.is_infinite', '=', 1);
|
|
|
|
// })
|
|
|
|
->whereRaw(''.$goodsTable.'.deleted_at IS NULL') |
|
|
|
->where([''.$storeTable.'.market_id' => $marketId]) |
|
|
|
->where([''.$storeTable.'.is_open' => \App\Constants\v3\Store::IS_OPEN_YES]) |
|
|
|
->where([''.$storeTable.'.is_rest' => \App\Constants\v3\Store::IS_REST_NO]) |
|
|
|
->where('time1', '<=', date('H:i')) |
|
|
|
->where(function ($query) { |
|
|
|
$query->where('time2', '>=', date('H:i')) |
|
|
|
->orWhere('time4', '>=', date('H:i')); |
|
|
|
}) |
|
|
|
->where(''.$goodsTable.'.expire_time', '>', time()); |
|
|
|
|
|
|
|
$builder = $builder->select(''.$goodsTable.'.*')->addSelect(''.$goodsTable.'.sales as total_sales') |
|
|
|
->orderBy(''.$goodsTable.'.sort', 'DESC') |
|
|
|
->orderBy(''.$goodsTable.'.expire_time', 'ASC') |
|
|
|
->orderBy(''.$goodsTable.'.created_at', 'DESC'); |
|
|
|
|
|
|
|
if (is_array($activity['settings'])&&isset($activity['settings']['index_num_limit'])&&!empty($activity['settings']['index_num_limit'])) { |
|
|
|
$builder = $builder->limit($activity['settings']['index_num_limit']); |
|
|
|
} |
|
|
|
|
|
|
|
$activity['goods'] = $builder->get()->toArray(); |
|
|
|
} |
|
|
|
|
|
|
|
$activity['goods'] = $builder->get()->toArray(); |
|
|
|
|
|
|
|
return $activity; |
|
|
|
} |
|
|
|
} |