| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- <?php
- 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
- {
- use ServiceAppAop;
- protected $modelClass = WorkOrderCommodities::class;
- public function createWorkOrderCommodityByJson(WorkOrderDetail $detail, $json)
- {
- $obj = json_decode($json);
- $detail->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;
- }
- }
|