正在显示
10 个修改的文件
包含
429 行增加
和
0 行删除
| 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 | +} |
app/Http/Logic/Aside/Task/TaskLogic.php
0 → 100644
| 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 | +} |
app/Http/Logic/Aside/Task/TaskOwnerLogic.php
0 → 100644
| 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 | +} |
app/Http/Requests/Aside/Task/TaskRequest.php
0 → 100644
| 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 | +} |
app/Models/Task/Task.php
0 → 100644
| 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 | +} |
app/Models/Task/TaskFollow.php
0 → 100644
| 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 | +} |
app/Models/Task/TaskOwner.php
0 → 100644
| 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 | //服务器配置 |
-
请 注册 或 登录 后发表评论