From 660fd24ed0c8d62e01cdacac2f3aecdde5774ebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=B8=96=E7=95=8C?= <642747453@qq.com> Date: Wed, 26 Jul 2023 13:58:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20#10000=20=E8=AE=A2=E5=8D=95=E7=AD=9B?= =?UTF-8?q?=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/Test.php | 1 + app/Filters/BusinessOrderFilter.php | 38 ++++++ app/Filters/GoodsSkuFilter.php | 5 + .../Business/BusinessOrderController.php | 67 +++++++++- .../Controllers/Goods/GoodsSkusController.php | 22 ++- app/Models/BusinessOrder.php | 10 +- app/Models/GoodsSku.php | 3 +- app/Services/Business/BusinessClient.php | 13 ++ .../Business/KuaiTuanTuan/KuaiTuanTuan.php | 1 - ...goods_sku_num_to_business_orders_table.php | 40 ++++++ resources/frontend/src/api/goods.js | 8 ++ .../frontend/src/views/plat/faceSheet.vue | 4 +- .../frontend/src/views/plat/orderList.vue | 126 +++++++++++++----- routes/api.php | 1 + 14 files changed, 297 insertions(+), 42 deletions(-) create mode 100644 database/migrations/2023_07_25_143013_add_goods_sku_num_to_business_orders_table.php diff --git a/app/Console/Commands/Test.php b/app/Console/Commands/Test.php index 658154a..548d0fd 100644 --- a/app/Console/Commands/Test.php +++ b/app/Console/Commands/Test.php @@ -14,6 +14,7 @@ use App\Models\TodayPrice; use App\Services\Business\BusinessFactory; use App\Services\Business\KuaiTuanTuan\FaceSheet; use App\Utils\DateTimeUtils; +use Carbon\Carbon; use Illuminate\Console\Command; use Illuminate\Support\Facades\DB; use App\Jobs\BusinessGoodsSkuIncrQuantity; diff --git a/app/Filters/BusinessOrderFilter.php b/app/Filters/BusinessOrderFilter.php index 17045b3..1123581 100644 --- a/app/Filters/BusinessOrderFilter.php +++ b/app/Filters/BusinessOrderFilter.php @@ -2,6 +2,9 @@ namespace App\Filters; +use App\Models\BusinessOrderItem; +use Carbon\Carbon; + class BusinessOrderFilter extends Filters { protected function participateNo($value) @@ -43,4 +46,39 @@ class BusinessOrderFilter extends Filters { return $this->builder->where('after_sales_status', $value); } + + protected function confirmAtStart($value) + { + $start = Carbon::parse($value)->timestamp; + $start *= 1000; + + return $this->builder->where('confirm_at', '>=', $start); + } + + protected function confirmAtEnd($value) + { + $end = Carbon::parse($value)->timestamp; + $end *= 1000; + + return $this->builder->where('confirm_at', '<=', $end); + } + + protected function goodsSkuNum($value) + { + if (1 === $value) { + return $this->builder->where('goods_sku_num', '=', 1); + } + if (2 === $value) { + return $this->builder->where('goods_sku_num', '<=', 5) + ->where('goods_sku_num', '>=', 2); + } + if (6 === $value) { + return $this->builder->where('goods_sku_num', '>=', 6); + } + } + + protected function printStatus($value) + { + return $this->builder->where('print_status', $value); + } } diff --git a/app/Filters/GoodsSkuFilter.php b/app/Filters/GoodsSkuFilter.php index 82690cd..57a8751 100644 --- a/app/Filters/GoodsSkuFilter.php +++ b/app/Filters/GoodsSkuFilter.php @@ -23,4 +23,9 @@ class GoodsSkuFilter extends Filters { return $this->builder->where('external_sku_id', $value); } + + protected function isCombination($value) + { + return $this->builder->where('is_combination', $value); + } } diff --git a/app/Http/Controllers/Business/BusinessOrderController.php b/app/Http/Controllers/Business/BusinessOrderController.php index f0e6a67..34fab18 100644 --- a/app/Http/Controllers/Business/BusinessOrderController.php +++ b/app/Http/Controllers/Business/BusinessOrderController.php @@ -5,30 +5,89 @@ namespace App\Http\Controllers\Business; use App\Exports\OrderBlankExport; use App\Http\Controllers\Controller; use App\Models\BusinessOrder; +use App\Models\BusinessOrderItem; +use App\Models\GoodsSku; use App\Models\Shop; use App\Utils\DateTimeUtils; use Carbon\Carbon; use Illuminate\Http\Request; use App\Http\Resources\BusinessOrderResource; +use Illuminate\Support\Facades\DB; use Maatwebsite\Excel\Facades\Excel; class BusinessOrderController extends Controller { public function index(Request $request) { - $businessOrders = BusinessOrder::query() - ->where('shop_id', '<>', 8) + $builder = BusinessOrder::query() ->with([ 'shop:id,name', 'items:id,business_order_id,goods_name,goods_number,external_sku_id' ]) - ->orderByDesc('confirm_at') - ->filter() + ->filter(); + $externalSkuIds = $request->get('external_sku_ids'); + if ($externalSkuIds) { + $ids = BusinessOrderItem::query()->whereIn('external_sku_id', $externalSkuIds)->pluck('business_order_id'); + $builder->whereIn('id', $ids); + } + $businessOrders = $builder->orderByDesc('confirm_at') ->paginate($request->get('per_page')); return BusinessOrderResource::collection($businessOrders); } + private function getOrderIdsWitmGoodsNum($goodsSkuNum, $orders) + { + $map = [ + 1 => [ + 'min' => 1, + 'max' => 1 + ], + 2 => [ + 'min' => 2, + 'max' => 5 + ], + 6 => [ + 'min' => 6, + 'max' => 999999 + ], + ]; + $numMap = $map[$goodsSkuNum]; + + // 获取订单商品编码 + $externalSkuIds = []; + foreach ($orders as $order) { + foreach ($order->items as $item) { + if ($item['external_sku_id']) { + $externalSkuIds [] = $item['external_sku_id']; + } + } + } + $goodsSkus = GoodsSku::query() + ->with('combinationGoods') + ->whereIn('external_sku_id', $externalSkuIds) + ->get('external_sku_id'); + $goodsSkuItems = []; + foreach ($goodsSkus as $goodsSku) { + $goodsSkuItems[$goodsSku['external_sku_id']] = $goodsSku->combinationGoods->count() ?: 1; + } + + $ids = []; + foreach ($orders as $order) { + $itemNum = 0; + foreach ($order->items as $item) { + if (0 === $item['cancel_status']) { + $itemNum = isset($goodsSkuItems[$item['external_sku_id']]) ? $itemNum + $goodsSkuItems[$item['external_sku_id']] : $itemNum + 1; + } + } + if ($itemNum >= $numMap['min'] && $itemNum <= $numMap['max']) { + $ids[] = $order['id']; + } + } + + return $ids; + } + public function exportOrderBlank(Request $request) { $shopId = $request->get('shop_id'); diff --git a/app/Http/Controllers/Goods/GoodsSkusController.php b/app/Http/Controllers/Goods/GoodsSkusController.php index 09c0b0d..7a0207e 100644 --- a/app/Http/Controllers/Goods/GoodsSkusController.php +++ b/app/Http/Controllers/Goods/GoodsSkusController.php @@ -52,7 +52,7 @@ class GoodsSkusController extends Controller }]) ->where('is_combination', 0) ->orderBy('stock', 'desc') - ->paginate($request->get('per_page')); + ->paginate(1); $fields = implode(',', [ 'shop_id', 'external_sku_id', @@ -561,4 +561,24 @@ class GoodsSkusController extends Controller 'other_num' => $otherNum, ]); } + + public function goodsSkusList(Request $request) + { + $title = $request->input('title'); + $data = []; + $goodsSkus = GoodsSku::query() + ->with('goods:id,title') + ->whereHas('goods', function ($query) use ($title) { + $query->where('title', 'like', '%' . $title . '%'); + }) + ->get(['title', 'external_sku_id', 'goods_id']); + foreach ($goodsSkus as $goodsSku) { + $data[] = [ + 'external_sku_id' => $goodsSku['external_sku_id'], + 'title' => $goodsSku['goods']['title'] . ' ' . $goodsSku['title'] + ]; + } + + return $data; + } } diff --git a/app/Models/BusinessOrder.php b/app/Models/BusinessOrder.php index 71d945c..ea9137e 100644 --- a/app/Models/BusinessOrder.php +++ b/app/Models/BusinessOrder.php @@ -17,6 +17,10 @@ class BusinessOrder extends Model 'cancel_status', 'after_sales_status', 'supply_participate_no', + 'confirm_at_start', + 'confirm_at_end', + 'goods_sku_num', + 'print_status', ]; protected $fillable = [ @@ -63,21 +67,21 @@ class BusinessOrder extends Model public function getShippingStatusAttribute($value) { - $map = ['未发货', '已发货', '部分发货']; + $map = ['未发货', '已发货', '部分发货', '' => '']; return $map[$value]; } public function getIsSupplierAttribute($value) { - $map = ['帮忙团订单', '自卖团订单']; + $map = ['帮忙团订单', '自卖团订单', '' => '']; return $map[$value]; } public function getCancelStatusAttribute($value) { - $map = ['未取消', '已取消']; + $map = ['未取消', '已取消', '' => '']; return $map[$value]; } diff --git a/app/Models/GoodsSku.php b/app/Models/GoodsSku.php index bede6a7..74c1383 100644 --- a/app/Models/GoodsSku.php +++ b/app/Models/GoodsSku.php @@ -13,7 +13,8 @@ class GoodsSku extends Model 'sku_title', 'status', 'exclude_ids', - 'external_sku_id' + 'external_sku_id', + 'is_combination', ]; protected $fillable = [ diff --git a/app/Services/Business/BusinessClient.php b/app/Services/Business/BusinessClient.php index 2143cd6..a50d27f 100644 --- a/app/Services/Business/BusinessClient.php +++ b/app/Services/Business/BusinessClient.php @@ -45,9 +45,20 @@ abstract class BusinessClient } else { $orderRecord->update($order); } + $goodsSkuNum = 0; foreach ($order['sub_order_list'] as $item) { $item['shop_id'] = $shopId; $orderItem = BusinessOrderItem::firstOrNew(['shop_id' => $shopId, 'business_order_id' => $orderRecord->id, 'goods_id' => $item['goods_id'], 'sku_id' => $item['sku_id']], $item); + if ($item['external_sku_id']) { + $goodsSku = GoodsSku::query() + ->with('combinationGoods') + ->where('external_sku_id', $item['external_sku_id']) + ->first('external_sku_id'); + $combinationNum = $goodsSku ? ($goodsSku->combinationGoods->count() ?: 1) : 1; + $goodsSkuNum += $combinationNum; + } else { + $goodsSkuNum++; + } $num = 0; $cancelNum = $item['already_cancel_number'] ?? 0; if (empty($orderItem->id)) { @@ -78,6 +89,8 @@ abstract class BusinessClient event(new BusinessOrdersUpdate($orderItem, $num)); } } + $orderRecord->goods_sku_num = $goodsSkuNum; + $orderRecord->save(); } } diff --git a/app/Services/Business/KuaiTuanTuan/KuaiTuanTuan.php b/app/Services/Business/KuaiTuanTuan/KuaiTuanTuan.php index 191d081..a4f079a 100644 --- a/app/Services/Business/KuaiTuanTuan/KuaiTuanTuan.php +++ b/app/Services/Business/KuaiTuanTuan/KuaiTuanTuan.php @@ -45,7 +45,6 @@ class KuaiTuanTuan extends BusinessClient ['shop_id' => $this->shop->id], $accessToken ); - $this->shop->update($accessToken); } return $this->shop; diff --git a/database/migrations/2023_07_25_143013_add_goods_sku_num_to_business_orders_table.php b/database/migrations/2023_07_25_143013_add_goods_sku_num_to_business_orders_table.php new file mode 100644 index 0000000..a37b1f3 --- /dev/null +++ b/database/migrations/2023_07_25_143013_add_goods_sku_num_to_business_orders_table.php @@ -0,0 +1,40 @@ +integer('goods_sku_num')->default(0)->comment('订单内不同商品种类数量'); + $table->tinyInteger('print_status')->default(0)->comment('订单内不同商品种类数量'); + $table->index('goods_sku_num'); + $table->index('print_status'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('business_orders', function (Blueprint $table) { + $table->dropColumn(['goods_sku_num', 'print_status']); + $table->dropIndex('goods_sku_num'); + $table->dropIndex('print_status'); + }); + } +} diff --git a/resources/frontend/src/api/goods.js b/resources/frontend/src/api/goods.js index 4f465a0..f357f90 100644 --- a/resources/frontend/src/api/goods.js +++ b/resources/frontend/src/api/goods.js @@ -104,6 +104,14 @@ export function goodsSkuLocation(params) { }); } +export function goodsSkusList(title) { + return http({ + url: "/api/goodsSkusList", + method: "get", + params: { title: title } + }); +} + export function importGoodsSkuLocation(params) { return http({ url: "/api/goods_sku_location", diff --git a/resources/frontend/src/views/plat/faceSheet.vue b/resources/frontend/src/views/plat/faceSheet.vue index 4ced36b..2c5a556 100644 --- a/resources/frontend/src/views/plat/faceSheet.vue +++ b/resources/frontend/src/views/plat/faceSheet.vue @@ -8,8 +8,8 @@