SiteFlowController.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. namespace App\Http\Controllers\Wap;
  3. use App\Http\Models\ProjectFlowMemo;
  4. use App\Http\Models\Role;
  5. use App\Http\Models\Site;
  6. use App\Http\Models\User;
  7. use App\Http\Controllers\Controller;
  8. use App\Http\Services\FlowService;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\DB;
  11. class SiteFlowController extends Controller
  12. {
  13. //流程报告
  14. public function index(Request $request, $type = 0)
  15. {
  16. $result = $request->all();
  17. if (!empty($result)) {
  18. $this->saveClientProjectFlow($result);
  19. }
  20. $user = auth()->user();
  21. if (empty($user)) {
  22. return view('admin/site/not_found', [
  23. 'tips' => 'error',
  24. 'siteId' => 0,
  25. ]);
  26. }
  27. $projectFlowMemo = ProjectFlowMemo::query();
  28. if (!empty($type)) {
  29. $projectFlowMemo->whereRaw('FIND_IN_SET(?,roles)', [Role::TYPE_CUSTOMER]);
  30. }
  31. $siteIds = DB::table('user_has_sites')->where('user_id', $user->id)->first();
  32. if (empty($siteIds)) {
  33. return view('admin/site/not_found', [
  34. 'tips' => '暂无建站进度',
  35. 'siteId' => 0,
  36. ]);
  37. }
  38. $flowList = $projectFlowMemo
  39. ->with(['projectFlowMemoRelation'])
  40. ->where('site_id', $siteIds->site_id)
  41. ->get();
  42. if (empty($flowList->toArray())) {
  43. return view('admin/site/not_found', [
  44. 'tips' => '暂无建站进度',
  45. 'siteId' => 0,
  46. ]);
  47. }
  48. $flowService = new FlowService();
  49. //各阶段负责人
  50. $flowService->getRoleUser($flowList, User::query()->pluck('nickname', 'id'));
  51. //按阶段分组
  52. $flowList = $flowList->groupBy('level')->toArray() ?? [];
  53. //统计完成和没完成的阶段
  54. $ids = $flowService->addUp($flowList);
  55. $title = $projectFlowMemo
  56. ->where('site_id', $siteIds->site_id)
  57. ->groupBy('rank', 'level')
  58. ->orderBy('level', 'asc')
  59. ->pluck('rank', 'level')->toArray() ?? [];
  60. foreach ($title as $key => $value) {
  61. $title[$key] = $value . ':' . $key . ':' . $ids[$key] ?? '';
  62. }
  63. $result = array_combine($title, $flowList);
  64. //所有阶段任务数量
  65. $count = ProjectFlowMemo::query()->where('site_id', $siteIds->site_id)->count() ?? 0;
  66. //没完成的
  67. $toBeCompletedCount = ProjectFlowMemo::query()->where('site_id', $siteIds->site_id)->where('status', 0)->count() ?? 0;
  68. $flowList = ProjectFlowMemo::query()
  69. ->where('site_id', $siteIds->site_id)
  70. ->orderBy('id', 'asc')->get();
  71. if (!empty($flowList)) {
  72. //最后的上线时间
  73. $nodeDate = $flowList[count($flowList) - 1]['node_date'];
  74. //延期的时间
  75. if (date('Y-m-d') > $nodeDate) {
  76. $diff = strtotime(date('Y-m-d')) - strtotime($nodeDate);
  77. $newNodeDate = date('Y-m-d', (strtotime($nodeDate) + $diff));
  78. }
  79. }
  80. //每个小阶段的起始和结束时间
  81. [$taskLastDateStart, $taskLastDateEnd] = $flowService->getStageDate($result);
  82. //这周一周日、下周一下周末
  83. [$monday, $sunday, $nextMonday, $nextSunday] = $flowService->getThisMonDayAndNextMonday();
  84. $thisWeekTaskList = $flowService->getWeekTaskList($siteIds->site_id, $monday, $sunday, 'this');
  85. $nextWeekTaskList = $flowService->getWeekTaskList($siteIds->site_id, $nextMonday, $nextSunday, 'next');
  86. return view('wap.site_flow', [
  87. 'list' => $result,
  88. 'count' => $count,
  89. 'nodeDate' => $nodeDate ?? '',
  90. 'toBeCompletedCount' => $toBeCompletedCount,
  91. 'scoreList' => ProjectFlowMemo::SCORE,
  92. 'type' => $type,
  93. 'taskLastDateStart' => $taskLastDateStart,
  94. 'taskLastDateEnd' => $taskLastDateEnd,
  95. 'newNodeDate' => $newNodeDate ?? '',
  96. 'thisWeekTaskList' => $thisWeekTaskList,
  97. 'nextWeekTaskList' => $nextWeekTaskList,
  98. 'site' => Site::query()->where('id', $siteIds->site_id)->value('cn_title') ?? '',
  99. ]);
  100. }
  101. public function saveClientProjectFlow($result)
  102. {
  103. $data = [];
  104. foreach ($result as $key => $item) {
  105. //拆分表单提交过来的字段
  106. $filed = explode('-', $key);
  107. $data[] = [
  108. 'id' => $filed[0],
  109. $filed[1] => $item,
  110. ];
  111. }
  112. foreach ($data as $datum) {
  113. ProjectFlowMemo::query()->where('id', $datum['id'])->update(['client_score' => $datum['client_score']]);
  114. }
  115. }
  116. }