feat: #100000 基础完成

This commit is contained in:
赵世界 2022-10-24 09:44:43 +08:00
parent 21cd070e92
commit dd84256472
7 changed files with 171 additions and 49 deletions

View File

@ -0,0 +1,35 @@
<?php
namespace App\Events;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class GroupSetEvent
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $groupId;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($groupId)
{
$this->groupId = $groupId;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
}

View File

@ -2,6 +2,7 @@
namespace App\Http\Controllers\Group; namespace App\Http\Controllers\Group;
use App\Events\GroupSetEvent;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Requests\GroupsRequest; use App\Http\Requests\GroupsRequest;
use App\Http\Resources\GoodsSkuResource; use App\Http\Resources\GoodsSkuResource;
@ -86,6 +87,7 @@ class GroupsController extends Controller
} }
(new GroupGoods())->batchInsert($groupGoods); (new GroupGoods())->batchInsert($groupGoods);
DB::commit(); DB::commit();
event(new GroupSetEvent($group->id));
} catch (\Exception $exception) { } catch (\Exception $exception) {
DB::rollBack(); DB::rollBack();
$this->res = [ $this->res = [
@ -153,6 +155,7 @@ class GroupsController extends Controller
); );
} }
DB::commit(); DB::commit();
event(new GroupSetEvent($id));
} catch (\Exception $exception) { } catch (\Exception $exception) {
DB::rollBack(); DB::rollBack();
$this->res = [ $this->res = [

View File

@ -0,0 +1,37 @@
<?php
namespace App\Listeners;
use App\Events\GroupSetEvent;
use App\Models\Groups;
use App\Models\Shop;
use App\Services\Business\BusinessFactory;
class GroupQueryListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param GroupSetEvent $event
* @return void
*/
public function handle(GroupSetEvent $event)
{
$shopId = Groups::query()->where('group_Id', $event->groupId)->value('shop_id');
$shop = Shop::query()->find($shopId);
$client = BusinessFactory::init()->make($shop['plat_id'])->setShopWithId($shop['id']);
$client->createGroup($event->groupId);
sleep(1);
$client->queryGroupStatus($event->groupId);
}
}

View File

@ -2,13 +2,14 @@
namespace App\Providers; namespace App\Providers;
use App\Listeners\StockWarning;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
use App\Listeners\UpdateBusinessGoodsStock;
use App\Events\BusinessOrdersUpdate; use App\Events\BusinessOrdersUpdate;
use App\Events\GroupSetEvent;
use App\Events\StockUpdateEvent; use App\Events\StockUpdateEvent;
use App\Listeners\GroupQueryListener;
use App\Listeners\StockUpdateListener; use App\Listeners\StockUpdateListener;
use App\Listeners\StockWarning;
use App\Listeners\UpdateBusinessGoodsStock;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider class EventServiceProvider extends ServiceProvider
{ {
@ -26,6 +27,9 @@ class EventServiceProvider extends ServiceProvider
StockUpdateListener::class, StockUpdateListener::class,
StockWarning::class, StockWarning::class,
], ],
GroupSetEvent::class => [
GroupQueryListener::class,
],
]; ];
/** /**

View File

@ -85,44 +85,5 @@ class Goods
return [$type, $appendParams]; return [$type, $appendParams];
} }
public static function createGroup()
{
$type = 'pdd.ktt.group.create';
$skuList = [
'external_sku_id' => 'world_123',
'price_in_fen' => 1000000,
'quantity_type' => 0,
'spec_id_list' => [3908559014],
'total_quantity' => 10,
];
$goods = [
'category_name' => '分类名',
'goods_desc' => '测试使用',
'goods_name' => '字母a',
'limit_buy' => 1,
'market_price' => 100000,
'sku_list' => [$skuList]
];
$appendParams = [
'end_time' => 1667385374000,
'goods_list' => json_encode([$goods]),
'is_save_preview' => 0,
'start_time' => 1665385374000,
'title' => '世界鲜花团购大赏',
];
return [$type, $appendParams];
}
public static function queryGroupStatus()
{
$type = 'pdd.ktt.group.query.status';
$appendParams = [
'activity_no' => '0d0t6e4ji-KSYKxdgpMZHmTqFwU0p1Qg'
];
return [$type, $appendParams];
}
} }

View File

@ -0,0 +1,57 @@
<?php
namespace App\Services\Business\KuaiTuanTuan;
use App\Models\Groups as GroupsModel;
use App\Models\GroupGoods;
class Groups
{
public static function createGroup($localGroupId)
{
$type = 'pdd.ktt.group.create';
$group = GroupsModel::query()->find($localGroupId);
$groupGoods = GroupGoods::query()
->where('group_id', $group->id)
->with(['goodsSku:id,stock'])
->get();
$goodsSkus = [];
foreach ($groupGoods as $item) {
$goodsSkus[] = [
'category_name' => $item['category_name'],
'goods_desc' => $item['goods_desc'],
'goods_name' => $item['goods_name'],
'limit_buy' => $item['limit_buy'],
'market_price' => $item['market_price'],
'sku_list' => [
'external_sku_id' => $item['external_sku_id'],
'price_in_fen' => $item['price_in_fen'],
'quantity_type' => 0,
'spec_id_list' => [],
'total_quantity' => $item['goodsSku']['stock'],
]
];
}
$appendParams = [
'end_time' => $group['end_time'] * 1000,
'goods_list' => json_encode([$goodsSkus]),
'is_save_preview' => $group['is_save_preview'],
'start_time' => $group['start_time'] * 1000,
'title' => $group['title'],
];
return [$type, $appendParams];
}
public static function queryGroupStatus($localGroupId)
{
$type = 'pdd.ktt.group.query.status';
$group = GroupsModel::query()->find($localGroupId);
$appendParams = [
'activity_no' => $group->activity_no
];
return [$type, $appendParams];
}
}

View File

@ -4,7 +4,9 @@ namespace App\Services\Business\KuaiTuanTuan;
use App\Models\BusinessGoodsSku; use App\Models\BusinessGoodsSku;
use App\Models\GoodsSku; use App\Models\GoodsSku;
use App\Models\GroupGoods;
use App\Services\Business\BusinessClient; use App\Services\Business\BusinessClient;
use App\Models\Groups as GroupsModel;
class KuaiTuanTuan extends BusinessClient class KuaiTuanTuan extends BusinessClient
{ {
@ -158,17 +160,40 @@ class KuaiTuanTuan extends BusinessClient
return $this->doRequest($type, $appendParams); return $this->doRequest($type, $appendParams);
} }
public function createGroup() public function createGroup($localGroupId)
{ {
[$type, $appendParams] = Goods::createGroup(); [$type, $appendParams] = Groups::createGroup($localGroupId);
$res = $this->doRequest($type, $appendParams);
return $this->doRequest($type, $appendParams); if (isset($res['response']['success'])) {
$group = GroupsModel::query()->find($localGroupId);
$group->activity_no = $res['response']['activity_no'];
$group->save();
} }
public function queryGroupStatus() return $res;
{ }
[$type, $appendParams] = Goods::queryGroupStatus();
return $this->doRequest($type, $appendParams); public function queryGroupStatus($localGroupId)
{
[$type, $appendParams] = Groups::queryGroupStatus($localGroupId);
$res = $this->doRequest($type, $appendParams);
if (isset($res['response'])) {
$group = GroupsModel::query()->find($localGroupId);
$group->error_msg = $res['response']['error_msg'];
$group->qr_code_url = $res['response']['qr_code_url'];
$group->status = $res['response']['status'];
$group->save();
foreach ($res['response']['goods_list'] as $goods) {
$groupGoods = GroupGoods::query()
->where('group_id', $localGroupId)
->where('external_sku_id', $goods['external_sku_id'])
->find();
$groupGoods->erp_goods_id = $goods['goods_id'];
$groupGoods->erp_sku_id = $goods['sku_list'][0]['sku_id'];
$groupGoods->save();
}
}
return $res;
} }
} }