|
|
@@ -2,9 +2,14 @@
|
|
|
|
|
|
namespace App\Services;
|
|
|
|
|
|
+use App\OrderPackage;
|
|
|
+use App\OrderPackageCommodities;
|
|
|
+use App\RejectedBill;
|
|
|
+use App\RejectedBillItem;
|
|
|
use App\Traits\ServiceAppAop;
|
|
|
use App\WorkOrderCommodities;
|
|
|
use App\WorkOrderDetail;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
class WorkOrderCommoditiesService
|
|
|
{
|
|
|
@@ -106,4 +111,104 @@ class WorkOrderCommoditiesService
|
|
|
{
|
|
|
$detail->commodities()->update(['tag' => 1]);
|
|
|
}
|
|
|
+
|
|
|
+ public function getOrderCommoditiesEqualWorkOrderDetailCommoditiesMap(WorkOrderDetail $workOrderDetail): array
|
|
|
+ {
|
|
|
+ $query = OrderPackage::query()->select('id')->where('order_id', $workOrderDetail->workOrder->order_id);
|
|
|
+ $order_commodities = OrderPackageCommodities::query()->with('commodity.barcodes')->whereIn('order_package_id', $query)->get();
|
|
|
+ $query = DB::table('order_issue_rejected_bill')->select('logistic_number_return')->where('order_id', $workOrderDetail->workOrder->order_id);
|
|
|
+ $query = RejectedBill::query()->select('id')->whereIn('logistic_number_return',$query->get()->map(function ($item){
|
|
|
+ return $item->logistic_number_return;
|
|
|
+ })->toArray());
|
|
|
+ $rejected_items = RejectedBillItem::query()->with('barcode','quality')->whereIn('id_rejected_bill',$query)->get();
|
|
|
+ return $this->getEqualMapByRejectedBillAndWorkOrderCommodity($order_commodities,$rejected_items);
|
|
|
+ }
|
|
|
+
|
|
|
+ private function getEqualMapByRejectedBillAndWorkOrderCommodity($order_commodities,$rejectedBillItems): array
|
|
|
+ {
|
|
|
+ $rejected_bill_items_map = $this->getRejectedBillItemMap($rejectedBillItems);
|
|
|
+ $order_commodities_map = $this->getOrderCommoditiesMap($order_commodities,$rejected_bill_items_map);
|
|
|
+ return $this->getEqualMap($order_commodities_map,$rejected_bill_items_map);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getRejectedBillItemMap($rejectedBillItems): array
|
|
|
+ {
|
|
|
+ $map = [];
|
|
|
+ $rejectedBillItems->each(function($item)use(&$map){
|
|
|
+ $key = $item->barcode_goods;
|
|
|
+ $quality_label = $item->quality_label;
|
|
|
+ if(!array_key_exists($key,$map)){
|
|
|
+ $map[$key] = [
|
|
|
+ 'sku' => $key,
|
|
|
+ 'quality_label' => [
|
|
|
+ "${quality_label}"=> [
|
|
|
+ "quality_label" => $quality_label, "amount" => $item->amount,
|
|
|
+ ],
|
|
|
+ ],
|
|
|
+ 'name' => $item->name_goods,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ if(!array_key_exists($quality_label,$map[$key]['quality_label'])){
|
|
|
+ $map[$key]['quality_label'][$quality_label]['amount'] = 0;
|
|
|
+ $map[$key]['quality_label'][$quality_label]['quality_label'] = $quality_label;
|
|
|
+ }
|
|
|
+ $map[$key]['quality_label'][$quality_label]['amount'] += $item->amount;
|
|
|
+ });
|
|
|
+ return $map;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getOrderCommoditiesMap($orderCommodities,$rejectedBillMap): array
|
|
|
+ {
|
|
|
+ $map = [];
|
|
|
+ if (!$orderCommodities) return $map;
|
|
|
+ $barcodes = array_keys($rejectedBillMap);
|
|
|
+ foreach ($orderCommodities as $order_commodity) {
|
|
|
+ $commodity_barcodes = $order_commodity->commodity->barcodes->map(function($item){
|
|
|
+ return $item->code;
|
|
|
+ })->toArray();
|
|
|
+ $key = $order_commodity->commodity->sku;
|
|
|
+ if($commodity_barcodes){
|
|
|
+ $codes = array_intersect($barcodes,$commodity_barcodes);
|
|
|
+ $key = array_shift($codes);
|
|
|
+ }
|
|
|
+ if (!array_key_exists($key,$map)){
|
|
|
+ $map[$key] = [
|
|
|
+ 'sku' => $key,
|
|
|
+ 'amount' => 0,
|
|
|
+ 'name' => $order_commodity->commodity->name,
|
|
|
+ ];
|
|
|
+ $map[$key]['amount'] += (int) $order_commodity->amount;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $map;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getEqualMap($orderCommodityMap,$rejectedBillMap): array
|
|
|
+ {
|
|
|
+ $map = [];
|
|
|
+ foreach ($orderCommodityMap as $key=>$item){
|
|
|
+ $map[$key] = [
|
|
|
+ 'order_commodity_sku' => $key,
|
|
|
+ 'order_commodity_name' => $item['name'],
|
|
|
+ 'order_commodity_amount' => $item['amount'],
|
|
|
+ 'rejected_item_sku' => isset($rejectedBillMap[$key]) ? $key : '',
|
|
|
+ 'rejected_item_quality_label' => $rejectedBillMap[$key]['quality_label'] ?? [],
|
|
|
+ 'rejected_item_name' => $rejectedBillMap[$key]['name'] ?? '',
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ foreach ($rejectedBillMap as $key=>$item){
|
|
|
+ if(!array_key_exists($key,$orderCommodityMap)){
|
|
|
+ $map[$key] = [
|
|
|
+ 'order_commodity_sku' => isset($orderCommodityMap[$key]) ? $key : '',
|
|
|
+ 'order_commodity_name' => $orderCommodityMap['name'] ?? null,
|
|
|
+ 'order_commodity_amount' => $orderCommodityMap['amount'] ?? null,
|
|
|
+ 'rejected_item_sku' => $key,
|
|
|
+ 'rejected_item_quality_label' => $item['quality_label'] ?? [],
|
|
|
+ 'rejected_item_name' => $item['name'] ?? '',
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $map;
|
|
|
+ }
|
|
|
+
|
|
|
}
|