调整下单

This commit is contained in:
2023-01-12 15:53:40 +08:00
parent 8c05c7a165
commit ce8f753c5d
10 changed files with 178 additions and 51 deletions

View File

@@ -3,10 +3,14 @@
namespace Modules\Mall\Http\Controllers\Api;
use App\Api\Controllers\Controller;
use App\Api\Resources\User\UserBaseResource;
use Illuminate\Http\JsonResponse;
use Jason\Api\Api;
use Modules\Mall\Http\Resources\Api\Activity\ActivityBaseResource;
use Modules\Mall\Http\Resources\Api\Activity\ActivityResource;
use Modules\Mall\Http\Resources\Api\Goods\GoodsBaseResource;
use Modules\Mall\Models\Activity;
use Modules\Mall\Models\Goods;
class ActivityController extends Controller
{
@@ -27,7 +31,26 @@ class ActivityController extends Controller
public function show(Activity $activity)
{
return $this->success(new ActivityResource($activity));
$show_goods_id = app('Conf_mall')['show_goods_id'] ?? 0;
$show_goods = '';
if ($show_goods_id > 0) {
$show_goods = Goods::find($show_goods_id);
}
$goods = Goods::query()
->where('id', '<>', $show_goods_id)
->shown()
->where('channel', Goods::CHANNEL_NORMAL)
->get();
$user = Api::user();
return $this->success([
'user' => $user ? new UserBaseResource($user) : '',
'show_goods' => $show_goods ? new GoodsBaseResource($show_goods) : '',
'activity' => new ActivityResource($activity)
]);
}

View File

@@ -3,13 +3,16 @@
namespace Modules\Mall\Http\Controllers\Api;
use App\Api\Controllers\Controller;
use App\Api\Resources\User\UserBaseResource;
use Illuminate\Http\JsonResponse;
use Jason\Api\Api;
use Modules\Cms\Http\Resources\ArticleBaseResource;
use Modules\Cms\Models\Article;
use Modules\Cms\Models\Category;
use Modules\Mall\Http\Resources\Api\Banner\BannerResource;
use Modules\Mall\Http\Resources\Api\Goods\GoodsBaseResource;
use Modules\Mall\Http\Resources\Api\Video\VideoResource;
use Modules\Mall\Models\Banner;
use Modules\Mall\Models\Goods;
use Modules\Mall\Models\Video;
class IndexController extends Controller
{
@@ -23,6 +26,10 @@ class IndexController extends Controller
*/
public function index(): JsonResponse
{
$banners = Banner::query()->ofPosition(Banner::POSITION_INDEX)->get();
$centers = Banner::query()->ofPosition(Banner::POSITION_INDEX_CENTER)->get();
$show_goods_id = app('Conf_mall')['show_goods_id'] ?? 0;
$show_goods = '';
if ($show_goods_id > 0) {
@@ -32,16 +39,56 @@ class IndexController extends Controller
$goods = Goods::query()
->where('id', '<>', $show_goods_id)
->shown()
->where('channel', Goods::CHANNEL_NORMAL)
->where('channel', Goods::CHANNEL_SCORE)
->get();
$videos = Video::query()
->shown()
->get();
$user = Api::user();
$memories = Article::query()
->whereHas('categories', function ($q) {
$q->where('slug', 'MEMORY');
})
->inRandomOrder()
->take(10)
->get();
$memoriesData = [];
$all = $memories->count() * 30;
foreach ($memories as $key => $memory) {
$id = ++$key;
$memoriesData[] = [
'id' => $memory->id,
'title' => $memory->title,
'description' => $memory->description,
'zIndex' => $id,
'left' => (int) bcsub($all, bcmul($key, 30)),
'image' => $memory->cover_url,
'animation' => null,
];
}
$healths = Article::query()
->whereHas('categories', function ($q) {
$q->where('slug', 'HEALTH');
})
->inRandomOrder()
->take(3)
->get();
$data = [
'user' => $user ? new UserBaseResource($user) : '',
'show_goods' => $show_goods ? new GoodsBaseResource($show_goods) : '',
'videos' => VideoResource::collection($videos),
'goods' => GoodsBaseResource::collection($goods),
'banners' => BannerResource::collection($banners),
'center' => BannerResource::collection($centers),
'memories' => $memoriesData,
'healths' => ArticleBaseResource::collection($healths),
'categories' => [
'memory' => Category::query()->where('slug', 'MEMORY')->value('id') ?? 0,
'health' => Category::query()->where('slug', 'HEALTH')->value('id') ?? 0,
],
];
return $this->success($data);

View File

@@ -50,22 +50,9 @@ class OrderBuyController extends Controller
$goods_sku_id = $request->goods_sku_id;
$qty = $request->qty;
$detail = collect();
$user = Api::user();
$areaCode = $user->info->areaCode;
if (! $areaCode) {
return $this->failed('您没有提货码不可参与此活动');
}
if ($areaCode->status != AreaCode::STATUS_INIT) {
return $this->failed('提货码已被使用,不可重复使用');
}
$detail = collect();
$user = Api::user();
// $address_id = $request->address_id;
// if ($address_id) {
// $address = Address::find($address_id);
// } else {
// $address = Address::where('user_id', $user->id)->orderBy('is_default', 'desc')->first();
// }
$goods_sku = GoodsSku::find($goods_sku_id);
@@ -77,9 +64,35 @@ class OrderBuyController extends Controller
return $this->failed($goods_sku->getGoodsName().'商品不可购买');
}
$areaCode = $user->info->areaCode;
if (! $areaCode) {
return $this->failed('您没有提货码不可参与此活动');
}
if ($areaCode->status != AreaCode::STATUS_INIT) {
return $this->failed('提货码已被使用,不可重复使用');
}
$address_id = $request->address_id;
if ($address_id) {
$address = Address::find($address_id);
} else {
$address = Address::where('user_id', $user->id)->orderBy('is_default', 'desc')->first();
}
$item = new Item($goods_sku, null, $qty);
$detail->push($item);
$type = OrderModel::TYPE_NORMAL;
if ($goods_sku->goods->channel == Goods::CHANNEL_FREE) {
$type = OrderModel::TYPE_SAMPLE;
}
if ($goods_sku->goods->channel == Goods::CHANNEL_SCORE) {
$type = OrderModel::TYPE_SCORE;
}
$freight = $item->freight();
$amount = $item->total();
$weight = $item->weight();
@@ -91,14 +104,21 @@ class OrderBuyController extends Controller
}
$data = [
'areaCode' => new AreaCodeResource($areaCode),
'detail' => $items,
'amount' => floatval(bcadd($amount, $freight, 2)),
'freight' => $freight,
'weight' => $weight,
'user' => $user ? new UserBaseResource($user) : '',
'detail' => $items,
'amount' => floatval(bcadd($amount, $freight, 2)),
'freight' => $freight,
'weight' => $weight,
'user' => $user ? new UserBaseResource($user) : '',
];
if ($type == OrderModel::TYPE_SAMPLE) {
$data['areaCode'] = new AreaCodeResource($areaCode);
}
if ($address) {
$data['address'] = new AddressResource($address);
}
return $this->success($data);
}
@@ -127,9 +147,9 @@ class OrderBuyController extends Controller
return $this->failed($validator->errors()->first());
}
$user = Api::user();
$remark = $request->remark ?? '';
// $address_id = $request->address_id ?? '';
$user = Api::user();
$remark = $request->remark ?? '';
$address_id = $request->address_id ?? '';
$goods_sku_id = $request->goods_sku_id;
$qty = $request->qty;
$share_user_id = $request->share_user_id ?? 0;
@@ -142,10 +162,6 @@ class OrderBuyController extends Controller
return $this->failed('提货码已被使用,不可重复使用');
}
// $address = Address::where('user_id', $user->id)->where('id', $address_id)->first();
// if (! $address) {
// return $this->failed('未找到收货地址');
// }
$detail = collect();
@@ -171,14 +187,29 @@ class OrderBuyController extends Controller
$type = OrderModel::TYPE_SCORE;
}
$address = Address::where('user_id', $user->id)->where('id', $address_id)->first();
$orders = (new Order)->user($user)
->remark($remark)
->items($detail)
->areaCode($areaCode)
->type($type)
->source(['share_user_id' => $share_user_id,])
->create();
if (in_array($type, [OrderModel::TYPE_SCORE, OrderModel::TYPE_NORMAL]) && ! $address) {
return $this->failed('未找到收货地址');
}
if ($type == OrderModel::TYPE_SAMPLE) {
$orders = (new Order)->user($user)
->remark($remark)
->items($detail)
->areaCode($areaCode)
->type($type)
->source(['share_user_id' => $share_user_id,])
->create();
} else {
$orders = (new Order)->user($user)
->remark($remark)
->items($detail)
->address($address)
->type($type)
->source(['share_user_id' => $share_user_id,])
->create();
}
foreach ($orders as $order) {
if ($type == OrderModel::TYPE_SAMPLE) {