From 5734c08ba466fb32008d3a25af762340e314d95f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=BB=BA=E7=82=8A?= <924182103@qq.com> Date: Tue, 6 Aug 2024 13:53:22 +0800 Subject: [PATCH] =?UTF-8?q?=E9=B2=9C=E8=8A=B12.0-=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=B5=8B=E8=AF=95bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/KttOrderQuery.php | 1 + app/Events/BusinessOrdersUpdate.php | 10 +++--- .../Permission/PermissionsController.php | 1 + .../Supplier/DailyStockRecordController.php | 2 +- .../Supplier/LossRecordController.php | 2 +- .../Supplier/PurchaseRecordController.php | 2 +- app/Listeners/BusinessOrderUpdateListener.php | 36 ++++++++++--------- .../CombinationGoodsStockUpdateListener.php | 1 + app/Services/Business/BusinessClient.php | 1 + tests/Feature/BusinessOrderUpdateTest.php | 16 ++++----- 10 files changed, 39 insertions(+), 33 deletions(-) diff --git a/app/Console/Commands/KttOrderQuery.php b/app/Console/Commands/KttOrderQuery.php index 69498a8..d94243e 100644 --- a/app/Console/Commands/KttOrderQuery.php +++ b/app/Console/Commands/KttOrderQuery.php @@ -6,6 +6,7 @@ use App\Models\Shop; use App\Services\Business\BusinessFactory; use App\Utils\DateTimeUtils; use Illuminate\Console\Command; +use Illuminate\Support\Facades\Log; class KttOrderQuery extends Command { diff --git a/app/Events/BusinessOrdersUpdate.php b/app/Events/BusinessOrdersUpdate.php index dd0f49c..8ea5b72 100644 --- a/app/Events/BusinessOrdersUpdate.php +++ b/app/Events/BusinessOrdersUpdate.php @@ -47,19 +47,18 @@ class BusinessOrdersUpdate Log::error("sku 业务更新失败", (array)$this->businessGoodSku); } } catch (\Exception $exception) { - Log::error("库存告警发生异常", ["error" => $exception->getMessage()]); + Log::error("sku 业务更新发生异常", ["error" => $exception->getMessage()]); } } - private - function updateStock() + private function updateStock() { $this->goodsSku = GoodsSku::query() ->where('external_sku_id', $this->businessGoodSku['external_sku_id']) ->first(); if (is_null($this->goodsSku)) { - return false; + return true; } $oldStock = $this->goodsSku->stock; $stock = $this->goodsSku->stock + $this->num; @@ -82,8 +81,7 @@ class BusinessOrdersUpdate * * @return \Illuminate\Broadcasting\Channel|array */ - public - function broadcastOn() + public function broadcastOn() { return new PrivateChannel('channel-name'); } diff --git a/app/Http/Controllers/Permission/PermissionsController.php b/app/Http/Controllers/Permission/PermissionsController.php index 9bba43f..773034d 100644 --- a/app/Http/Controllers/Permission/PermissionsController.php +++ b/app/Http/Controllers/Permission/PermissionsController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use App\Models\Log as LogModel; use App\Utils\ArrayUtils; use App\Utils\FormatUtils; +use Illuminate\Support\Facades\Log; use Spatie\Permission\Models\Permission; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; diff --git a/app/Http/Controllers/Supplier/DailyStockRecordController.php b/app/Http/Controllers/Supplier/DailyStockRecordController.php index 1077abf..499254c 100644 --- a/app/Http/Controllers/Supplier/DailyStockRecordController.php +++ b/app/Http/Controllers/Supplier/DailyStockRecordController.php @@ -41,7 +41,7 @@ class DailyStockRecordController extends Controller $query->where('external_sku_id', '=', $request->external_sku_id); }); } - $dailyStockRecord = $build->paginate($request->get('per_page')); + $dailyStockRecord = $build->orderByDesc("id")->paginate($request->get('per_page')); return JsonResource::collection($dailyStockRecord); } diff --git a/app/Http/Controllers/Supplier/LossRecordController.php b/app/Http/Controllers/Supplier/LossRecordController.php index 75bb2a1..1615960 100644 --- a/app/Http/Controllers/Supplier/LossRecordController.php +++ b/app/Http/Controllers/Supplier/LossRecordController.php @@ -42,7 +42,7 @@ class LossRecordController extends Controller $query->where('name', 'like', '%' . $request->title . '%'); }); } - $dailyStockRecord = $builder->paginate($request->get('per_page')); + $dailyStockRecord = $builder->orderByDesc("id")->paginate($request->get('per_page')); return JsonResource::collection($dailyStockRecord); } diff --git a/app/Http/Controllers/Supplier/PurchaseRecordController.php b/app/Http/Controllers/Supplier/PurchaseRecordController.php index 66c4e46..b0ce3e7 100644 --- a/app/Http/Controllers/Supplier/PurchaseRecordController.php +++ b/app/Http/Controllers/Supplier/PurchaseRecordController.php @@ -44,7 +44,7 @@ class PurchaseRecordController extends Controller $query->where('name', 'like', '%' . $request->title . '%'); }); } - $dailyStockRecord = $builder->paginate($request->get('per_page')); + $dailyStockRecord = $builder->orderByDesc("id")->paginate($request->get('per_page')); return JsonResource::collection($dailyStockRecord); } diff --git a/app/Listeners/BusinessOrderUpdateListener.php b/app/Listeners/BusinessOrderUpdateListener.php index 820c267..5ab8391 100644 --- a/app/Listeners/BusinessOrderUpdateListener.php +++ b/app/Listeners/BusinessOrderUpdateListener.php @@ -42,22 +42,26 @@ class BusinessOrderUpdateListener implements ShouldQueue public function handle(BusinessOrdersUpdate $event) { try { - //查询库存是否满足告警规则 - $skuId = $event->goodsSku->id; - $nowTime = Carbon::now()->toDateTimeString(); - //查找最后一次盘点数据 - $dailyStockRecord = DailyStockRecord::query()->where("sku_id", '=', $skuId)-> - where("inventory_time", '<', $nowTime)->orderByDesc('id')->first(); - $inventory = $dailyStockRecord['inventory'] ?? 0; - $expireTime = Carbon::now()->addMinutes(30)->toDateTimeString(); - $proportion = Cache::remember(CacheKeyEnum::STOCK_RULE_PROPORTION, $expireTime, function () { - $developerConfig = DeveloperConfig::query()->where("key", "=", DevConfigKeyEnum::STOCK_RULE_PROPORTION)->first(); - return $developerConfig['value'] ?? DevConfigKeyEnum::DEFAULT_STOCK_RULE_PROPORTION; - }); - //库存比例小于最近盘点多少告警 一天也只是告警一次 - if ($inventory > 10 && $inventory * $proportion > $event->goodsSku->stock) { - $messageService = new MessageService(); - $messageService->createLowerStockNoticeMessage($inventory, $event->goodsSku->toArray()); + + if(!empty($event->goodsSku)){ + //查询库存是否满足告警规则 + $skuId = $event->goodsSku->id; + $nowTime = Carbon::now()->toDateTimeString(); + //查找最后一次盘点数据 + $dailyStockRecord = DailyStockRecord::query()->where("sku_id", '=', $skuId)-> + where("inventory_time", '<', $nowTime)->orderByDesc('id')->first(); + + $inventory = $dailyStockRecord['inventory'] ?? 0; + $expireTime = Carbon::now()->addMinutes(30)->toDateTimeString(); + $proportion = Cache::remember(CacheKeyEnum::STOCK_RULE_PROPORTION, $expireTime, function () { + $developerConfig = DeveloperConfig::query()->where("key", "=", DevConfigKeyEnum::STOCK_RULE_PROPORTION)->first(); + return $developerConfig['value'] ?? DevConfigKeyEnum::DEFAULT_STOCK_RULE_PROPORTION; + }); + //库存比例小于最近盘点多少告警 一天也只是告警一次 + if ($inventory > 10 && $inventory * $proportion > $event->goodsSku->stock) { + $messageService = new MessageService(); + $messageService->createLowerStockNoticeMessage($inventory, $event->goodsSku->toArray()); + } } }catch(\Exception $exception) { Log::error("库存告警发生异常",["error"=>$exception->getMessage()]); diff --git a/app/Listeners/CombinationGoodsStockUpdateListener.php b/app/Listeners/CombinationGoodsStockUpdateListener.php index 0c119d9..9f0d6d2 100644 --- a/app/Listeners/CombinationGoodsStockUpdateListener.php +++ b/app/Listeners/CombinationGoodsStockUpdateListener.php @@ -77,6 +77,7 @@ class CombinationGoodsStockUpdateListener implements ShouldQueue $updateIds[] = $goodsSku->id; } } + Log::info("updateIds:", $updateIds); // 计算主商品库存 if ($combinationGoodsItemIds) { $goodsSkuIds = CombinationGood::query() diff --git a/app/Services/Business/BusinessClient.php b/app/Services/Business/BusinessClient.php index 79d5e1a..a32a593 100644 --- a/app/Services/Business/BusinessClient.php +++ b/app/Services/Business/BusinessClient.php @@ -94,6 +94,7 @@ abstract class BusinessClient } $orderItem->update($item); } + // 增量更新库存 if ($num && $item['external_sku_id']) { event(new BusinessOrdersUpdate($orderItem, $num)); diff --git a/tests/Feature/BusinessOrderUpdateTest.php b/tests/Feature/BusinessOrderUpdateTest.php index 7bb18bb..233f719 100644 --- a/tests/Feature/BusinessOrderUpdateTest.php +++ b/tests/Feature/BusinessOrderUpdateTest.php @@ -20,14 +20,14 @@ class BusinessOrderUpdateTest extends TestCase */ public function testBasicTest() { - /* $shop = new \App\Models\Shop(); - $shop->id = 19; - $shop->plat_id = 1; - $shop->name = "test"; - $shop->access_token = "7e00e77428cf45348cb1ca190dc769670377bd0c"; - $endTime = DateTimeUtils::getMicroTime(); - $beginTime = $endTime - 2*60*60*1000; - BusinessFactory::init()->make("快团团")->setShop($shop)->downloadAfterSaleOrdersAndSave($beginTime, $endTime, 1);*/ +// $shop = new \App\Models\Shop(); +// $shop->id = 19; +// $shop->plat_id = 1; +// $shop->name = "test"; +// $shop->access_token = "7e00e77428cf45348cb1ca190dc769670377bd0c"; +// $endTime = DateTimeUtils::getMicroTime(); +// $beginTime = $endTime - 2*60*60*1000; +// BusinessFactory::init()->make("快团团")->setShop($shop)->downloadOrdersAndSave($beginTime, $endTime); } }