commodities()->create([ 'work_order_id' => $detail->work_order_id ?? '', 'work_order_detail_id' =>$detail->id ?? '', 'commodity_id' => $obj->commodity_id ?? '', 'sku' => $obj->sku ?? '', 'amount' => $obj->amount ?? '', 'price' => $obj->price ?? '', 'logistic_number' => $obj->logistic_number ?? '', 'abnormal_amount' => $obj->abnormal_amount ?? '', 'check_amount' => $obj->check_amount ?? '', 'bao_shi_check_amount' => $obj->bao_shi_check_amount ?? '', 'reissue_logistic_number' => $obj->reissue_logistic_number ?? '', 'store_in_number' => $obj->store_in_number ?? '', 'check_result' => $obj->check_result ?? '', 'process_result' => $obj->process_result ?? '', 'abnormal_type' => $obj->abnormal_type ?? '', 'issue_type' => $detail->order_issue_type_id ?? '', 'out_order_number' => $detail->out_order_number ?? '', ]); } /** * 工单详情 * @param WorkOrderDetail $detail * @param $array */ public function createWorkOrderCommoditiesByJsonArray(WorkOrderDetail $detail, $array) { foreach ($array as $json) { $this->createWorkOrderCommodityByJson($detail, $json); } } /** * @param WorkOrderDetail $detail * @param $array */ public function updateWorkOrderCommoditiesByJsonArray(WorkOrderDetail $detail, $array) { foreach ($array as $json) { $this->updateWorkOrderCommoditiesByJson($detail, $json); } } /** * @param WorkOrderDetail $detail * @param $json */ public function updateWorkOrderCommoditiesByJson(WorkOrderDetail $detail, $json) { $obj = json_decode($json); $detail->commodities()->where('id', $obj->id)->update([ 'check_amount' => $obj->check_amount ?? '', 'bao_shi_check_amount' => $obj->bao_shi_check_amount ?? '', 'abnormal_amount' => $obj->abnormal_amount ?? '', 'abnormal_type' => $obj->abnormal_type ?? '', 'check_result' => $obj->check_result ?? '', 'price' => $obj->price ?? '', 'process_result' => $obj->process_result ?? '', 'process_result_info' => $obj->process_result_info ?? '', 'reissue_logistic_number' => $obj->reissue_logistic_number ?? '', // 补发单号 'store_in_amount' => $obj->store_in_amount ?? '', // 入库数量 'store_in_number' => $obj->store_in_number ?? '', // 入库单号 'out_order_number' => $obj->out_order_number ?? '', // 入库单号 'end_handle_result' => $obj->end_handle_result ?? '', // 最终处理 ]); } public function deleteCommodities($detail,$delete_ids) { if (!$delete_ids) return ; WorkOrderCommodities::query()->where('work_order_detail_id',$detail->id)->whereIn('id',$delete_ids)->delete(); } /** * 标记为未完成历史标记 * @param WorkOrderDetail $detail */ public function undoneTag(WorkOrderDetail $detail) { $detail->commodities()->update(['tag' => 2]); } /** * 标记为完成 * @param WorkOrderDetail $detail */ public function endDetail(WorkOrderDetail $detail) { $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; } }