whereIn('order_number', $params['order_number']); } return $query; } public function get(array $params) { return $this->conditionQuery($params)->get(); } public function create(array $params) { return RejectedBill::query()->create($params); } /** * 同步退回单号 * @param RejectedBill $rejectedBill */ public function syncOrderIssue($rejectedBill) { $rejectedBill->syncOrderIssue(); } public function syncLoadedStatusByAsnHerder($asnHerders) { $updateParams=$this->getNeedUpdateLoadedStatusByWms($asnHerders); if (!$updateParams)return; if (count($updateParams) > 1) $this->batchUpdate($updateParams); $updates=$this->getNeedUpdateCheckedStatusByWms($asnHerders); if (!$updates)return; if (count($updates) > 1) $this->batchUpdate($updates); } public function getNeedUpdateLoadedStatusByWms($asnHerders) { if ($asnHerders->isEmpty()) return null; $updateCollect = $this->getUpdateCollect($asnHerders); if ($updateCollect->isEmpty()) return null; $logisticNumberReturn = $this->getLogisticNumberReturn($updateCollect); $rejectedBills = $this->getRejectedBills($logisticNumberReturn); if (!$rejectedBills) return null; $updateParams = [[ 'logistic_number_return', 'is_loaded', 'updated_at' ]]; $updated_at = Carbon::now()->toDateTimeString(); /** @var DataHandlerService $dataHandlerService */ $dataHandlerService = app(DataHandlerService::class); $rejectedBills_map = $dataHandlerService->dataHeader(['logistic_number_return'], $rejectedBills); foreach ($updateCollect as $data) { if (!$data->asnreference3 && !$data->notes) { continue; } if ($data->asnreference3) { $rejectedBill = $dataHandlerService->getKeyValue(['logistic_number_return' => $data->asnreference3], $rejectedBills_map); if ($rejectedBill && $rejectedBill->is_loaded != 1) $updateParams[] = [ 'logistic_number_return' => $data->asnreference3, 'is_loaded' => 1, 'updated_at' => $updated_at, ]; } else { $result = []; preg_match("/[a-zA-Z]{0,5}\d{6,20}/", $data->notes, $result); if (count($result)<1) continue; $rejectedBill = $dataHandlerService->getKeyValue(['logistic_number_return' => $result[0]], $rejectedBills_map); if ($rejectedBill && $rejectedBill->is_loaded != 1) $updateParams[] = [ 'logistic_number_return' => $result[0], 'is_loaded' => 1, 'updated_at' => $updated_at, ]; unset($result); } } return $updateParams; } public function getUpdateCollect($asnHerders) { $updateCollect = collect(); foreach ($asnHerders as $asnHerder) { if ($asnHerder->asnType && $asnHerder->asnStatus && ($asnHerder->asnType->codename_c == '退货入库' || $asnHerder->asnType->codename_c == '其他入库') && ($asnHerder->asnStatus->codename_c == '完全收货' ||$asnHerder->asnStatus->codename_c == 'ASN关闭')) { $updateCollect->add($asnHerder); } } return $updateCollect; } public function getLogisticNumberReturn($updateCollect) { $logisticNumberReturn = []; foreach ($updateCollect as $data) { if (!$data->asnreference3 && !$data->notes) { continue; } if ($data->asnreference3) { array_push($logisticNumberReturn, $data->asnreference3); } else { $result = []; preg_match("/[a-zA-Z]{0,5}\d{6,20}/", $data->notes, $result); if (count($result) > 0) array_push($logisticNumberReturn, $result[0]); unset($result); } } return $logisticNumberReturn; } public function batchUpdate($params) { return app(BatchUpdateService::class)->batchUpdate('rejected_bills', $params); } public function getRejectedBills(array $logisticNumberReturn) { if (count($logisticNumberReturn) < 1) return null; return RejectedBill::query()->whereIn('logistic_number_return', $logisticNumberReturn)->get(); } public function getNeedUpdateCheckedStatusByWms($asnHerders) { if ($asnHerders->isEmpty()) return null; $logisticNumberReturn = $this->getLogisticNumberReturn($asnHerders); $rejectedBills = $this->getRejectedBills($logisticNumberReturn); if (!$rejectedBills) return null; $updateParams = [[ 'logistic_number_return', 'is_checked','checked_numbers','updated_at' ]]; $updated_at = Carbon::now()->toDateTimeString(); /** @var DataHandlerService $dataHandlerService */ $dataHandlerService = app(DataHandlerService::class); $rejectedBills_map = $dataHandlerService->dataHeader(['logistic_number_return'], $rejectedBills); foreach ($asnHerders as $data) { if (!$data->asnreference3 && !$data->notes) continue; if ($data->asnreference3) { $rejectedBill = $dataHandlerService->getKeyValue(['logistic_number_return' => $data->asnreference3], $rejectedBills_map); if ($rejectedBill && $rejectedBill->is_checked != 1) $updateParams[] = [ 'logistic_number_return' => $data->asnreference3, 'is_checked' => 1, 'checked_numbers' => $rejectedBill->makeCheckedNumbers(), 'updated_at' => $updated_at, ]; } else { $result = []; preg_match("/[a-zA-Z]{0,5}\d{6,20}/", $data->notes, $result); if (count($result)<1) continue; $rejectedBill = $dataHandlerService->getKeyValue(['logistic_number_return' => $result[0]], $rejectedBills_map); if ($rejectedBill && $rejectedBill->is_checked != 1) $updateParams[] = [ 'logistic_number_return' => $result[0], 'is_checked' => 1, 'checked_numbers' => $rejectedBill->makeCheckedNumbers(), 'updated_at' => $updated_at, ]; unset($result); } } return $updateParams; } public function updateCheckedStatusByWms($logistic_number_return) { $asnHeader=OracleDOCASNHeader::query() ->select('asnno','customerid','notes','warehouseid','asnreference3') ->where('asnreference3',$logistic_number_return) ->orWhere('notes','like','%'.$logistic_number_return.'%') ->first(); if ($asnHeader){ $rejectBill=RejectedBill::query()->where('logistic_number_return',$logistic_number_return)->first(); if ($rejectBill->is_checked==1)return null; $rejectBill->update([ 'is_checked'=>1, 'checked_numbers' => $rejectBill->makeCheckedNumbers(), ]); return $rejectBill; } return null; } }