TaskLogic.php 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. /**
  3. * 项目任务逻辑类
  4. *
  5. * @author qifna
  6. * @date 2020-12-18
  7. */
  8. namespace app\work\logic;
  9. use think\Db;
  10. class TaskLogic
  11. {
  12. public function getSearchData($param)
  13. {
  14. # 排序
  15. $orderField = 'create_time';
  16. $orderSort = 'desc';
  17. if (!empty($param['sort_type']) && $param['sort_type'] == 1) { # 最近创建
  18. $orderField = 'create_time';
  19. $orderSort = 'desc';
  20. }
  21. if (!empty($param['sort_type']) && $param['sort_type'] == 2) { # 最近截止
  22. $orderField = 'stop_time';
  23. $orderSort = 'desc';
  24. }
  25. if (!empty($param['sort_type']) && $param['sort_type'] == 3) { # 最近更新
  26. $orderField = 'update_time';
  27. $orderSort = 'desc';
  28. }
  29. if (!empty($param['sort_type']) && $param['sort_type'] == 4) { # 最高优先级
  30. $orderField = 'priority';
  31. $orderSort = 'desc';
  32. }
  33. # 搜索
  34. $searchWhere = '';
  35. $dateWhere = [];
  36. $userWhere = [];
  37. $workWhere = [];
  38. $labelWhere = '';
  39. $ownerUserId = !empty($param['owner_user_id']) ? $param['owner_user_id'] : '';
  40. $search = !empty($param['search']) ? $param['search'] : '';
  41. $type = !empty($param['type']) ? $param['type'] : 0;
  42. $startTime = !empty($param['start_time']) ? $param['start_time'] : '';
  43. $endTime = !empty($param['end_time']) ? $param['end_time'] : '';
  44. $workIds = !empty($param['work_id']) ? $param['work_id'] : '';
  45. $labelIds = !empty($param['label_id']) ? $param['label_id'] : '';
  46. unset($param['search']);
  47. unset($param['type']);
  48. unset($param['start_time']);
  49. unset($param['end_time']);
  50. unset($param['owner_user_id']);
  51. switch ($type) {
  52. case 1 :
  53. # 今天
  54. $dateWhere['update_time'][] = ['egt', strtotime(date('Y-m-d 00:00:00'))];
  55. $dateWhere['update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59'))];
  56. break;
  57. case 2 :
  58. # 上周
  59. $dateWhere['update_time'][] = ['egt', strtotime('last week monday')];
  60. $dateWhere['update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59', strtotime('last week sunday')))];
  61. break;
  62. case 3 :
  63. # 上月
  64. $dateWhere['update_time'][] = ['egt', strtotime(date('Y-m-01 00:00:00', strtotime('last month')))];
  65. $dateWhere['update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59', strtotime('Last day of last month')))];
  66. break;
  67. case 4 :
  68. # 去年
  69. $dateWhere['update_time'][] = ['egt', strtotime(date('Y-01-01 00:00:00', strtotime('last year')))];
  70. $dateWhere['update_time'][] = ['elt', strtotime(date('Y-12-31 23:59:59', strtotime('last year')))];
  71. }
  72. # 时间区间
  73. if (!empty($startTime)) $dateWhere['update_time'] = ['egt', strtotime($startTime . '00:00:00')];
  74. if (!empty($endTime)) $dateWhere['update_time'] = ['elt', strtotime($endTime . '23:59:59')];
  75. # 搜索内容
  76. if ($search) $searchWhere = '(name like "%' . $search . '%") OR (description like "%' . $search . '%")';
  77. # 成员
  78. if (!empty($ownerUserId)) {
  79. $taskArray = [];
  80. $userArray = explode(',', $ownerUserId);
  81. foreach ($userArray AS $key => $value) {
  82. $tmp = Db::name('task')->where('work_id', '<>', 0)->whereLike('owner_user_id', '%,' . $value . ',%')->column('task_id');
  83. $taskArray = array_merge($tmp, $taskArray);
  84. }
  85. if (!empty($taskArray)) $userWhere['task_id'] = ['in', $taskArray];
  86. }
  87. # 项目
  88. if (!empty($workIds)) $workWhere['work_id'] = ['in', $workIds];
  89. # 标签
  90. if (!empty($labelIds) && is_array($labelIds)) {
  91. foreach ($labelIds AS $key => $value) {
  92. $labelWhere .= '(lable_id like "%,'.$value.',%") OR ';
  93. }
  94. if (!empty($labelWhere)) $labelWhere = '(' . rtrim($labelWhere, 'OR ') . ')';
  95. }
  96. $data = Db::name('task')
  97. ->where('work_id', '<>', 0)
  98. ->where($searchWhere)
  99. ->where($dateWhere)
  100. ->where($userWhere)
  101. ->where($workWhere)
  102. ->where($labelWhere)
  103. ->order($orderField, $orderSort)
  104. ->select();
  105. foreach ($data AS $key => $value) {
  106. $data[$key]['filecount'] = Db::name('work_task_file')->where('task_id', $value['task_id'])->count();
  107. $data[$key]['relationCount'] = $this->getRelationCount($value['task_id']);
  108. $data[$key]['lableList'] = Db::name('work_task_lable')->field(['lable_id', 'name', 'color'])->whereIn('lable_id', trim($value['lable_id'], ','))->select();
  109. $data[$key]['subdonecount'] = Db::name('task')->where(['pid' => $value['task_id'], 'status' => 5])->count();
  110. $data[$key]['subcount'] = Db::name('task')->where(['pid' => $value['task_id'], 'status' => ['neq', 5]])->count();
  111. $data[$key]['start_time'] = !empty($value['start_time']) ? date('Y-m-d', $value['start_time']) : null;
  112. $data[$key]['stop_time'] = !empty($value['stop_time']) ? date('Y-m-d', $value['stop_time']) : null;
  113. $data[$key]['create_time'] = !empty($value['create_time']) ? date('Y-m-d H:i:s', $value['create_time']) : null;
  114. $data[$key]['update_time'] = !empty($value['update_time']) ? date('Y-m-d H:i:s', $value['update_time']) : null;
  115. }
  116. return $data;
  117. }
  118. private function getRelationCount($task_id)
  119. {
  120. $relationInfo = Db::name('TaskRelation')->where(['task_id' => $task_id])->find();
  121. $count = 0;
  122. if ($relationInfo) {
  123. $count1 = count(stringToArray($relationInfo['customer_ids']));
  124. $count2 = count(stringToArray($relationInfo['contacts_ids']));
  125. $count3 = count(stringToArray($relationInfo['business_ids']));
  126. $count4 = count(stringToArray($relationInfo['contract_ids']));
  127. $count = $count1 + $count2 + $count3 + $count4;
  128. }
  129. return $count;
  130. }
  131. }