WorkLogic.php 6.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <?php
  2. /**
  3. * 项目逻辑类
  4. *
  5. * @author qifan
  6. * @date 2020-12-16
  7. */
  8. namespace app\work\logic;
  9. use app\work\traits\WorkAuthTrait;
  10. use think\Db;
  11. class WorkLogic
  12. {
  13. use WorkAuthTrait;
  14. public function index($param)
  15. {
  16. # 排序
  17. $orderField = 'w.work_id';
  18. $orderSort = 'asc';
  19. if (!empty($param['sort_type']) && $param['sort_type'] == 1) {
  20. $orderField = 'w.work_id';
  21. $orderSort = 'asc';
  22. }
  23. if (!empty($param['sort_type']) && $param['sort_type'] == 2) {
  24. $orderField = 'w.work_id';
  25. $orderSort = 'desc';
  26. }
  27. if (!empty($param['sort_type']) && $param['sort_type'] == 3) {
  28. $orderField = 'w.update_time';
  29. $orderSort = 'desc';
  30. }
  31. if (!empty($param['sort_type']) && $param['sort_type'] == 4) {
  32. $orderField = 'o.order';
  33. $orderSort = 'asc';
  34. }
  35. # 搜索
  36. $searchWhere = '';
  37. $dateWhere = [];
  38. $userWhere = [];
  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. unset($param['search']);
  45. unset($param['type']);
  46. unset($param['start_time']);
  47. unset($param['end_time']);
  48. unset($param['owner_user_id']);
  49. switch ($type) {
  50. case 1 :
  51. # 今天
  52. $dateWhere['w.update_time'][] = ['egt', strtotime(date('Y-m-d 00:00:00'))];
  53. $dateWhere['w.update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59'))];
  54. break;
  55. case 2 :
  56. # 上周
  57. $dateWhere['w.update_time'][] = ['egt', strtotime('last week monday')];
  58. $dateWhere['w.update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59', strtotime('last week sunday')))];
  59. break;
  60. case 3 :
  61. # 上月
  62. $dateWhere['w.update_time'][] = ['egt', strtotime(date('Y-m-01 00:00:00', strtotime('last month')))];
  63. $dateWhere['w.update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59', strtotime('Last day of last month')))];
  64. break;
  65. case 4 :
  66. # 去年
  67. $dateWhere['w.update_time'][] = ['egt', strtotime(date('Y-01-01 00:00:00', strtotime('last year')))];
  68. $dateWhere['w.update_time'][] = ['elt', strtotime(date('Y-12-31 23:59:59', strtotime('last year')))];
  69. }
  70. # 时间区间
  71. if (!empty($startTime)) $dateWhere['w.update_time'] = ['egt', strtotime($startTime . '00:00:00')];
  72. if (!empty($endTime)) $dateWhere['w.update_time'] = ['elt', strtotime($endTime . '23:59:59')];
  73. # 搜索内容
  74. if ($search) $searchWhere = '(w.name like "%' . $search . '%") OR (w.description like "%' . $search . '%")';
  75. # 成员
  76. if (!empty($ownerUserId)) {
  77. $userIds = Db::name('work_user')->whereIn('user_id', $ownerUserId)->column('work_id');
  78. $userWhere['w.work_id'] = ['in', $userIds];
  79. }
  80. $userModel = new \app\admin\model\User();
  81. $perUserIds = $userModel->getUserByPer('work', 'work', 'index');
  82. $authUser = array_unique(array_merge([$param['user_id']], $perUserIds));
  83. if ($param['sort_type'] == 4 && db('work_order')->where('user_id', $param['user_id'])->count() > 0) {
  84. # 选择了按手动拖动排序,并且手动排过序。
  85. $data = Db::name('work')->alias('w')
  86. ->field('w.*')
  87. ->join('__WORK_ORDER__ o', 'o.work_id = w.work_id', 'left')
  88. ->where(function ($query) {
  89. $query->where('status', 1);
  90. $query->where('ishidden', 0);
  91. })
  92. ->where(function ($query) use ($param, $authUser) {
  93. $query->whereOr(['create_user_id' => ['in', $authUser]]);
  94. $query->whereOr('is_open', 1);
  95. $query->whereOr(function ($query) use ($param) {
  96. $query->where('is_open', 0);
  97. $query->where('owner_user_id', 'like', '%' . $param['user_id'] . '%');
  98. });
  99. })
  100. ->where('o.user_id', $param['user_id'])
  101. ->where($searchWhere)
  102. ->where($dateWhere)
  103. ->where($userWhere)
  104. ->order($orderField, $orderSort)->select();
  105. } else {
  106. # 未手动排过序,如果选择了手动排序选项
  107. if ($param['sort_type'] == 4) {
  108. $orderField = 'w.work_id';
  109. $orderSort = 'asc';
  110. }
  111. $data = Db::name('work')->alias('w')
  112. ->field('w.*')
  113. ->where(function ($query) {
  114. $query->where('status', 1);
  115. $query->where('ishidden', 0);
  116. })
  117. ->where(function ($query) use ($param, $authUser) {
  118. $query->whereOr(['create_user_id' => ['in', $authUser]]);
  119. $query->whereOr('is_open', 1);
  120. $query->whereOr(function ($query) use ($param) {
  121. $query->where('is_open', 0);
  122. $query->where('owner_user_id', 'like', '%' . $param['user_id'] . '%');
  123. });
  124. })
  125. ->where($searchWhere)
  126. ->where($dateWhere)
  127. ->where($userWhere)
  128. ->order($orderField, $orderSort)->select();
  129. }
  130. foreach ($data as $key => $value) {
  131. $data[$key]['authList']['project'] = $this->getRuleList($value['work_id'], $param['user_id'], $value['group_id']);
  132. }
  133. return $data;
  134. }
  135. /**
  136. * 手动设置项目顺序
  137. *
  138. * @param $workIds 项目ID数组
  139. * @param $userId 当前用户ID
  140. * @author fanqi
  141. * @date 2021-03-11
  142. * @return bool
  143. */
  144. public function setWorkOrder($workIds, $userId)
  145. {
  146. $data = [];
  147. foreach ($workIds AS $key => $value) {
  148. $data[] = [
  149. 'work_id' => $value,
  150. 'user_id' => $userId,
  151. 'order' => $key + 1
  152. ];
  153. }
  154. if (!empty($data)) {
  155. if (db('work_order')->where('user_id', $userId)->delete() === false) return false;
  156. if (db('work_order')->insertAll($data) === false) return false;
  157. }
  158. return true;
  159. }
  160. }