| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- <?php
- namespace App\Http\Controllers;
- use App\Filters\WorkOrderFilters;
- use App\Logistic;
- use App\OrderIssue;
- use App\Services\OrderIssueTypeService;
- use App\Services\OrderService;
- use App\Services\OwnerService;
- use App\Services\WorkOrderCommoditiesService;
- use App\Services\WorkOrderDetailService;
- use App\Services\WorkOrderLogService;
- use App\Services\WorkOrderService;
- use App\UserOwnerGroup;
- use App\UserWorkgroup;
- use App\WorkOrder;
- use App\WorkOrderDetail;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Gate;
- use Oursdreams\Export\Export;
- class WorkOrderController extends Controller
- {
- public $service;
- public $detailService;
- public $commoditiesService;
- public $logService;
- public $orderService;
- public $ownerService;
- public $orderIssueTypeService;
- public function __construct(
- WorkOrderService $service,
- WorkOrderCommoditiesService $commoditiesService,
- WorkOrderDetailService $detailService,
- WorkOrderLogService $logService,
- OrderService $orderService,
- OwnerService $ownerService,
- OrderIssueTypeService $orderIssueTypeService
- )
- {
- $this->service = $service;
- $this->detailService = $detailService;
- $this->commoditiesService = $commoditiesService;
- $this->logService = $logService;
- $this->orderService = $orderService;
- $this->ownerService = $ownerService;
- $this->orderIssueTypeService = $orderIssueTypeService;
- }
- /**
- * 承运商标记处理中
- * @param Request $request
- * @return array
- */
- public function logisticHandlerTagApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-承运商编辑'))
- return ['success' => false, 'message' => '没有对应权限'];
- $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
- if ($detail->status === '完成') return ['success' => false, 'message' => '工单已完成,请刷新重试'];
- $this->service->logisticHandlerTag($detail);
- $data = $this->service->getDefaultWith($detail->work_order_id);
- return ['success' => true, 'data' => $data];
- }
- public function index(Request $request, WorkOrderFilters $filters)
- {
- if (Gate::denies('订单管理-工单处理-查询')) return redirect('/');
- $workOrders = WorkOrder::query()->filter($filters)->defaultWith()->paginate($request['paginate'] ?? 50);
- $logistics = Logistic::all();
- $orderIssueTypes = $this->orderIssueTypeService->getWorkOrderIssueType();
- $owners = $this->ownerService->getAuthorizedOwners();
- $userWorkgroup = UserWorkgroup::query()->select('id', 'name')->get();
- $userOwnerGroup = UserOwnerGroup::query()->select('id', 'name')->get();
- $this->service->tags($workOrders);
- return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes', 'owners', 'userWorkgroup', 'userOwnerGroup'));
- }
- /**
- * 工单生成问题件
- * @param Request $request
- * @return array
- */
- public function buildOrderIssueApi(Request $request): array
- {
- if (Gate::denies('订单管理-订单问题件生成'))
- return ['success' => false, 'message' => '没有对应权限'];
- $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
- if (count($work_orders) == 0) return ['success' => false, 'message' => '刷新当前页面重试'];
- if (OrderIssue::query()->whereIn('order_id', $work_orders->map(function ($item) {
- return $item['order_id'];
- }))->exists()) {
- return ['success' => false, 'message' => '已有对应的问题件'];
- }
- $result = $this->service->buildOrderIssue($work_orders);
- if (!$result['success']) return $result;
- $workOrders = WorkOrder::query()->defaultWith()->whereIn('id', $request['ids'])->get();
- $this->service->tags($workOrders);
- return ['success' => true, 'data' => $workOrders];
- }
- /**
- * 删除工单
- * @param $id
- * @return array|bool[]
- */
- public function destroyApi($id): array
- {
- if (Gate::denies('订单管理-工单处理-删除'))
- return ['success' => false, 'message' => '没有对应权限'];
- $workOrder = $this->service->find($id);
- if (!$workOrder) {
- return ['success' => false, 'message' => '对应工单信息未找到'];
- } else {
- if ($workOrder->status == '已处理') {
- return ['success' => false, 'message' => '对应工单已处理,拒绝删除'];
- }
- }
- WorkOrder::query()->where('id', $id)->Delete();
- return ['success' => true];
- }
- /**
- * 校验工单是否存在
- * @param Request $request
- * @return array
- */
- public function checkWorkOrderApi(Request $request): array
- {
- $nos = $request->input('no', '');
- if (is_string($nos)) {
- $nos = [$nos];
- }
- $data = $this->service->checkWorkOrder($nos);
- return ['success' => true, 'data' => $data];
- }
- /**
- * 货主完结工单
- * @param Request $request
- * @return array
- */
- public function ownerEndWorkOrderApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-货主编辑'))
- return ['success' => false, 'message' => '没有对应权限'];
- $detail_id = $request->input('detail_id');
- $detail = WorkOrderDetail::query()->with('workOrder')->where('id', $detail_id)->first();
- if (!$detail || !$detail->workOrder) {
- return ['success' => false, 'message' => '参数异常'];
- }
- try {
- $this->service->ownerEndWorkOrderDetail($detail);
- return ['success' => true];
- } catch (\Exception $e) {
- return ['success' => false, 'message' => '工单完结异常'];
- }
- }
- /**
- * 货主批量完结工单
- * @param Request $request
- * @return array
- */
- public function ownerBatchEndWorkOrderApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-货主编辑'))
- return ['success' => false, 'message' => '没有对应权限'];
- $detail_ids = $request->input('detail_ids', []);
- if (count($detail_ids) == 0) return ['success' => false, 'message' => '参数异常'];
- $details = WorkOrderDetail::query()->find($detail_ids);
- if (count($details) == 0) return ['success' => false, 'message' => '参数异常'];
- try {
- $this->service->ownerBatchEndWorkOrderDetails($details);
- return ['success' => true];
- } catch (\Exception $e) {
- return ['success' => false, 'message' => '工单完结异常,请刷新后重试'];
- }
- }
- public function updateRemissionApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-宝时编辑')) {
- return ['success' => false, 'message' => '没有对应权限'];
- }
- if (!$request->has(['id', 'column'])) {
- return ['success' => false, 'message' => '参数异常'];
- }
- /** @var WorkOrder $workOrder */
- $workOrder = WorkOrder::query()->find($request->input('id'));
- if (!$workOrder) {
- return ['success' => false, 'message' => '未找到对应的工单'];
- }
- $column = $request->input('column');
- $workOrder->update(["{$column}" => $request->input('value') ?? null]);
- return ['success' => true];
- }
- public function updateUserOwnerGroupApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-宝时编辑')) {
- return ['success' => false, 'message' => '没有对应权限'];
- }
- if (!$request->has(['id', 'user_owner_group_id'])) {
- return ['success' => false, 'message' => '参数异常'];
- }
- /** @var WorkOrder $workOrder */
- $workOrder = WorkOrder::query()->find($request->input('id'));
- if (!$workOrder) {
- return ['success' => false, 'message' => '未找到对应的工单'];
- }
- $workOrder->update(['user_owner_group_id' => $request->input('user_owner_group_id')]);
- return ['success' => true];
- }
- public function storeUserWorkGroupApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-宝时编辑')) {
- return ['success' => false, 'message' => '没有对应权限'];
- }
- if (!$request->has(['id', 'user_workgroup_id'])) {
- return ['success' => false, 'message' => '参数异常'];
- }
- /** @var WorkOrder $workOrder */
- $workOrder = WorkOrder::query()->find($request->input('id'));
- if (!$workOrder) {
- return ['success' => false, 'message' => '未找到对应的工单'];
- }
- $hasExists = $workOrder->userWorkGroups()->where('user_workgroup_id', $request->input('user_workgroup_id'))->exists();
- if ($hasExists) return ['success' => false, 'message' => '已有对应的关系'];
- $workOrder->userWorkGroups()->attach($request->input('user_workgroup_id'));
- return ['success' => true, 'data' => $workOrder->userWorkGroups];
- }
- public function destroyUserWorkGroupApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-宝时编辑')) {
- return ['success' => false, 'message' => '没有对应权限'];
- }
- if (!$request->has(['id', 'user_workgroup_id'])) {
- return ['success' => false, 'message' => '参数异常'];
- }
- /** @var WorkOrder $workOrder */
- $workOrder = WorkOrder::query()->find($request->input('id'));
- if (!$workOrder) {
- return ['success' => false, 'message' => '未找到对应的工单'];
- }
- $workOrder->userWorkGroups()->detach($request->input('user_workgroup_id'));
- return ['success' => true];
- }
- public function exportJsonExcel(Request $request, WorkOrderFilters $filters)
- {
- $work_orders = WorkOrder::query()->filter($filters)->defaultWith()->get();
- return $this->exportJson($work_orders);
- }
- public function exportJson($workOrders)
- {
- $json = [];
- $row = [
- '工单类型', '当前进度', '客户', '店铺名称', '客户订单号','承运人', '快递单号', '创建时间', '当前处理人', '创建人', '情况说明', '退回单号', '退回商品', '退回商品名称', '退回商品数量', '是否正品', '操作类型', '操作人', '内容'
- ];
- $workOrders->each(function ($item) use (&$json) {
- $logistic_numbers = $item->order->packages->implode('logistic_number', ",\r\n");
- $logistic_numbers_return = $item->orderIssueRejectedBills->implode('logistic_number_return',",\r\n");
- $rejected_item_name = '';
- $rejected_item_sku = '';
- $rejected_item_label = '';
- $rejected_item_amount = '';
- $item->orderIssueRejectedBills->each(function ($item) use (&$rejected_item_name, &$rejected_item_sku, &$rejected_item_label, &$rejected_item_amount) {
- if($item->rejectedBill)
- $item->rejectedBill->items->each(function ($item) use (&$rejected_item_name, &$rejected_item_sku, &$rejected_item_label, &$rejected_item_amount) {
- $rejected_item_name = $rejected_item_name . $item->name_goods . ",\r\n";
- $rejected_item_sku = $rejected_item_sku . $item->barcode_goods . ",\r\n";
- $rejected_item_label = $rejected_item_label . $item->quality_label . ",\r\n";
- $rejected_item_amount = $rejected_item_amount . $item->amount . ",\r\n";
- });
- });
- $work_order_process_logs_type = '';
- $work_order_process_logs_user = '';
- $work_order_process_logs = '';
- $work_order_details = $item->details->filter(function ($detail) use ($item) {
- return $detail->order_issue_type_id == $item->order_issue_type_id;
- });
- if(count($work_order_details) > 0){
- $work_order_details->first()->processLogs->each(function ($log) use (&$work_order_process_logs_type,&$work_order_process_logs_user,&$work_order_process_logs) {
- $work_order_process_logs_type .= $log->type. ",\r\n";
- $work_order_process_logs_user .= ($log->user->name ?? ''). ",\r\n";
- $work_order_process_logs .= $log->content. ",\r\n";
- });
- }
- $json[] = [
- $item->issueType->name ?? '',
- $item->process_progress,
- $item->owner->name ?? '',
- $item->order->shop->name ?? '',
- $item->order->client_code ?? '',
- $item->logistic->name ?? '',
- rtrim($logistic_numbers, ",\r\n"),
- isset($item->created_at) ? str_split($item->created_at, 10)[0] : '',
- $item->status,
- $item->creator->name ?? '',
- $item->remark,
- rtrim($logistic_numbers_return, ",\r\n"),
- rtrim($rejected_item_sku, ",\r\n"),
- rtrim($rejected_item_name, ",\r\n"),
- rtrim($rejected_item_amount, ",\r\n"),
- rtrim($rejected_item_label, ",\r\n"),
- rtrim($work_order_process_logs_type, ",\r\n"),
- rtrim($work_order_process_logs_user, ",\r\n"),
- rtrim($work_order_process_logs, ",\r\n"),
- ];
- });
- return Export::make($row, $json, "工单");
- }
- }
|