From f1179ececfff52e0a9fd0ad0ae4013cde202e586 Mon Sep 17 00:00:00 2001 From: mkm <727897186@qq.com> Date: Fri, 7 Jun 2024 13:38:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(store=5Fproduct):=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=95=86=E5=93=81=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=A4=E6=98=93=E7=BB=9F=E8=AE=A1=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/WorkbenchController.php | 2 +- .../StoreBranchProductController.php | 4 +- .../store_product/StoreProductController.php | 26 +++++- .../StoreBranchProductLists.php | 5 +- app/queue/redis/StoreStorageSend.php | 90 +++++++++++++++++-- 5 files changed, 111 insertions(+), 16 deletions(-) diff --git a/app/admin/controller/WorkbenchController.php b/app/admin/controller/WorkbenchController.php index 49d431c85..5449b6dfd 100644 --- a/app/admin/controller/WorkbenchController.php +++ b/app/admin/controller/WorkbenchController.php @@ -826,7 +826,7 @@ class WorkbenchController extends BaseAdminController } //-------------------------------交易统计---------------------------------------// //当日订单金额 - public function top__trade() + public function top_trade() { $data = [ "left" => [ diff --git a/app/admin/controller/store_branch_product/StoreBranchProductController.php b/app/admin/controller/store_branch_product/StoreBranchProductController.php index 9c586c698..eec659f37 100644 --- a/app/admin/controller/store_branch_product/StoreBranchProductController.php +++ b/app/admin/controller/store_branch_product/StoreBranchProductController.php @@ -4,7 +4,7 @@ namespace app\admin\controller\store_branch_product; use app\admin\controller\BaseAdminController; -use app\admin\lists\store_product\StoreProductLists; +use app\admin\lists\store_branch_product\StoreBranchProductLists; use app\admin\logic\store_product\StoreProductLogic; use app\admin\validate\store_product\StoreProductValidate; use app\common\model\store_branch_product\StoreBranchProduct; @@ -26,7 +26,7 @@ class StoreBranchProductController extends BaseAdminController */ public function lists() { - return $this->dataLists(new StoreProductLists()); + return $this->dataLists(new StoreBranchProductLists()); } diff --git a/app/admin/controller/store_product/StoreProductController.php b/app/admin/controller/store_product/StoreProductController.php index 4cf64caf8..0bfbb0d32 100644 --- a/app/admin/controller/store_product/StoreProductController.php +++ b/app/admin/controller/store_product/StoreProductController.php @@ -7,7 +7,7 @@ use app\admin\controller\BaseAdminController; use app\admin\lists\store_product\StoreProductLists; use app\admin\logic\store_product\StoreProductLogic; use app\admin\validate\store_product\StoreProductValidate; - +use Webman\RedisQueue\Redis; /** * 商品列表控制器 @@ -91,5 +91,25 @@ class StoreProductController extends BaseAdminController return $this->data($result); } - -} \ No newline at end of file + /** + * 商品导入到门店 + */ + public function import() + { + $product_arr = $this->request->post('product_arr'); + $store_arr = $this->request->post('store_arr'); + if (count($store_arr) == 1) { + $store_id = $store_arr[0]; + foreach ($product_arr as $key => $arr) { + Redis::send('store-storage', ['product_arr' => $arr, 'store_id' => $store_id, 'admin_id' => $this->adminId]); + } + } else { + foreach ($product_arr as $key => $arr) { + foreach ($store_arr as $k => $store_id) { + Redis::send('store-storage', ['product_arr' => $arr, 'store_id' => $store_id, 'admin_id' => $this->adminId]); + } + } + } + return $this->success('已导入后台队列,请在门店入库记录中查看'); + } +} diff --git a/app/admin/lists/store_branch_product/StoreBranchProductLists.php b/app/admin/lists/store_branch_product/StoreBranchProductLists.php index d9b1cb6ba..df8ad395d 100644 --- a/app/admin/lists/store_branch_product/StoreBranchProductLists.php +++ b/app/admin/lists/store_branch_product/StoreBranchProductLists.php @@ -28,7 +28,7 @@ class StoreBranchProductLists extends BaseAdminDataLists implements ListsSearchI public function setSearch(): array { return [ - '=' => ['product_id', 'cate_id'], + '=' => ['product_id', 'cate_id','store_id'], '%like%' => ['store_name'], ]; } @@ -47,7 +47,7 @@ class StoreBranchProductLists extends BaseAdminDataLists implements ListsSearchI { $status = $this->params['status'] ?? ''; return StoreBranchProduct::where($this->searchWhere) - ->field(['id', 'product_id', 'image', 'store_name', 'cate_id', 'price', 'sales', 'stock', 'unit', 'cost', 'status']) + ->field(['id','store_id','product_id', 'image', 'store_name', 'cate_id', 'price', 'sales', 'stock', 'unit', 'cost', 'status']) ->when(!empty($this->adminInfo['store_id']), function ($query) { $query->where('store_id', $this->adminInfo['store_id']); }) @@ -66,6 +66,7 @@ class StoreBranchProductLists extends BaseAdminDataLists implements ListsSearchI ->order(['sort' => 'desc', 'id' => 'desc']) ->select() ->each(function ($item) { + $item['store_name']=SystemStore::where('id',$item['store_id'])->value('name'); $item['unit_name'] = StoreProductUnit::where('id', $item['unit'])->value('name'); $item['cate_name'] = StoreCategory::where('id', $item['cate_id'])->value('name'); return $item; diff --git a/app/queue/redis/StoreStorageSend.php b/app/queue/redis/StoreStorageSend.php index 16ecc6598..7320969b9 100644 --- a/app/queue/redis/StoreStorageSend.php +++ b/app/queue/redis/StoreStorageSend.php @@ -3,8 +3,14 @@ namespace app\queue\redis; use app\admin\logic\store_product\StoreProductLogic; +use app\common\model\store_branch_product\StoreBranchProduct; +use app\common\model\store_branch_product_attr_value\StoreBranchProductAttrValue; +use app\common\model\store_product\StoreProduct; +use app\common\model\store_product_attr_value\StoreProductAttrValue; +use app\common\model\system_store_storage\SystemStoreStorage; use Webman\RedisQueue\Consumer; use support\Log; +use think\facade\Db; /** * 门店库存记录商品 @@ -12,7 +18,7 @@ use support\Log; class StoreStorageSend implements Consumer { // 要消费的队列名 - public $queue = 'store_storage'; + public $queue = 'store-storage'; // 连接名,对应 plugin/webman/redis-queue/redis.php 里的连接` public $connection = 'default'; @@ -20,15 +26,83 @@ class StoreStorageSend implements Consumer // 消费 public function consume($data) { - // $product_id=$data['product_id']; - // $store_id=$data['store_id']; - // $store_id=$data['store_id']; - // StoreBranchProduct::w + $product_arr = $data['product_arr']; + $store_id = $data['store_id']; + $admin_id = $data['admin_id']; + Log::error('StoreStorageSend: ' . json_encode($data)); + $find = StoreProduct::where('id', $product_arr['id'])->findOrEmpty()->toArray(); + $store_find = StoreBranchProduct::where(['product_id' => $product_arr['id'], 'store_id' => $store_id])->findOrEmpty()->toArray(); + if ($find && !$store_find) { + $attr_value = StoreProductAttrValue::where('product_id', $product_arr['id'])->findOrEmpty(); + Db::startTrans(); + try { + $product = [ + 'product_id' => $find['id'], + 'image' => $find['image'], + 'store_name' => $find['store_name'], + 'store_info' => $find['store_info'], + 'keyword' => $find['keyword'], + 'bar_code' => $find['bar_code'], + 'cate_id' => $find['cate_id'], + 'price' => $find['price'], + 'unit' => $find['unit'], + 'store_id' => $store_id, + 'sales' => 0, + 'stock' => 0, + ]; + $branch=StoreBranchProduct::create($product); + $arr = [ + 'product_id' => $product_arr['id'], + 'store_id' => $store_id, + 'unique' => setUnique($branch['id'], '', 0), + 'sales' => 0, + 'type' => 0, + 'bar_code' => $attr_value['bar_code'] + ]; + StoreBranchProductAttrValue::create($arr); + $this->storage($find, $store_id, $admin_id, $product_arr); + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + Log::error('store-storage队列消费失败: ' . $e->getMessage().',line:'.$e->getLine().',file:'.$e->getFile()); + return false; + } + } else { + Db::startTrans(); + try { + $this->storage($find, $store_id, $admin_id, $product_arr); + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + Log::error('store-storage队列消费失败: ' . $e->getMessage().',line:'.$e->getLine().',file:'.$e->getFile()); + return false; + } + } } + + public function storage($find, $store_id, $admin_id, $product_arr) + { + $storage = [ + 'product_id' => $product_arr['id'], + 'store_id' => $store_id, + 'nums' => $product_arr['stock'], + 'admin_id' => $admin_id, + ]; + if ($find['stock'] < $product_arr['stock']) { + $storage['status'] = -1; + $storage['mark'] = '库存不足,主库存为:' . $find['stock']; + SystemStoreStorage::create($storage); + }else{ + SystemStoreStorage::create($storage); + StoreProduct::where('id', $product_arr['id'])->dec('stock',$product_arr['stock'])->update(); + } + } + public function onConsumeFailure(\Throwable $e, $package) { - $package['max_attempts']=0; - Log::error('复制商品失败product_id:'.$package['data']['product_id']); + $package['max_attempts'] = 0; return $package; } -} \ No newline at end of file +}