WorkLogic.php 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  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 = 'work_id';
  18. $orderSort = 'asc';
  19. if (!empty($param['sort_type']) && $param['sort_type'] == 1) {
  20. $orderField = 'work_id';
  21. $orderSort = 'asc';
  22. }
  23. if (!empty($param['sort_type']) && $param['sort_type'] == 2) {
  24. $orderField = 'work_id';
  25. $orderSort = 'desc';
  26. }
  27. if (!empty($param['sort_type']) && $param['sort_type'] == 3) {
  28. $orderField = 'update_time';
  29. $orderSort = 'desc';
  30. }
  31. # 搜索
  32. $searchWhere = '';
  33. $dateWhere = [];
  34. $userWhere = [];
  35. $ownerUserId = !empty($param['owner_user_id']) ? $param['owner_user_id'] : '';
  36. $search = !empty($param['search']) ? $param['search'] : '';
  37. $type = !empty($param['type']) ? $param['type'] : 0;
  38. $startTime = !empty($param['start_time']) ? $param['start_time'] : '';
  39. $endTime = !empty($param['end_time']) ? $param['end_time'] : '';
  40. unset($param['search']);
  41. unset($param['type']);
  42. unset($param['start_time']);
  43. unset($param['end_time']);
  44. unset($param['owner_user_id']);
  45. switch ($type) {
  46. case 1 :
  47. # 今天
  48. $dateWhere['update_time'][] = ['egt', strtotime(date('Y-m-d 00:00:00'))];
  49. $dateWhere['update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59'))];
  50. break;
  51. case 2 :
  52. # 上周
  53. $dateWhere['update_time'][] = ['egt', strtotime('last week monday')];
  54. $dateWhere['update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59', strtotime('last week sunday')))];
  55. break;
  56. case 3 :
  57. # 上月
  58. $dateWhere['update_time'][] = ['egt', strtotime(date('Y-m-01 00:00:00', strtotime('last month')))];
  59. $dateWhere['update_time'][] = ['elt', strtotime(date('Y-m-d 23:59:59', strtotime('Last day of last month')))];
  60. break;
  61. case 4 :
  62. # 去年
  63. $dateWhere['update_time'][] = ['egt', strtotime(date('Y-01-01 00:00:00', strtotime('last year')))];
  64. $dateWhere['update_time'][] = ['elt', strtotime(date('Y-12-31 23:59:59', strtotime('last year')))];
  65. }
  66. # 时间区间
  67. if (!empty($startTime)) $dateWhere['update_time'] = ['egt', strtotime($startTime . '00:00:00')];
  68. if (!empty($endTime)) $dateWhere['update_time'] = ['elt', strtotime($endTime . '23:59:59')];
  69. # 搜索内容
  70. if ($search) $searchWhere = '(name like "%' . $search . '%") OR (description like "%' . $search . '%")';
  71. # 成员
  72. if (!empty($ownerUserId)) {
  73. $userIds = Db::name('work_user')->whereIn('user_id', $ownerUserId)->column('work_id');
  74. $userWhere['work_id'] = ['in', $userIds];
  75. }
  76. $userModel = new \app\admin\model\User();
  77. $perUserIds = $userModel->getUserByPer('work', 'work', 'index');
  78. $authUser = array_unique(array_merge([$param['user_id']], $perUserIds));
  79. $data = Db::name('work')
  80. ->where(function ($query) {
  81. $query->where('status', 1);
  82. $query->where('ishidden', 0);
  83. })
  84. ->where(function ($query) use ($param, $authUser) {
  85. $query->whereOr(['create_user_id' => ['in', $authUser]]);
  86. $query->whereOr('is_open', 1);
  87. $query->whereOr(function ($query) use ($param) {
  88. $query->where('is_open', 0);
  89. $query->where('owner_user_id', 'like', '%' . $param['user_id'] . '%');
  90. });
  91. })
  92. ->where($searchWhere)
  93. ->where($dateWhere)
  94. ->where($userWhere)
  95. ->order($orderField, $orderSort)->select();
  96. foreach ($data as $key => $value) {
  97. $data[$key]['authList']['project'] = $this->getRuleList($value['work_id'], $param['user_id'], $value['group_id']);
  98. }
  99. return $data;
  100. }
  101. /**
  102. * @param $param work 排序数组值 user_id用户
  103. *
  104. * @author alvin guogaobo
  105. * @version 1.0 版本号
  106. * @since 2021/2/23 15:42
  107. */
  108. // public function workStart($param)
  109. // {
  110. // $item = Db::name('workStart')->where('user_id', $param['user_id'])->find();
  111. // $data = [];
  112. // $data['datas'] = $param['work'];
  113. // $data['user_id'] = $param['user_id'];
  114. // if (!$item) {
  115. // return Db::name('workStart')->insertGetId($data);
  116. // } else {
  117. // return Db::name('workStart')->where('user_id', $param['user_id'])->update([$data]);
  118. // }
  119. // }
  120. /**
  121. * 根据数组指定键名排序数组
  122. * @param $array array 被排序数组
  123. * @param $key_name string 数组键名
  124. * @param $sort string desc|asc 升序或者降序
  125. * @return array 返回排序后的数组
  126. */
  127. // function gw_sort($array, $param)
  128. // {
  129. // $whilr = array
  130. // (
  131. // [0] => ['work_id' => 5,
  132. // 'name' => 222,
  133. // 'status' => 1,
  134. // 'create_time' => 1613628469,
  135. // 'create_user_id' => 7,
  136. // 'description' => 222,
  137. // 'color' => '#53D397',
  138. // 'is_open' => 1,
  139. // 'owner_user_id' => ',1,2,3,4,5,7,',
  140. // 'ishidden' => 0,
  141. // 'archive_time' => 0,
  142. // 'group_id' => 12,
  143. // 'cover_url' => 'http://192.168.1.31/72crm-php/public/uploads/20210218/12ece02733c8684ce987f207062173b5.png',
  144. // 'update_time' => 1613629916,
  145. // 'is_follow' => 0,
  146. // 'is_system_cover' => 0,],
  147. //
  148. // [1] => [
  149. //
  150. // 'work_id' => 7,
  151. // 'name' => '啊啊',
  152. // 'status' => 1,
  153. // 'create_time' => 1614059388,
  154. // 'create_user_id' => 1,
  155. // 'description' => '',
  156. // 'color' => '#53D397',
  157. // 'is_open' => 0,
  158. // 'owner_user_id' => ',1,3,',
  159. // 'ishidden' => 0,
  160. // 'archive_time' => 0,
  161. // 'group_id' => 12,
  162. // 'cover_url' => 'https://file.72crm.com/static/pc/images/pm/project-cover-1.jpg',
  163. // 'update_time' => 1614059926,
  164. // 'is_follow' => 0,
  165. // 'is_system_cover' => 1,
  166. // ]
  167. //
  168. // );
  169. // $item = Db::name('workStart')->where('user_id', $param['user_id'])->find();
  170. // $key_name_array = array();//保存被排序数组键名
  171. // foreach ($whilr as $key => $val) {
  172. // foreach ($item as $v){
  173. // $key_name_array[] = array_merge(array_flip($val), $v);
  174. // }
  175. // }
  176. // $key_name_array = array_flip($key_name_array);//反转键名和值得到数组排序后的位置
  177. // $result = array();
  178. // foreach($array as $k=>$v){
  179. // foreach ($item as $vall){
  180. // $this_key_name_value = $v[$vall];//当前数组键名值依次是20,10,30
  181. // $save_position = $key_name_array[$this_key_name_value];//获取20,10,30排序后存储位置
  182. // $result[$save_position] = $v;//当前项存储到数组指定位置
  183. // }
  184. // }
  185. // ksort($result);
  186. //
  187. // return $result;
  188. // }
  189. }