WorkTaskController.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Models\Site;
  4. use Illuminate\Http\JsonResponse;
  5. use App\Http\Controllers\Controller;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\DB;
  8. /**
  9. * 项目管理下的详情的工作任务
  10. * Class WorkTaskController
  11. * @package App\Http\Controllers\Admin
  12. */
  13. class WorkTaskController extends Controller
  14. {
  15. //项目里面的客服任务
  16. public function index($siteId)
  17. {
  18. [$siteStatus, $tasksList, $infoList, $optimizationPersonnel] = $this->build($siteId);
  19. return view('admin/work_task/index', [
  20. 'siteStatus' => $siteStatus,
  21. 'siteId' => $siteId,
  22. 'tasksList' => $tasksList,
  23. 'infoList' => $infoList,
  24. 'optimizationPersonnel' => $optimizationPersonnel,
  25. 'date' => date('Y-m-d')
  26. ]);
  27. }
  28. //菜单里面的客服任务
  29. public function siteTask()
  30. {
  31. [$siteStatus, $tasksList, $infoList, $optimizationPersonnel] = $this->build(0);
  32. return view('admin/work_task/site_task', [
  33. 'sites' => Site::query()->select('id', 'cn_title')->whereIn('status', [1, 2, 3])->get(),
  34. 'siteId' => 0,
  35. 'date' => date('Y-m-d'),
  36. 'optimizationPersonnel' => $optimizationPersonnel,
  37. ]);
  38. }
  39. //异步获取每个项目的对应的客服任务
  40. public function getSiteTaskInfo($siteId)
  41. {
  42. [$siteStatus, $tasksList, $infoList, $optimizationPersonnel] = $this->build($siteId);
  43. $data = [
  44. 'siteStatus' => $siteStatus,
  45. 'tasksList' => $tasksList,
  46. 'infoList' => $infoList,
  47. 'optimizationPersonnel' => $optimizationPersonnel,
  48. 'siteId' => $siteId
  49. ];
  50. return response()->json(['data' => $data]);
  51. }
  52. /**
  53. * 保存
  54. * @param Request $request
  55. * @param $siteId
  56. * @param $status
  57. * @return JsonResponse
  58. */
  59. public function save(Request $request, $siteId, $status)
  60. {
  61. $infoList = $request->input('infoList');
  62. $dataList = $request->input('dataList');
  63. if (empty($dataList)) {
  64. return response()->json(['message' => '还没创建任务'], 400);
  65. }
  66. foreach ($dataList as $key => $value) {
  67. $dataList[$key]['task_id'] = time() . mt_rand(1, 1000000);
  68. }
  69. $data = [
  70. 'infoList' => $infoList,
  71. 'dataList' => $dataList,
  72. ];
  73. $updateData = [
  74. 'data' => \GuzzleHttp\json_encode($data),
  75. 'site_id' => $siteId,
  76. 'status' => $status
  77. ];
  78. DB::transaction(function () use ($updateData, $siteId, $status) {
  79. DB::table('tasks')
  80. ->where('site_id', $siteId)
  81. ->where('status', $status)
  82. ->delete();
  83. DB::table('tasks')->insert($updateData);
  84. });
  85. return response()->json(['message' => '操作成功']);
  86. }
  87. private function build($siteId)
  88. {
  89. $infoList = [];
  90. $tasksList = [];
  91. $siteStatus = DB::table('sites')->where('id', $siteId)->value('status') ?? 0;
  92. //客服、优化、软文、外链、前端
  93. $optimizationPersonnel = DB::table('users')->join('roles', 'users.role_id', '=', 'roles.id')
  94. ->where('users.status', 1)
  95. ->whereIn('users.role_id', [7, 14, 17, 18, 26])
  96. ->whereNull('users.deleted_at')
  97. ->orderBy('users.role_id', 'asc')
  98. ->select('users.id', 'users.nickname')->get();
  99. $tasksInfo = DB::table('tasks')->where([
  100. ['site_id', '=', $siteId],
  101. ['status', '=', $siteStatus]
  102. ])->first();
  103. if (!empty($tasksInfo->data)) {
  104. $list = \GuzzleHttp\json_decode($tasksInfo->data, true);
  105. $infoList = explode(',', $list['infoList']) ?? [];
  106. $tasksList = $list['dataList'];
  107. }
  108. return [$siteStatus, $tasksList, $infoList, $optimizationPersonnel];
  109. }
  110. }