evangeo/tickets

工单支持系统

dev-master 2023-12-05 13:30 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

简介

Laravel 工单支持后端包是一个专门用于管理客户支持请求并简化支持系统后端流程的解决方案。此包旨在通过提供高效处理和解决工单所需的工具来赋予您的支持团队权力。

安装

您可以通过 composer 安装此包

composer require evangeo/tickets

您可以使用以下命令发布和运行迁移

php artisan vendor:publish --tag="tickets-migrations"
php artisan migrate

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="tickets-config"

表格

工单表结构

工单回复表结构

工单附件表结构

工单分类/内部组/标签表结构

工单标签关联表结构

用法

  • 作为用户创建工单
$ticket = ticket()->createAsUser($userId, $ticketData)
  • 作为实体创建工单
$ticket = ticket()->createAsEntity($entityId, $ticketData)
  • 与工单状态交互
$ticket->reOpen()
        ->open()
        ->archived()
  • 与工单分类交互
$ticket->setCategory($id)
        ->removeCategory()
  • 与工单内部组交互
$ticket->setInternalGroup($id)
        ->removeInternalGroup()
  • 与工单标签交互
$ticket->attachTags([$tagId1,$tagId2,$tagId3])
       ->detachTags([$tagId1])
       ->syncTags([$tagId4, $tagId5, $tagId6])
  • 创建工单回复
$reponse = $ticket->replyAsUser($userId, $responseData)

$reponse = $ticket->replyAsEntity($entityId, $responseData)
  • 与回复消息类型交互
$response->markAsInternalMessage()
         ->markAsExternalMessage()
  • 在回复中上传文档
$response->attachDocuments($attachments, function (AttachmentRepository $repository) use ($uploads){
                $repository->upload($uploads, '/path/to/folder');
            })
  • 链式函数
$ticket = ticket()
            ->createAsUser($userId, $ticketData)
            ->setCategory($categoryId
            ->setInternalGroup($internalGroupId
            ->attachTags([$tagId1,$tagId2,$tagId3])
            ->detachTags([$tagId1])
            ->syncTags([$tagId4, $tagId5, $tagId6])
            ->reOpen()
            ->open()
            ->archived()
            ->replyAsUser($userId, $responseData)
            ->markAsInternalMessage()
            ->attachDocuments($attachments, function (AttachmentRepository $repository) use ($uploads){
                $repository->upload($uploads, '/path/to/folder');
            })
            ->getTicket();
  • 真实场景
$ticket = ticket()
            ->createAsUser($userId, $ticketData)
            ->replyAsUser($userId, $responseData)
            ->markAsInternalMessage()
            ->attachDocuments($attachments, function (AttachmentRepository $repository) use ($uploads){
                $repository->upload($uploads, '/path/to/folder');
            })
            ->getTicket();

测试

composer test