where('plat_id', Shop::$PLAT_KTT) ->pluck('id'); $builder = BusinessOrder::query() ->with([ 'shop:id,name', 'items:id,business_order_id,goods_name,goods_number,external_sku_id' ]) ->whereIn('shop_id', $shopIds) ->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'); $startNo = $request->get('start_no'); $endNo = $request->get('end_no'); $isSupplier = $request->get('is_supplier'); $field = 'participate_no'; if ($isSupplier) { $field = 'supply_participate_no'; } $startTime = BusinessOrder::query() ->where('shop_id', $shopId) ->where('is_supplier', $isSupplier) ->where($field, $startNo) ->orderByDesc('id') ->value('confirm_at'); if (empty($startTime)) { exit('开始跟团号订单未查询到或正在同步中,请稍后再次获取'); } $startTime = DateTimeUtils::getMicroTime($startTime); $endTime = BusinessOrder::query() ->where('shop_id', $shopId) ->where('is_supplier', $isSupplier) ->where($field, $endNo) ->orderByDesc('id') ->value('confirm_at'); if (empty($endTime)) { exit('结束跟团号订单未查询到或正在同步中,请稍后再次获取'); } $endTime = DateTimeUtils::getMicroTime($endTime); if ($startTime > $endTime) { exit('开始跟团号订单 成交时间 大于 结束跟团号订单时间,请查验后再试!'); } $orders = BusinessOrder::query() ->with([ 'items:id,business_order_id,external_sku_id,goods_number,goods_name,already_cancel_number', 'items.goodsSkuLocation:id,external_sku_id,location,goods_name' ]) ->where('shop_id', $shopId) ->where('confirm_at', '>=', $startTime) ->where('confirm_at', '<=', $endTime) ->where('after_sales_status', 0) ->where('cancel_status', 0) ->where('is_supplier', $isSupplier) ->orderByDesc('confirm_at') ->get(['id', $field]); $distribution = []; $no = []; foreach ($orders as $key => $order) { $index = $key + 1; $no[] = 'P' . $index . '(' . $order->$field . ')'; foreach ($order->items as $item) { $item = $item->toArray(); $num = $item['goods_number'] - $item['already_cancel_number']; if (empty($item['external_sku_id']) || empty($num)) { continue; } $local = $item['goods_sku_location'] ? $item['goods_sku_location']['location'] : '无'; $index = $key + 1; $index = "P{$index}*{$num}"; [$goodsCode, $skuCode] = explode('_', $item['external_sku_id']); if (isset($distribution[$item['external_sku_id']])) { $distribution[$item['external_sku_id']]['p'][] = $index; $distribution[$item['external_sku_id']]['num'] += $num; } else { $distribution[$item['external_sku_id']] = [ 'p' => [$index], 'local' => $local, 'num' => $num, 'goods_name' => $item['goods_name'], 'goods_code' => $goodsCode, 'sku_code' => $skuCode, ]; } } } $shopName = Shop::query()->where('id', $shopId)->value('name'); ob_end_clean(); return Excel::download(new OrderBlankExport($shopName, $no, $distribution), $shopName . date('Y-m-d H:i:s') . '.xlsx'); } public function groupActivity(Request $request, $shopId) { $todayTime = Carbon::today()->timestamp; $todayTime = DateTimeUtils::getMicroTime($todayTime); return BusinessOrder::query() ->where('shop_id', $shopId) ->where('confirm_at', '>=', $todayTime) ->groupBy(['activity_no', 'activity_title']) ->get(['activity_title', 'activity_no']) ->toArray(); } public function print(Request $request) { $shopIds = Shop::query() ->where('plat_id', Shop::$PLAT_KTT) ->pluck('id'); $builder = BusinessOrder::query() ->with('items') ->whereIn('shop_id', $shopIds) ->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->get(); $waybill = new WayBillService(); $waybill->setOrders($businessOrders); $waybill->get(); } }