作者 赵彬吉

task

  1 +<?php
  2 +
  3 +namespace App\Http\Controllers\Aside\Task;
  4 +
  5 +use App\Http\Controllers\Aside\BaseController;
  6 +use App\Http\Logic\Aside\Task\TaskFollowLogic;
  7 +use App\Http\Logic\Aside\Task\TaskLogic;
  8 +use App\Http\Requests\Aside\Task\TaskFollowRequest;
  9 +use App\Http\Requests\Aside\Task\TaskRequest;
  10 +use Illuminate\Support\Facades\Request;
  11 +
  12 +
  13 +/**
  14 + * 工单管理
  15 + * Class TaskController
  16 + * @package App\Http\Controllers\Aside\Task
  17 + * @author zbj
  18 + * @date 2023/4/27
  19 + */
  20 +class TaskController extends BaseController
  21 +{
  22 +
  23 + public function list(TaskLogic $logic)
  24 + {
  25 + $map = [];
  26 + if(!empty($this->param['search'])){
  27 + $map[] = ['title', 'like', "%{$this->param['search']}%"];
  28 + }
  29 + $sort = ['id' => 'desc'];
  30 + $data = $logic->getList($map, $sort);
  31 +
  32 + return view("admin.task", ["list" => $data]);
  33 + }
  34 +
  35 + public function info(Request $request, TaskLogic $logic){
  36 + $request->validate([
  37 + 'id'=>'required'
  38 + ],[
  39 + 'id.required' => 'ID不能为空'
  40 + ]);
  41 + $data = $logic->getInfo($this->param['id']);
  42 + return $this->success($data);
  43 + }
  44 +
  45 + public function save(TaskRequest $request, TaskLogic $logic)
  46 + {
  47 + $data = $logic->save($this->param);
  48 + return $this->success($data);
  49 + }
  50 +
  51 + /**
  52 + * 修改状态
  53 + * @param Request $request
  54 + * @param TaskLogic $logic
  55 + * @author zbj
  56 + * @date 2023/4/27
  57 + */
  58 + public function status(Request $request, TaskLogic $logic){
  59 + $request->validate([
  60 + 'id'=>'required'
  61 + ],[
  62 + 'id.required' => 'ID不能为空'
  63 + ]);
  64 + //todo 多人任务
  65 + $data = $logic->status($this->param);
  66 + return $this->success($data);
  67 + }
  68 +
  69 +
  70 + /**
  71 + * 添加跟进记录
  72 + * @param TaskFollowRequest $request
  73 + * @param TaskFollowLogic $logic
  74 + * @author zbj
  75 + * @date 2023/4/27
  76 + */
  77 + public function save_follow(TaskFollowRequest $request, TaskFollowLogic $logic){
  78 + //todo 任务是否分配给该用户
  79 + $data = $logic->save($this->param);
  80 + return $this->success($data);
  81 + }
  82 +}
  1 +<?php
  2 +
  3 +namespace App\Http\Logic\Aside\Task;
  4 +
  5 +
  6 +use App\Http\Logic\Aside\BaseLogic;
  7 +use App\Models\Task\TaskFollow;
  8 +
  9 +/**
  10 + * Class TaskFollowLogic
  11 + * @package App\Http\Logic\Aside\Task
  12 + * @author zbj
  13 + * @date 2023/4/27
  14 + */
  15 +class TaskFollowLogic extends BaseLogic
  16 +{
  17 + public function __construct()
  18 + {
  19 + parent::__construct();
  20 +
  21 + $this->model = new TaskFollow();
  22 + }
  23 +
  24 +
  25 +}
  1 +<?php
  2 +
  3 +namespace App\Http\Logic\Aside\Task;
  4 +
  5 +
  6 +use App\Helper\Arr;
  7 +use App\Http\Logic\Aside\BaseLogic;
  8 +use App\Models\Task\Task;
  9 +use App\Models\Task\TaskOwner;
  10 +use Illuminate\Support\Facades\DB;
  11 +
  12 +/**
  13 + * Class TaskLogic
  14 + * @package App\Http\Logic\Aside\Task
  15 + * @author zbj
  16 + * @date 2023/4/27
  17 + */
  18 +class TaskLogic extends BaseLogic
  19 +{
  20 + public function __construct()
  21 + {
  22 + parent::__construct();
  23 +
  24 + $this->model = new Task();
  25 + }
  26 +
  27 + public function save($param){
  28 +
  29 + DB::beginTransaction();
  30 + try {
  31 + $res = parent::save($param);
  32 + $data['task_id'] = $res['id'];
  33 +
  34 + //支持分配多人
  35 + $owner = Arr::splitFilterToArray($param['owner']);
  36 + foreach ($owner as $manage_id){
  37 + $data['manage_ids'][] = $manage_id;
  38 + }
  39 + (new TaskOwnerLogic)->save($data);
  40 +
  41 + DB::commit();
  42 + }catch (\Exception $e){
  43 + DB::rollBack();
  44 + errorLog('工单保存失败', $param, $e);
  45 + $this->fail('保存失败');
  46 + }
  47 + return $this->success();
  48 + }
  49 +
  50 + /**
  51 + * 修改状态
  52 + * @param $param
  53 + * @return array
  54 + * @throws \App\Exceptions\AsideGlobalException
  55 + * @throws \App\Exceptions\BsideGlobalException
  56 + * @author zbj
  57 + * @date 2023/4/27
  58 + */
  59 + public function status($param){
  60 + $data = [
  61 + 'id' => $param['id'],
  62 + 'status' => $param['status'],
  63 + ];
  64 +
  65 + parent::save($data);
  66 + return $this->success();
  67 + }
  68 +}
  1 +<?php
  2 +
  3 +namespace App\Http\Logic\Aside\Task;
  4 +
  5 +use App\Http\Logic\Aside\BaseLogic;
  6 +use App\Models\Task\TaskOwner;
  7 +
  8 +/**
  9 + * Class TaskOwnerLogic
  10 + * @package App\Http\Logic\Aside\Task
  11 + * @author zbj
  12 + * @date 2023/4/27
  13 + */
  14 +class TaskOwnerLogic extends BaseLogic
  15 +{
  16 + public function __construct()
  17 + {
  18 + parent::__construct();
  19 +
  20 + $this->model = new TaskOwner();
  21 + }
  22 +
  23 + public function save($param){
  24 + //获取已分配了的
  25 + $manage_ids = $this->model->where('task_id', $param['task_id'])->pluck('manage_id', 'id');
  26 +
  27 + //待删除的
  28 + $del_manage_ids = array_diff($manage_ids, $param['manage_ids']);
  29 + $this->delete(array_keys($del_manage_ids));
  30 +
  31 + //新增的
  32 + $add_manage_ids = array_diff($param['manage_ids'], $manage_ids);
  33 + foreach ($add_manage_ids as $add_manage_id){
  34 + $data = [
  35 + 'task_id' => $param['task_id'],
  36 + 'manage_id' => $add_manage_id
  37 + ];
  38 + parent::save($data);
  39 + }
  40 + return $this->success();
  41 + }
  42 +}
  1 +<?php
  2 +
  3 +namespace App\Http\Requests\Aside\Task;
  4 +
  5 +
  6 +use Illuminate\Foundation\Http\FormRequest;
  7 +
  8 +/**
  9 + * Class TaskFollowRequest
  10 + * @package App\Http\Requests\Aside\product
  11 + * @author zbj
  12 + * @date 2023/4/27
  13 + */
  14 +class TaskFollowRequest extends FormRequest
  15 +{
  16 + /**
  17 + * Determine if the user is authorized to make this request.
  18 + *
  19 + * @return bool
  20 + */
  21 + public function authorize()
  22 + {
  23 + return true;
  24 + }
  25 +
  26 + /**
  27 + * Get the validation rules that apply to the request.
  28 + *
  29 + * @return array
  30 + */
  31 + public function rules()
  32 + {
  33 + return [
  34 + 'task_id' => 'required|exists:gl_task,id',
  35 + 'content' => 'required',
  36 + 'attachment' => 'max:200',
  37 + ];
  38 + }
  39 +
  40 + public function messages()
  41 + {
  42 + return [
  43 + 'task_id.required' => '工单ID不能为空',
  44 + 'task_id.exists' => '工单不存在',
  45 + 'content.required' => '请输入跟进内容',
  46 + ];
  47 + }
  48 +
  49 +}
  1 +<?php
  2 +
  3 +namespace App\Http\Requests\Aside\Task;
  4 +
  5 +use App\Helper\Arr;
  6 +use Illuminate\Foundation\Http\FormRequest;
  7 +
  8 +/**
  9 + * Class TaskRequest
  10 + * @package App\Http\Requests\Aside\product
  11 + * @author zbj
  12 + * @date 2023/4/27
  13 + */
  14 +class TaskRequest extends FormRequest
  15 +{
  16 + /**
  17 + * Determine if the user is authorized to make this request.
  18 + *
  19 + * @return bool
  20 + */
  21 + public function authorize()
  22 + {
  23 + return true;
  24 + }
  25 +
  26 + /**
  27 + * Get the validation rules that apply to the request.
  28 + *
  29 + * @return array
  30 + */
  31 + public function rules()
  32 + {
  33 + return [
  34 + 'project_id' => 'required|exists:gl_project,id',
  35 + 'owner' => 'required',
  36 + 'workload' => 'integer|max:5',
  37 + 'priority' => 'integer|max:5',
  38 + 'content' => 'required',
  39 + 'attachment' => 'max:200',
  40 + 'end_at' => 'date_format:Y-m-d H:i:s',
  41 + ];
  42 + }
  43 +
  44 + public function messages()
  45 + {
  46 + return [
  47 + 'project_id.required' => '项目ID不能为空',
  48 + 'project_id.exists' => '项目不存在',
  49 + 'owner.required' => '请选择负责人',
  50 + 'workload.max' => '工作量最多5星',
  51 + 'priority.max' => '紧急程度最多5星',
  52 + 'content' => '请输入工单内容',
  53 + 'end_at.date_format' => '截止时间格式不正确',
  54 + ];
  55 + }
  56 +
  57 +}
  1 +<?php
  2 +
  3 +namespace App\Models\Task;
  4 +
  5 +use App\Models\Base;
  6 +use App\Services\Facades\Upload;
  7 +
  8 +class Task extends Base
  9 +{
  10 + //设置关联表名
  11 + protected $table = 'gl_task';
  12 +
  13 + const STATUS_WAIT = 0;
  14 + const STATUS_DONGING = 1;
  15 + const STATUS_DOWN = 2;
  16 +
  17 +
  18 + public static function statusMap(){
  19 + return [
  20 + self::STATUS_WAIT => '未开始',
  21 + self::STATUS_DONGING => '进行中',
  22 + self::STATUS_DOWN => '已完成',
  23 + ];
  24 + }
  25 +
  26 + public function setAttachmentAttribute($value){
  27 + $this->attributes['attachment'] = Upload::url2path($value);
  28 + }
  29 +
  30 + public function getAttachmentAttribute($value){
  31 + return Upload::path2url($value);
  32 + }
  33 +
  34 +}
  1 +<?php
  2 +
  3 +namespace App\Models\Task;
  4 +
  5 +use App\Http\Logic\Aside\LoginLogic;
  6 +use App\Models\Base;
  7 +use App\Services\Facades\Upload;
  8 +
  9 +class TaskFollow extends Base
  10 +{
  11 + //设置关联表名
  12 + protected $table = 'gl_task_follow';
  13 +
  14 + const STATUS_WAIT = 0;
  15 + const STATUS_DONGING = 1;
  16 + const STATUS_DOWN = 2;
  17 +
  18 +
  19 + public static function statusMap(){
  20 + return [
  21 + self::STATUS_WAIT => '未开始',
  22 + self::STATUS_DONGING => '进行中',
  23 + self::STATUS_DOWN => '已完成',
  24 + ];
  25 + }
  26 +
  27 + public function setAttachmentAttribute($value){
  28 + $this->attributes['attachment'] = Upload::url2path($value);
  29 + }
  30 +
  31 + public function getAttachmentAttribute($value){
  32 + return Upload::path2url($value);
  33 + }
  34 +
  35 + public function setManageIdAttribute($value){
  36 + $this->attributes['manage_id'] = LoginLogic::manage('id');
  37 + }
  38 +}
  1 +<?php
  2 +
  3 +namespace App\Models\Task;
  4 +
  5 +use App\Models\Base;
  6 +
  7 +class TaskOwner extends Base
  8 +{
  9 + //设置关联表名
  10 + protected $table = 'gl_task_owner';
  11 +
  12 + const STATUS_WAIT = 0;
  13 + const STATUS_DONGING = 1;
  14 + const STATUS_DOWN = 2;
  15 +
  16 +
  17 + public static function statusMap(){
  18 + return [
  19 + self::STATUS_WAIT => '未开始',
  20 + self::STATUS_DONGING => '进行中',
  21 + self::STATUS_DOWN => '已完成',
  22 + ];
  23 + }
  24 +
  25 +}
