| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- <?php
- namespace App\Http\Controllers;
- use App\Filters\WorkOrderFilters;
- use App\Http\Requests\WorkOrder\WorkOrderRequest;
- use App\Logistic;
- use App\OrderIssue;
- use App\Services\OrderService;
- use App\Services\OwnerService;
- use App\Services\WorkOrderCommoditiesService;
- use App\Services\WorkOrderLogService;
- use App\Services\WorkOrderService;
- use App\WorkOrder;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Gate;
- class WorkOrderController extends Controller
- {
- /**
- * @var WorkOrderService $service
- * @var WorkOrderCommoditiesService $commoditiesService
- * @var WorkOrderLogService $logService
- * @var OrderService $orderService
- * @var OwnerService $ownerService
- */
- public $service;
- public $commoditiesService;
- public $logService;
- public $orderService;
- public $ownerService;
- public function __construct(
- WorkOrderService $service,
- WorkOrderCommoditiesService $commoditiesService,
- WorkOrderLogService $logService,
- OrderService $orderService,
- OwnerService $ownerService)
- {
- $this->service = $service;
- $this->commoditiesService = $commoditiesService;
- $this->logService = $logService;
- $this->orderService = $orderService;
- $this->ownerService = $ownerService;
- }
- public function index(Request $request, WorkOrderFilters $filters)
- {
- if (Gate::denies('订单管理-工单处理-查询')) return redirect('/');
- $workOrders = WorkOrder::query()->filter($filters)->defaultWith()->orderBy('created_at')->orderByDesc('status')->paginate($request['paginate'] ?? 50);
- $logistics = Logistic::all();
- $orderIssueTypes = $this->service->getIssueType();
- $owners = $this->ownerService->getAuthorizedOwners();
- $this->service->tags($workOrders);
- return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes', 'owners'));
- }
- // 审核 api
- public function reviewApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应的编辑权限'];
- $workOrder = WorkOrder::query()->find($request['id']);
- return $this->service->review($workOrder);
- }
- // 批量审核 api
- public function batchReviewApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-审核')) {
- return ['success' => false, 'message' => '没有对应的编辑权限'];
- }
- if (WorkOrder::query()->whereIn('id', $request['ids'])->whereNotNull('review_at')->exists())
- return ['success' => false, 'message' => '选中的工单已有审核完成,刷新页面重试'];
- $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
- $this->service->tags($work_orders);
- return $this->service->batchReview($work_orders);
- }
- 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];
- }
- public function storeApi(Request $request): array
- {
- if (Gate::denies('订单管理-订单-生成工单'))
- return ['success' => false, 'message' => '没有对应权限'];
- $params = $request->all();
- if (count($params) == 0) return ['success' => false, 'message' => '参数异常'];
- app('OrderService')->syncOrderByCodes(array_map(function ($param) {
- return $param['order_no'];
- }, $params));
- return $this->service->build($params);
- }
- public function interceptApi(WorkOrderRequest $request):array
- {
- if (Gate::denies('订单管理-订单-生成工单'))
- return ['success' => false, 'message' => '没有对应权限'];
- $orderNos = $request->input('orderNos',[]);
- $this->orderService->syncOrderByCodes($orderNos);
- $remark = $request->input('remark','拦截工单');
- foreach ($orderNos as $item) {
- $this->service->createInterceptWorkOrder(['order_no'=>$item,'remark' => $remark]);
- }
- return ['success' => true];
- }
- public function informationChangeApi(WorkOrderRequest $request): array
- {
- if (Gate::denies('订单管理-订单-生成工单'))
- return ['success' => false, 'message' => '没有对应权限'];
- $orderNo = $request->input('order_no','');
- $this->orderService->syncOrderByCodes([$orderNo]);
- $this->service->createInformationChangeWorkOrder(['order_no'=>$orderNo,'remark' => $request->input('remark')]);
- return ['success' => true];
- }
- public function lossApi(WorkOrderRequest $request): array
- {
- if (Gate::denies('订单管理-订单-生成工单'))
- return ['success' => false, 'message' => '没有对应权限'];
- $orderNo = $request->input('order_no','');
- $this->orderService->syncOrderByCodes([$orderNo]);
- $this->service->createLossWorkOrder($request->all());
- return ['success' => true];
- }
- public function damagedApi(WorkOrderRequest $request): array
- {
- if (Gate::denies('订单管理-订单-生成工单'))
- return ['success' => false, 'message' => '没有对应权限'];
- $this->orderService->syncOrderByCodes([$request->input('order_no')]);
- $workOrder = $this->service->createDamagedWorkOrder($request->all());
- if ($workOrder) return ['success' => true];
- else return ['success' => false];
- }
- public function expressAbnormalApi(Request $request): array
- {
- if (Gate::denies('订单管理-订单-生成工单'))
- return ['success' => false, 'message' => '没有对应权限'];
- $this->orderService->syncOrderByCodes([$request->input('order_no')]);
- $this->service->createExpressAbnormalWorkOrder($request->all());
- return ['success' => true];
- }
- public function mistakeApi(Request $request): array
- {
- if (Gate::denies('订单管理-订单-生成工单'))
- return ['success' => false, 'message' => '没有对应权限'];
- $this->orderService->syncOrderByCodes([$request->input('order_no')]);
- $this->service->createMistakeWorkOrder($request->all());
- return ['success' => true];
- }
- public function fillLossApi(Request $request): array
- {
- if (Gate::denies('订单管理-订单-宝时编辑') || Gate::denies('订单管理-订单-货主编辑')){
- return ['success' => false, 'message' => '没有对应权限'];
- }
- $workOrder = $this->service->find($request->input('id'));
- $this->service->fillLossWorkOrder($workOrder,$request->all());
- $workOrder->loadDefaultWith();
- return ['success' => true,'data' => $workOrder];
- }
- public function updateLossApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-货主编辑'))
- return ['success' => false, 'message' => '没有对应权限'];
- $workOrder = $this->service->find($request->input('id'));
- if (!$workOrder) return ['success' => false, 'message' => '参数异常'];
- $workOrder = $this->service->fillLossWorkOrder($workOrder, $request->all());
- if (!$workOrder) return ['success' => false, 'message' => '创建异常'];
- $workOrder->loadDefaultWith();
- return ['success' => true, 'data' => $workOrder];
- }
- public function updateIssueTypeApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-审核'))
- return ['success' => false, 'message' => '没有对应权限'];
- WorkOrder::query()->where('id', $request['id'])->update(['order_issue_type_id' => $request['type_id']]);
- return ['success' => true];
- }
- public function batchUpdateIssueTypeApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-审核'))
- return ['success' => false, 'message' => '没有对应权限'];
- WorkOrder::query()->whereIn('id', $request['ids'])->update(['order_issue_type_id' => $request['type']]);
- $items = WorkOrder::query()->defaultWith()->whereIn('id', $request['ids'])->get();
- $this->service->tags($items);
- return ['success' => true, 'data' => $items];
- }
- public function destroyApi($id): array
- {
- if (Gate::denies('订单管理-工单处理-删除'))
- return ['success' => false, 'message' => '没有对应权限'];
- $workOrder = $this->service->find($id);
- if (!$workOrder)
- return ['success' => false, 'message' => '对应工单信息未找到'];
- if ($workOrder->status == '已处理') {
- return ['success' => false, 'message' => '对应工单已处理,拒绝删除'];
- }
- WorkOrder::query()->where('id', $id)->Delete();
- return ['success' => true];
- }
- public function updateWorkOrderStatusApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-宝时编辑'))
- return ['success' => false, 'message' => '没有对应权限'];
- try {
- $workOrder = $this->service->find($request->input('id'));
- $workOrder->work_order_status = $request['work_order_status'];
- $workOrder->update();
- } catch (\Exception $e) {
- return ['success' => false, 'message' => '编辑工单状态失败'];
- }
- return ['success' => true];
- }
- public function logisticUpdateWorkOrderStatusApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-承运商编辑'))
- return ['success' => false, 'message' => '没有对应权限'];
- try {
- $workOrder = $this->service->find($request->input('id'));
- $workOrder->work_order_status = $request['work_order_status'];
- $workOrder->update();
- } catch (\Exception $e) {
- return ['success' => false, 'message' => '编辑工单状态失败'];
- }
- return ['success' => true];
- }
- public function ownerUpdateCommoditiesApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-货主编辑')) {
- return ['success' => false, 'message' => '没有对应权限'];
- }
- $workOrder = $this->service->find($request->input('id'));
- if (!$workOrder) return ['success' => false, 'message' => '参数异常'];
- $this->commoditiesService->updateWorkOrderCommoditiesByJsonArray($workOrder, $request->input('commodities'));
- $workOrder->loadDefaultWith();
- $issueType = $workOrder->issueType->name ?? '';
- if($issueType == '丢件'){
- $this->logService->createLog($workOrder,'处理','货主填充数据');
- $workOrder->changeStatus('宝时处理');
- }
- return ['success' => true, 'data' => $workOrder];
- }
- public function logisticUpdateCommoditiesApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-承运商编辑')) {
- return ['success' => false, 'message' => '没有对应权限'];
- }
- $workOrder = $this->service->find($request->input('id'));
- if (!$workOrder) return ['success' => false, 'message' => '参数异常'];
- $this->commoditiesService->updateWorkOrderCommoditiesByJsonArray($workOrder, $request->input('commodities'));
- $workOrder->loadDefaultWith();
- $issueType = $workOrder->issueType->name ?? '';
- if (in_array($issueType,['快递异常','快递丢件','破损'])){
- $workOrder->changeStatus('完成');
- $this->logService->createLog($workOrder,'处理','承运商处理');
- $this->logService->createLog($workOrder,'完结','承运商完成');
- }
- return ['success' => true, 'data' => $workOrder];
- }
- public function baoShiUpdateCommoditiesApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-宝时编辑')) {
- return ['success' => false, 'message' => '没有对应权限'];
- }
- $workOrder = $this->service->find($request->input('id'));
- if (!$workOrder) return ['success' => false, 'message' => '参数异常'];
- $this->commoditiesService->updateWorkOrderCommoditiesByJsonArray($workOrder, $request->input('commodities'));
- $workOrder->loadDefaultWith();
- if (($workOrder->issueType->name ?? '') === '错漏发') {
- $workOrder->changeStatus('完成');
- $this->logService->createLog($workOrder, '完结', '错漏发完结');
- }
- return ['success' => true, 'data' => $workOrder];
- }
- public function logisticEndApi(Request $request): array
- {
- if (Gate::denies('订单管理-工单处理-承运商编辑')) {
- return ['success' => false, 'message' => '没有对应权限'];
- }
- $workOrder = $this->service->find($request->input('id'));
- if (!$workOrder) return ['success' => false, 'message' => '参数错误,刷新重试'];
- $this->service->logisticEnd($workOrder);
- $workOrder->loadDefaultWith();
- return ['success' => true, 'data' => $workOrder];
- }
- }
|