From f9e9edfa171446e2bfd8d7b5400c24824e3d2340 Mon Sep 17 00:00:00 2001 From: weigang Date: Sat, 5 Sep 2020 19:55:40 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=BD=93=E9=9D=A2=E4=BB=98=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=BD=93=E9=9D=A2=E4=BB=98?= =?UTF-8?q?=E4=B8=8B=E5=8D=95+=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/HomeController.php | 8 +- app/Controller/v3/OrderOfflineController.php | 66 +++++++++++++ app/Model/v3/Order.php | 17 ++++ app/Model/v3/OrderGoods.php | 21 ++++ app/Model/v3/Store.php | 5 + app/Request/v3/OrderOfflineRequest.php | 45 +++++++++ .../Implementations/OrderOfflineService.php | 95 +++++++++++++++++++ .../v3/Implementations/OrderOnlineService.php | 15 +-- .../v3/Implementations/PaymentService.php | 6 +- .../v3/Implementations/StoreInfoService.php | 30 ------ .../v3/Implementations/StoreService.php | 5 +- ...e.php => OrderOfflineServiceInterface.php} | 10 +- .../v3/Interfaces/PaymentServiceInterface.php | 2 +- config/autoload/dependencies.php | 1 + config/routes.php | 2 + 15 files changed, 272 insertions(+), 56 deletions(-) create mode 100644 app/Controller/v3/OrderOfflineController.php create mode 100644 app/Request/v3/OrderOfflineRequest.php create mode 100644 app/Service/v3/Implementations/OrderOfflineService.php delete mode 100644 app/Service/v3/Implementations/StoreInfoService.php rename app/Service/v3/Interfaces/{StoreInfoServiceInterface.php => OrderOfflineServiceInterface.php} (50%) diff --git a/app/Controller/v3/HomeController.php b/app/Controller/v3/HomeController.php index e423b34..04de8ca 100644 --- a/app/Controller/v3/HomeController.php +++ b/app/Controller/v3/HomeController.php @@ -13,7 +13,7 @@ use App\Service\v3\Interfaces\BannerServiceInterface; use App\Service\v3\Interfaces\CategoryServiceInterface; use App\Service\v3\Interfaces\CollectStoreServiceInterface; use App\Service\v3\Interfaces\CouponServiceInterface; -use App\Service\v3\Interfaces\StoreInfoServiceInterface; +use App\Service\v3\Interfaces\StoreServiceInterface; use App\Service\v3\Interfaces\TabsServiceInterface; use App\Service\v3\Interfaces\UserCenterBlockServiceInterface; use App\Service\v3\Interfaces\UserInfoServiceInterface; @@ -56,9 +56,9 @@ class HomeController extends BaseController /** * @Inject - * @var StoreInfoServiceInterface + * @var StoreServiceInterface */ - protected $storeInfoService; + protected $storeService; /** * @Inject @@ -149,7 +149,7 @@ class HomeController extends BaseController public function storeIndex() { - $data['detail'] = $this->storeInfoService->detail(); + $data['detail'] = $this->storeInfoService->detail(1); $data['order_online'] = [ 'count' => 6549, 'total' => 12654.12 diff --git a/app/Controller/v3/OrderOfflineController.php b/app/Controller/v3/OrderOfflineController.php new file mode 100644 index 0000000..05539aa --- /dev/null +++ b/app/Controller/v3/OrderOfflineController.php @@ -0,0 +1,66 @@ +validationFactory->make( + $this->request->all(), + ['store_id' => 'required|nonempty'], + ['*.*' => '商户ID参数异常'] + ); + + if ($validator->fails()) { + throw new ValidationException($validator); + } + + $params = $validator->validated(); + $store = $this->storeService->detail($params['store_id']); + return $this->success(['store' => $store]); + } + + /** + * 当面付下单支付 + * 1、用户id、去商户id下支付、支付的金额 + * 2、下单同时支付,下发支付参数 + * @param OrderOfflineRequest $request + */ + public function add(OrderOfflineRequest $request) + { + $params = $request->validated(); + $data = $this->orderOfflineService->do( + $params['store_id'], + $params['user_id'], + $params['money'], + $params['plat'] + ); + return $this->success(['data' => $data]); + } +} \ No newline at end of file diff --git a/app/Model/v3/Order.php b/app/Model/v3/Order.php index b7da4b4..99bf36b 100644 --- a/app/Model/v3/Order.php +++ b/app/Model/v3/Order.php @@ -12,6 +12,23 @@ class Order extends Model 'created_at_text', ]; + protected $fillable = [ + 'order_main_id', + 'user_id', + 'store_id', + 'refund_time', + 'status', + 'money', + 'oid', + 'order_num', + 'refuse_refund_note', + 'note', + 'created_at', + 'updated_at', + 'deleted_at', + 'refund_note', + ]; + public function getCreatedAtTextAttribute() { return date('Y-m-d H:i:s', $this->attributes['created_at']); diff --git a/app/Model/v3/OrderGoods.php b/app/Model/v3/OrderGoods.php index b407092..b8290d0 100644 --- a/app/Model/v3/OrderGoods.php +++ b/app/Model/v3/OrderGoods.php @@ -17,6 +17,27 @@ class OrderGoods extends Model 'tags' ]; + protected $fillable = [ + 'order_id', + 'goods_id', + 'activity_type', + 'number', + 'status', + 'price', + 'original_price', + 'vip_price', + 'name', + 'goods_unit', + 'cover_img', + 'spec', + 'refund_time', + 'created_at', + 'updated_at', + 'deleted_at', + 'refuse_refund_note', + 'refund_note', + ]; + public function goods() { return $this->belongsTo(Goods::class, 'goods_id', 'id'); diff --git a/app/Model/v3/Store.php b/app/Model/v3/Store.php index 6f92372..82a8691 100644 --- a/app/Model/v3/Store.php +++ b/app/Model/v3/Store.php @@ -72,4 +72,9 @@ class Store extends Model { return $this->hasMany(ShoppingCart::class, 'store_id', 'id'); } + + public function market() + { + return $this->belongsTo(Market::class, 'market_id', 'id'); + } } \ No newline at end of file diff --git a/app/Request/v3/OrderOfflineRequest.php b/app/Request/v3/OrderOfflineRequest.php new file mode 100644 index 0000000..bc3a402 --- /dev/null +++ b/app/Request/v3/OrderOfflineRequest.php @@ -0,0 +1,45 @@ + 'required|nonempty|integer', + 'user_id' => 'required|nonempty|integer', + 'money' => 'required|nonempty', + 'plat' => 'nonempty', + ]; + } + + public function messages(): array + { + return [ + '*.*' => ':attribute 参数异常' + ]; + } + + public function attributes(): array + { + return [ + + ]; + } +} diff --git a/app/Service/v3/Implementations/OrderOfflineService.php b/app/Service/v3/Implementations/OrderOfflineService.php new file mode 100644 index 0000000..beab02c --- /dev/null +++ b/app/Service/v3/Implementations/OrderOfflineService.php @@ -0,0 +1,95 @@ +get(IdGeneratorInterface::class); + $globalOrderId = $generator->generate(); + + $dataMain = [ + 'market_id' => $store->market_id, + 'order_num' => $globalOrderId, + 'global_order_id' => $globalOrderId, + 'user_id' => $userId, + 'type' => OrderType::OFFLINE, + 'money' => $money, + 'total_money' => $money, + 'services_money' => 0, + 'coupon_money' => 0, + 'delivery_money' => 0, + 'state' => OrderState::UNPAID, + 'tel' => '', + 'address' => '', + 'lat' => '', + 'lng' => '', + 'name' => '', + 'plat' => $plat, + 'delivery_time_note' => '' + ]; + + $orderMain = OrderMain::create($dataMain); + $orderMainId = $orderMain->id; + + // 子订单数据 + $dataChildren = [ + 'order_main_id' => $orderMainId, + 'user_id' => $userId, + 'store_id' => $storeId, + 'money' => $money, + 'order_num' => date('YmdHis').mt_rand(1000, 9999), + 'note' => '' + ]; + + $orderChild = Order::create($dataChildren); + $orderChildId = $orderChild->id; + + Db::commit(); + // 支付 + return $this->paymentService->do($globalOrderId, $money, $userId, config('site_host') . '/wechat/notify/wxminioffline'); + } catch (\Exception $e) { + Db::rollBack(); + $this->log->event(LogLabel::ORDER_ONLINE_LOG, ['exception_msg' => $e->getMessage()]); + throw new ErrorCodeException(ErrorCode::ORDER_ONLINE_FAIL); + } + } + + public function check() + { + // TODO: Implement check() method. + } + + public function undo() + { + // TODO: Implement undo() method. + } +} \ No newline at end of file diff --git a/app/Service/v3/Implementations/OrderOnlineService.php b/app/Service/v3/Implementations/OrderOnlineService.php index 4493eb5..14e9fd4 100644 --- a/app/Service/v3/Implementations/OrderOnlineService.php +++ b/app/Service/v3/Implementations/OrderOnlineService.php @@ -227,7 +227,7 @@ class OrderOnlineService implements OrderOnlineServiceInterface // 获取分布式全局ID $generator = ApplicationContext::getContainer()->get(IdGeneratorInterface::class); - $global_order_id = $generator->generate(); + $globalOrderId = $generator->generate(); $orderAmount = bcadd((string)$orderAmount, '0', 2); $totalAmount = bcadd((string)$totalAmount, (string)$orderAmount); @@ -242,8 +242,8 @@ class OrderOnlineService implements OrderOnlineServiceInterface $dataMain = [ 'market_id' => $marketId, - 'order_num' => $global_order_id, - 'global_order_id' => $global_order_id, + 'order_num' => $globalOrderId, + 'global_order_id' => $globalOrderId, 'user_id' => $userId, 'type' => OrderType::ONLINE, 'money' => $totalAmount, @@ -262,16 +262,19 @@ class OrderOnlineService implements OrderOnlineServiceInterface ]; // 生成主订单 - $orderMain = OrderMain::create($dataMain); + $orderMain = OrderMain::query()->create($dataMain); $orderMainId = $orderMain->id; // 处理子订单 foreach ($dataChildren as $key => &$child) { $child['order_main_id'] = $orderMainId; - $orderChildId = Order::query()->insertGetId($child); + $orderChild = Order::query()->create($child); + $orderChildId = $orderChild->id; foreach ($dataOrderGoods[$child['store_id']] as $k => &$orderGoods) { $orderGoods['order_id'] = $orderChildId; + $orderGoods['created_at'] = $currentTime; + $orderGoods['updated_at'] = $currentTime; } OrderGoods::query()->insert($dataOrderGoods[$child['store_id']]); } @@ -341,7 +344,7 @@ class OrderOnlineService implements OrderOnlineServiceInterface Db::commit(); // 支付 - return $this->paymentService->do($global_order_id, $totalAmount, $userId); + return $this->paymentService->do($globalOrderId, $totalAmount, $userId, config('site_host') . '/wechat/notify/wxminionline'); } catch (\Exception $e) { Db::rollBack(); $this->log->event(LogLabel::ORDER_ONLINE_LOG, ['exception_msg' => $e->getMessage()]); diff --git a/app/Service/v3/Implementations/PaymentService.php b/app/Service/v3/Implementations/PaymentService.php index 724f078..ea06f70 100644 --- a/app/Service/v3/Implementations/PaymentService.php +++ b/app/Service/v3/Implementations/PaymentService.php @@ -29,7 +29,7 @@ class PaymentService implements PaymentServiceInterface */ protected $goodsActivityService; - public function do($globalOrderId, $money, $userId) + public function do($globalOrderId, $money, $userId, $notifyUrl) { try { @@ -55,10 +55,10 @@ class PaymentService implements PaymentServiceInterface $user = User::select('openid')->find($userId); $result = $app->order->unify([ - 'body' => '懒族生活 - 外卖下单', + 'body' => '懒族生活', 'out_trade_no' => $orderMain->global_order_id, 'total_fee' => $payMoney, - 'notify_url' => config('site_host') . '/wechat/notify/wxminionline', + 'notify_url' => $notifyUrl, 'trade_type' => 'JSAPI', 'openid' => $user['openid'], ]); diff --git a/app/Service/v3/Implementations/StoreInfoService.php b/app/Service/v3/Implementations/StoreInfoService.php deleted file mode 100644 index b00b2b6..0000000 --- a/app/Service/v3/Implementations/StoreInfoService.php +++ /dev/null @@ -1,30 +0,0 @@ -where('id',1)->first()->toArray(); - } -} \ No newline at end of file diff --git a/app/Service/v3/Implementations/StoreService.php b/app/Service/v3/Implementations/StoreService.php index 04df5c5..6b29057 100644 --- a/app/Service/v3/Implementations/StoreService.php +++ b/app/Service/v3/Implementations/StoreService.php @@ -27,10 +27,7 @@ class StoreService implements StoreServiceInterface public function detail($storeId) { return Store::query() - ->select([ - 'id', 'name', 'logo', 'introduction', 'announcement', 'address', 'tel', 'stall_info', - 'is_rest','time1', 'time2', 'time3', 'time4', - ]) + ->with('market') ->where('id',$storeId) ->first()->toArray(); } diff --git a/app/Service/v3/Interfaces/StoreInfoServiceInterface.php b/app/Service/v3/Interfaces/OrderOfflineServiceInterface.php similarity index 50% rename from app/Service/v3/Interfaces/StoreInfoServiceInterface.php rename to app/Service/v3/Interfaces/OrderOfflineServiceInterface.php index 47a0451..066bc5b 100644 --- a/app/Service/v3/Interfaces/StoreInfoServiceInterface.php +++ b/app/Service/v3/Interfaces/OrderOfflineServiceInterface.php @@ -1,16 +1,10 @@ \App\Service\v3\Implementations\CouponRecService::class, \App\Service\v3\Interfaces\PaymentServiceInterface::class => \App\Service\v3\Implementations\PaymentService::class, \App\Service\v3\Interfaces\WithdrawalListServiceInterface::class => \App\Service\v3\Implementations\WithdrawalListService::class, + \App\Service\v3\Interfaces\OrderOfflineServiceInterface::class => \App\Service\v3\Implementations\OrderOfflineService::class, ]; diff --git a/config/routes.php b/config/routes.php index 4acfd98..1741678 100644 --- a/config/routes.php +++ b/config/routes.php @@ -109,6 +109,7 @@ Router::addGroup('/v3/', function () { Router::post('shopCartUpdate/update', 'App\Controller\v3\ShopCartUpdateController@update'); Router::post('shopCart/detail', 'App\Controller\v3\ShopCartController@detail'); Router::post('orderOnline/review', 'App\Controller\v3\OrderOnlineController@review'); + Router::post('orderOffline/review', 'App\Controller\v3\OrderOfflineController@review'); Router::post('storeLogin/login', 'App\Controller\v3\StoreLoginController@login'); Router::post('home/storeIndex', 'App\Controller\v3\HomeController@storeIndex'); Router::post('orderList/onlineForStore', 'App\Controller\v3\OrderListController@onlineForStore'); @@ -116,6 +117,7 @@ Router::addGroup('/v3/', function () { Router::post('collectStore/getListByUser', 'App\Controller\v3\CollectStoreController@getListByUser'); Router::post('balanceStatement/getRevenueListByUser', 'App\Controller\v3\BalanceStatementController@getRevenueListByUser'); Router::post('orderOnline/add', 'App\Controller\v3\OrderOnlineController@add'); + Router::post('orderOffline/add', 'App\Controller\v3\OrderOfflineController@add'); Router::post('store/storeWithdrawalList', 'App\Controller\v3\BalanceStatementController@getWithdrawalListByStore'); Router::post('payment/wechatpayOnline', 'App\Controller\v3\PaymentController@wechatpayOnline'); },['middleware' => [\App\Middleware\Auth\ApiMiddleware::class, \App\Middleware\Auth\UserMiddleware::class]]); \ No newline at end of file From e3269131e6a35b4733360a588322ec8b07f6843f Mon Sep 17 00:00:00 2001 From: Mike Date: Sat, 5 Sep 2020 20:02:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=B8=82=E5=9C=BA=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/LocationController.php | 9 +++++++++ app/Service/v3/Implementations/LocationService.php | 6 ++++++ app/Service/v3/Interfaces/LocationServiceInterface.php | 1 + config/routes.php | 1 + 4 files changed, 17 insertions(+) diff --git a/app/Controller/v3/LocationController.php b/app/Controller/v3/LocationController.php index b46ceac..bee31f0 100644 --- a/app/Controller/v3/LocationController.php +++ b/app/Controller/v3/LocationController.php @@ -49,4 +49,13 @@ class LocationController extends BaseController $cityIds = [2163,2189]; return $this->success($this->locationService->getMarketListByLocation($cityIds)); } + + public function getMarketsInfo() + { + $ret = []; + $ret['service_time']='8:30-20:00'; + $ret['markets_info']=$this->locationService->getMarketsInfo(); + + return $ret; + } } \ No newline at end of file diff --git a/app/Service/v3/Implementations/LocationService.php b/app/Service/v3/Implementations/LocationService.php index c922c74..f34afb6 100644 --- a/app/Service/v3/Implementations/LocationService.php +++ b/app/Service/v3/Implementations/LocationService.php @@ -72,4 +72,10 @@ class LocationService implements LocationServiceInterface return round($distance, $decimal); } + + //获取服务站信息 + function getMarketsInfo() + { + return Market::where('status',1)->get(); + } } \ No newline at end of file diff --git a/app/Service/v3/Interfaces/LocationServiceInterface.php b/app/Service/v3/Interfaces/LocationServiceInterface.php index 6bed48b..688ae98 100644 --- a/app/Service/v3/Interfaces/LocationServiceInterface.php +++ b/app/Service/v3/Interfaces/LocationServiceInterface.php @@ -11,4 +11,5 @@ interface LocationServiceInterface public function undo(); public function getMarketListByLocation($cityIds); public function searchMarket($key,$cityId = 2163); + public function getMarketsInfo(); } \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index 52d47e7..0d898fc 100644 --- a/config/routes.php +++ b/config/routes.php @@ -91,6 +91,7 @@ Router::addGroup('/v3/', function () { Router::post('goodsRecommend/getByTab', 'App\Controller\v3\GoodsRecommendController@getByTab'); Router::post('store/index', 'App\Controller\v3\StoreController@index'); Router::post('Search/market', 'App\Controller\v3\SearchController@market'); + Router::post('market/services', 'App\Controller\v3\LocationController@getMarketsInfo'); },['middleware' => [\App\Middleware\Auth\ApiMiddleware::class]]); // 需要登录的路由