@@ -49,6 +49,15 @@ Route::middleware(['web'])->group(function (){ //admin用渲染默认要加上w @@ -49,6 +49,15 @@ Route::middleware(['web'])->group(function (){ //admin用渲染默认要加上w
49 Route::post('/save', [Aside\Project\ProjectController::class, 'save'])->name('admin.project_save'); 49 Route::post('/save', [Aside\Project\ProjectController::class, 'save'])->name('admin.project_save');
50 }); 50 });
51 51
  52 + //工单管理
  53 + Route::prefix('task')->group(function () {
  54 + Route::get('/', [Aside\Task\TaskController::class, 'list'])->name('admin.task');
  55 + Route::get('/info', [Aside\Task\TaskController::class, 'info'])->name('admin.task_info');
  56 + Route::post('/save', [Aside\Task\TaskController::class, 'save'])->name('admin.task_save');
  57 + Route::post('/status', [Aside\Task\TaskController::class, 'status'])->name('admin.task_status');
  58 + Route::post('/save_follow', [Aside\Task\TaskController::class, 'save_follow'])->name('admin.task_save_follow');
  59 + });
  60 +
52 //运维 61 //运维
53 Route::prefix('devops')->group(function () { 62 Route::prefix('devops')->group(function () {
54 //服务器配置 63 //服务器配置