ufutx.dma/app/Http/Controllers/App/ShopController.php
2026-03-04 14:42:40 +08:00

276 lines
10 KiB
PHP

<?php
namespace App\Http\Controllers\App;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\Version;
use App\Services\ShopService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class ShopController extends Controller
{
/**
* 获取商品列表
* @param Request $request
* @param ShopService $shopService
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function getGoodsList(Request $request, ShopService $shopService)
{
try {
$keyword = $request->get('keyword');
$page = $request->get('page', 1);
$params = [
'page' => $page,
'keyword' => $keyword
];
$res = $shopService->request('get', 'shops', $params);
if (isset($res['code']) && $res['code'] == 1) {
return $this->failure($res['message']);
}
$data = $res['data'] ?? [];
//增加特定逻辑处理特定业务场景
$version = $request->get('version');
$version_status = Version::where('version', $version)->value('status');
if ($version_status == Version::STATUS_CHECK) {
foreach ($data['data'] as $index => $item) {
if ($item['id'] == 8192) {
unset($data['data'][$index]);
}
}
$data['data'] = array_values($data['data']);
}
return $this->success('ok', $data);
} catch (\Exception $e) {
Log::error('getGoodsList:' . $e->getMessage());
return $this->failure('请求失败');
}
}
/**
* 获取商品详情
* @param Request $request
* @param ShopService $shopService
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function getGoodsDetail(Request $request, ShopService $shopService)
{
try {
$user = auth()->user();
// $open_id = $user->wechat->openid;
$goods_id = $request->get('id');
if (empty($goods_id)) {
return $this->failure('请选择商品');
}
$params = [
// 'openid' => $open_id
'accid' => User::SAAS_PREFIX.$user->id
];
$res = $shopService->request('get', "shops/$goods_id", $params);
if (isset($res['code']) && $res['code'] == 1) {
return $this->failure($res['message']);
}
$data = $res['data'] ?? [];
return $this->success('ok', $data);
} catch (\Exception $e) {
Log::error('getGoodsDetail:' . $e->getMessage());
return $this->failure('请求失败');
}
}
/**
* 获取订单列表
* @param Request $request
* @param ShopService $shopService
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function getShopOrderList(Request $request, ShopService $shopService)
{
try {
$user = auth()->user();
// $open_id = $user->wechat->openid;
$page = $request->get('page', 1);
// if (empty($open_id)) {
// return $this->failure('获取用户openid失败');
// }
$status = $request->get('status');
$params = [
'page' => $page,
// 'openid' => $open_id,
'pay_status' => $status,
'accid' => User::SAAS_PREFIX.$user->id
];
$res = $shopService->request('get', 'shops/orders', $params);
if (isset($res['code']) && $res['code'] == 1) {
return $this->failure($res['message']);
}
$data = $res['data'] ?? [];
return $this->success('ok', $data);
} catch (\Exception $e) {
Log::error('getMyOrderList:' . $e->getMessage());
return $this->failure('请求失败');
}
}
/**
* 获取订单详情
* @param Request $request
* @param ShopService $shopService
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function getOrderDetail(Request $request, ShopService $shopService)
{
try {
$user = auth()->user();
// $open_id = $user->wechat->openid;
// if (empty($open_id)) {
// return $this->failure('获取用户openid失败');
// }
$order_id = $request->get('id');
if (empty($order_id)) {
return $this->failure('请选择订单');
}
$params = [
// 'openid' => $open_id
'accid' => User::SAAS_PREFIX.$user->id
];
$res = $shopService->request('get', "shops/orders/$order_id", $params);
if (isset($res['code']) && $res['code'] == 1) {
return $this->failure($res['message']);
}
$data = $res['data'] ?? [];
return $this->success('ok', $data);
} catch (\Exception $e) {
Log::error('getOrderDetail:' . $e->getMessage());
return $this->failure('请求失败');
}
}
/**
* 购买商品
* @param Request $request
* @param ShopService $shopService
* @return \Illuminate\Http\JsonResponse|void
*/
public function payOrder(Request $request,ShopService $shopService)
{
try {
$from_user_id = $request->input('from_user_id');
Log::info("商城下单 分享人id $from_user_id");
$id = $request->input('id');
if (empty($id)) {
return $this->failure('请选择商品');
}
$sku_id = $request->input('sku_id');
// if (empty($sku_id)) {
// return $this->failure('请选择规格');
// }
$name = $request->input('name');
if (empty($name)) {
return $this->failure('请填写收货人');
}
$mobile = $request->input('mobile');
if (empty($mobile)) {
return $this->failure('请填写电话');
}
$num = $request->input('num');
if (empty($num)) {
return $this->failure('请选择数量');
}
$address = $request->input('address');
if (empty($address)) {
return $this->failure('请选择地址');
}
$user = auth()->user();
$open_id = $user->wechat->openid;
if (empty($open_id)) {
return $this->failure('获取用户openid失败');
}
$app_id = config('wechat.mini_program.app_id');
$params = [
'accid' => User::SAAS_PREFIX . $user->id,
'sku_id' => $sku_id,
'openid' => $open_id,
'app_id' => $app_id,
'name' => $name,
'mobile' => $mobile,
'num' => $num,
'address' => $address,
'nickname' => $user->name ?? '',
'pic' => $user->avatar ?? '',
'from_accid' => $from_user_id ? User::SAAS_PREFIX . $from_user_id : null,
];
$res = $shopService->request('post',"shops/$id/orders",$params);
if (isset($res['code']) && $res['code'] == 1) {
return $this->failure($res['message']);
}
$data = $res['data'] ?? [];
return $this->success('ok', $data);
} catch (\Exception $e) {
Log::error('payOrder:' . $e->getMessage());
return $this->failure('支付失败');
}
}
/**
* 订单回调
* @param Request $request
* @param ShopService $shopService
* @return \Illuminate\Http\JsonResponse|void
*/
public function orderCallback(Request $request,ShopService $shopService)
{
try {
$trade_no = $request->get('trade_no');
if (empty($trade_no)) {
return $this->failure('订单号不为空');
}
$res = $shopService->request('post',"order/$trade_no/callback");
if (isset($res['code']) && $res['code'] == 1) {
return $this->failure($res['message']);
}
$data = $res['data'] ?? [];
return $this->success('ok', $data);
} catch (\Exception $e) {
Log::error('orderCallback:' . $e->getMessage());
return $this->failure('支付失败');
}
}
/**
* 签收订单
* @param Request $request
* @param ShopService $shopService
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function takeGoods(Request $request,ShopService $shopService)
{
try {
$order_id = $request->input('id');
if (empty($order_id)) {
return $this->failure('订单id不为空');
}
$user = auth()->user();
// $open_id = $user->wechat->openid;
$params = [
// 'openid' => $open_id
'accid' => User::SAAS_PREFIX.$user->id
];
$res = $shopService->request('post',"sign/orders/$order_id",$params);
if (isset($res['code']) && $res['code'] == 1) {
return $this->failure($res['message']);
}
$data = $res['data'] ?? [];
return $this->success('ok', $data);
} catch (\Exception $e) {
Log::error('takeGoods:' . $e->getMessage());
return $this->failure('签收失败');
}
}
}