123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Description: 项目管理
  4. // +----------------------------------------------------------------------
  5. // | Author: Michael_xu | gengxiaoxu@5kcrm.com
  6. // +----------------------------------------------------------------------
  7. namespace app\work\model;
  8. use app\admin\controller\ApiCommon;
  9. use think\Db;
  10. use app\admin\model\Common;
  11. class Work extends Common
  12. {
  13. /**
  14. * 为了数据库的整洁,同时又不影响Model和Controller的名称
  15. * 我们约定每个模块的数据表都加上相同的前缀,比如微信模块用weixin作为数据表前缀
  16. */
  17. protected $name = 'work';
  18. protected $createTime = 'create_time';
  19. protected $updateTime = 'update_time';
  20. protected $autoWriteTimestamp = true;
  21. protected $insert = ['status' => 1];
  22. /**
  23. * 列表
  24. *
  25. * @return bool|\PDOStatement|string|\think\Collection
  26. * @throws \think\db\exception\DataNotFoundException
  27. * @throws \think\db\exception\ModelNotFoundException
  28. * @throws \think\exception\DbException
  29. */
  30. public function getDataList()
  31. {
  32. $list = $this->where(['status' => 1])->field('work_id,name,status,create_time')->select();
  33. return $list ;
  34. }
  35. /**
  36. * 创建项目
  37. *
  38. * @param array $param
  39. * @return array|bool|float|int|mixed|object|\stdClass|null
  40. * @throws \think\exception\PDOException
  41. */
  42. public function createData($param)
  43. {
  44. $this->startTrans();
  45. try {
  46. # 设置项目参数
  47. if (!empty($param['is_open']) && $param['is_open'] == 1) {
  48. $ownerUserId = Db::name('admin_user')->where('status', 1)->column('id');
  49. } else {
  50. $ownerUserId = $param['owner_user_id'] ? : [];
  51. }
  52. $param['owner_user_id'] = $ownerUserId ? arrayToString($ownerUserId) : '';
  53. $param['status'] = 1;
  54. # 创建项目
  55. $this->data($param)->allowField(true)->save();
  56. # 设置项目下的任务参数
  57. $workId = $this->work_id;
  58. $createTime = time();
  59. $createUserId = $param['create_user_id'];
  60. $taskData = [
  61. ['name' => '要做', 'create_time' => $createTime, 'create_user_id' => $createUserId, 'status' => 1, 'work_id' => $workId, 'order_id' => 1],
  62. ['name' => '在做', 'create_time' => $createTime, 'create_user_id' => $createUserId, 'status' => 1, 'work_id' => $workId, 'order_id' => 2],
  63. ['name' => '待定', 'create_time' => $createTime, 'create_user_id' => $createUserId, 'status' => 1, 'work_id' => $workId, 'order_id' => 3]
  64. ];
  65. # 创建项目下的任务
  66. Db::name('work_task_class')->insertAll($taskData);
  67. # 设置项目下的相关成员参数
  68. $ownerData['work_id'] = $workId;
  69. $ownerData['create_user_id'] = $createUserId;
  70. $ownerData['owner_user_id'] = $ownerUserId;
  71. $group= Db::name('admin_group')->field(['id', 'title', 'rules', 'remark', 'system'])->where(['pid' => 5, 'types' => 7, 'status' => 1])->order('id','asc')->select();
  72. $ownerData['group_id'] = !empty($param['group_id']) ? $param['group_id'] : $group[0]['id'];
  73. # 创建项目下的相关成员
  74. $this->addOwner($ownerData);
  75. # 提交事务
  76. $this->commit();
  77. $user=new ApiCommon();
  78. $userInfo=$user->userInfo;
  79. RecordActionLog($param['create_user_id'], 'work', 'save',$param['name'], '','','添加了项目:'.$param['name']);
  80. return $workId;
  81. } catch(\Exception $e) {
  82. # 回滚事务
  83. $this->rollback();
  84. # 错误原因
  85. $this->error = '添加失败';
  86. return false;
  87. }
  88. }
  89. /**
  90. * 更新项目排序表
  91. *
  92. * @param int $workId 项目ID
  93. * @param int $userId 用户ID
  94. * @author fanqi
  95. * @since 2021-03-27
  96. */
  97. public function updateWorkOrder($workId, $userId)
  98. {
  99. $workOrder = 0;
  100. $workOrderList = db('work_order')->where('user_id', $userId)->select();
  101. foreach ($workOrderList AS $key => $value) {
  102. if (!empty($value['order']) && $value > $workOrder) $workOrder = $value['order'];
  103. }
  104. # 只同步有排序操作的用户的数据
  105. if (!empty($workOrder)) db('work_order')->insert([
  106. 'work_id' => $workId,
  107. 'user_id' => $userId,
  108. 'order' => $workOrder + 1
  109. ]);
  110. }
  111. /**
  112. * 编辑项目
  113. *
  114. * @param $param
  115. * @return bool
  116. * @throws \think\Exception
  117. * @throws \think\db\exception\DataNotFoundException
  118. * @throws \think\db\exception\ModelNotFoundException
  119. * @throws \think\exception\DbException
  120. * @throws \think\exception\PDOException
  121. */
  122. public function updateDataById($param)
  123. {
  124. $param['update_time'] = time();
  125. $userId = $param['user_id'];
  126. unset($param['user_id']);
  127. $map['work_id'] = $param['work_id'];
  128. $workInfo = $this->where(['work_id' => $param['work_id']])->find();
  129. # 公有改私有
  130. if (isset($param['is_open']) && empty($param['is_open']) && $workInfo['is_open'] == 1) {
  131. $ownerData = [];
  132. $ownerData['work_id'] = $param['work_id'];
  133. $ownerData['create_user_id'] = $workInfo['create_user_id'];
  134. $ownerData['owner_user_id'] = !empty($param['owner_user_id']) ? stringToArray($param['owner_user_id']) : stringToArray($workInfo['create_user_id']);
  135. $ownerData['is_open'] = $param['is_open'];
  136. $ownerData['group_id'] = 0;
  137. $this->addOwner($ownerData);
  138. }
  139. # 私有改公有
  140. if (isset($param['is_open']) && !empty($param['is_open']) && $workInfo['is_open'] == 0) {
  141. $ownerUserId = Db::name('admin_user')->where('status', 1)->column('id');
  142. $ownerData['work_id'] = $param['work_id'];
  143. $ownerData['create_user_id'] = $workInfo['create_user_id'];
  144. $ownerData['owner_user_id'] = $ownerUserId;
  145. $ownerData['is_open'] = $param['is_open'];
  146. $ownerData['group_id'] = $param['group_id'];
  147. $this->addOwner($ownerData);
  148. }
  149. # 公开项目更新时的权限变更
  150. if ($param['is_open'] == 1 && !empty($param['group_id']) && $param['group_id'] != $workInfo['group_id']) {
  151. db('work_user')->where(['work_id' => $workInfo['work_id'], 'user_id' => ['neq', $workInfo['create_user_id']]])->update(['group_id' => $param['group_id']]);
  152. }
  153. $resUpdata = $this->where($map)->update($param);
  154. if ($resUpdata) {
  155. $logmodel = model('WorkLog');
  156. $datalog['type'] = 2; //重命名项目
  157. $datalog['name'] = $param['name']; //项目名
  158. $datalog['create_user_id'] = $userId;
  159. $datalog['work_id'] = $param['work_id'];
  160. $datalog['user_id'] = $userId;
  161. $ret = $logmodel->workLogAdd($datalog);
  162. RecordActionLog($userId, 'work', 'update',$param['name'], '','','编辑了项目:'.$param['name']);
  163. return true;
  164. } else {
  165. $this->error = '重命名失败';
  166. return false;
  167. }
  168. }
  169. /**
  170. * 删除项目
  171. * @author yykun
  172. * @param
  173. * @return
  174. */
  175. public function delWorkById($param)
  176. {
  177. $map['work_id'] = $param['work_id'];
  178. Db::name('Task')->where($map)->delete();
  179. Db::name('WorkTaskClass')->where($map)->delete();
  180. $flag = $this->where($map)->delete();
  181. if ($flag) {
  182. $logmodel = new \app\work\model\WorkLog();
  183. $datalog['status'] = 4; //删除项目
  184. $datalog['create_user_id'] = $param['create_user_id'];
  185. $datalog['work_id'] = $param['work_id'];
  186. $datalog['content'] = '删除了项目';
  187. $ret = $logmodel->workLogAdd($datalog);
  188. return true;
  189. } else {
  190. $this->error = '数据不存在或已被删除';
  191. return false;
  192. }
  193. }
  194. /**
  195. * 归档项目
  196. * @author yykun
  197. * @param
  198. * @return
  199. */
  200. public function archiveData($param)
  201. {
  202. $map['work_id'] = $param['work_id'];
  203. $dataInfo=$this->get($param['work_id']);
  204. $dataInfo = json_decode(json_encode($dataInfo), true);
  205. $flag = $this->where($map)->setField('status',0);
  206. $this->where($map)->setField('archive_time',time());
  207. if ($flag) {
  208. $data = [];
  209. $data['status'] = 3;
  210. $data['archive_time'] = time();
  211. Db::name('task')->where($map)->update($data);
  212. RecordActionLog($param['create_user_id'], 'work', 'archiveData',$dataInfo['name'], '','','归档了项目:'.$dataInfo['name']);
  213. return true;
  214. } else {
  215. $this->error = '归档失败';
  216. return false;
  217. }
  218. }
  219. /**
  220. * 归档项目列表
  221. * @author yykun
  222. * @param
  223. * @return
  224. */
  225. public function archiveList($param)
  226. {
  227. $page = !empty($param['page']) ? $param['page'] : 1;
  228. $limit = !empty($param['limit']) ? $param['limit'] : 15;
  229. unset($param['page']);
  230. unset($param['limit']);
  231. //权限
  232. $map = $this->getWorkWhere($param);
  233. $where['status'] = 0;
  234. $where['ishidden'] = 0;
  235. $count = $this->where($map)->where($where)->field('work_id,name,color,archive_time')->count();
  236. $list = $this->where($map)->where($where)->field('work_id,name,color,archive_time')
  237. ->limit(($page - 1) * $limit, $limit)->select();
  238. foreach ($list AS $key => $value) {
  239. $list[$key]['archive_time'] = !empty($value['archive_time']) ? date('Y-m-d H:i:s', $value['archive_time']) : null;
  240. }
  241. return ['count' => $count, 'list' => $list];
  242. }
  243. /**
  244. * 归档恢复
  245. * @author yykun
  246. * @param
  247. * @return
  248. */
  249. public function arRecover($work_id='',$userId)
  250. {
  251. if (!$work_id) {
  252. $this->error = '参数错误';
  253. return false;
  254. }
  255. $dataInfo=$this->get($work_id);
  256. $dataInfo = json_decode(json_encode($dataInfo), true);
  257. $map['work_id'] =$work_id;
  258. $map['status'] = 0;
  259. $this->where($map)->setField('status',1);
  260. $map['status'] = 3;
  261. Db::name('Task')->where($map)->setField('status',1);
  262. RecordActionLog($userId, 'work', 'recover',$dataInfo['name'], '','','归档恢复项目:'.$dataInfo['name']);
  263. return true;
  264. }
  265. /**
  266. * 退出项目
  267. * @author yykun
  268. * @param 项目id,会员ID
  269. * @return
  270. */
  271. public function leaveById($work_id,$user_id)
  272. {
  273. $workInfo = $this->where(['work_id' => $work_id])->find();
  274. if ($user_id == $workInfo['create_user_id']) {
  275. $this->error = '项目创建人不可以退出';
  276. return false;
  277. }
  278. //从项目成员中移除
  279. db('work_user')->where(['work_id' => $work_id,'user_id' => $user_id])->delete();
  280. $str = ','.$user_id.',';
  281. if (in_array($user_id,stringToArray($workInfo['owner_user_id']))) {
  282. $owner_user_id = str_replace($str,',',$workInfo['owner_user_id']);
  283. $this->where(['work_id' => $work_id])->update(['owner_user_id' => $owner_user_id]);
  284. }
  285. $list = Db::name('Task')->where(['work_id' => $work_id])->select();
  286. foreach ($list as $key => $value) {
  287. $data = [];
  288. if (in_array($user_id,stringToArray($value['owner_user_id']))) {
  289. $new_own_user_id = str_replace($str,',',$value['owner_user_id']);
  290. $data['owner_user_id'] = $new_own_user_id;
  291. }
  292. if ($value['main_user_id'] == $workInfo['create_user_id']) {
  293. $data['main_user_id'] = '';
  294. }
  295. if ($data) Db::name('Task')->where(['task_id' => $value['task_id']])->update($data);
  296. RecordActionLog($user_id, 'work_task', 'recover',$value['name'], '','','退出了项目:'.$value['name']);
  297. }
  298. RecordActionLog($user_id, 'work', 'update',$workInfo['name'], '','','退出了项目:'.$workInfo['name']);
  299. return true;
  300. }
  301. /**
  302. * 添加项目成员
  303. *
  304. * @param $param
  305. * @return bool
  306. * @throws \think\Exception
  307. * @throws \think\exception\DbException
  308. * @throws \think\exception\PDOException
  309. */
  310. public function addOwner($param)
  311. {
  312. $workInfo = $this->get($param['work_id']);
  313. $oldOwner = stringToArray($workInfo['owner_user_id']);
  314. $owner_user = $newOwner = $param['owner_user_id'];
  315. # 更新项目表中的项目成员
  316. $this->where(['work_id' => $param['work_id']])->update(['owner_user_id' => arrayToString($newOwner)]);
  317. # 差集,需删除的
  318. $del_user_ids = array_diff($oldOwner, $newOwner);
  319. $create_user_id = !empty($param['create_user_id']) ? $param['create_user_id'] : '';
  320. unset($param['create_user_id']);
  321. $owner_user_arr = db('work_user')->where(['work_id' => $param['work_id']])->column('user_id');
  322. foreach ($owner_user as $k=>$v) {
  323. $data = [];
  324. if (in_array($v,$owner_user_arr)) continue;
  325. $data['work_id'] = $param['work_id'];
  326. $data['user_id'] = $v;
  327. $data['types'] = 0;
  328. if ($v == $create_user_id) {
  329. $data['types'] = 1;
  330. $group_id = $param['group_id'];
  331. } else {
  332. # 默认角色
  333. $group_id = !empty($param['group_id']) ? $param['group_id'] : db('admin_group')->where(['pid' => 5, 'system' => 1])->order('id asc')->value('id');
  334. }
  335. $data['group_id'] = $group_id;
  336. $saveData[] = $data;
  337. }
  338. $res = true;
  339. if ($saveData && !db('work_user')->insertAll($saveData)) {
  340. $res = false;
  341. }
  342. if ($del_user_ids && !db('work_user')->where(['work_id' => $param['work_id'],'user_id' => ['in',$del_user_ids]])->delete()) {
  343. $res = false;
  344. }
  345. return $res;
  346. }
  347. /**
  348. * 删除项目成员
  349. * @author yykun
  350. * @param
  351. * @return
  352. */
  353. public function delOwner($param,$userId)
  354. {
  355. $work_id = $param['work_id'];
  356. $workUserInfo = db('work_user')->where(['work_id' => $work_id,'user_id' => $param['owner_user_id']])->find();
  357. if (!$workUserInfo) {
  358. $this->error = '数据不存在或已删除';
  359. return false;
  360. }
  361. if ($workUserInfo['types'] == 1) {
  362. $this->error = '项目负责人不能删除';
  363. return false;
  364. }
  365. $res = db('work_user')->where(['id' => $workUserInfo['id']])->delete();
  366. $owner_user_id[] = $param['owner_user_id'];
  367. $workInfo = $this->get($param['work_id']);
  368. $oldOwner = stringToArray($workInfo['owner_user_id']);
  369. $newOwner = array_diff($oldOwner,$owner_user_id);
  370. $resUpdate = $this->where(['work_id' => $work_id])->update(['owner_user_id' => arrayToString($newOwner)]);
  371. if (!$res || !$resUpdate){
  372. $this->error = '删除失败,请重试!';
  373. return false;
  374. }
  375. $user= new \app\admin\model\User();
  376. $user_info=$user->getUserById($param['owner_user_id']);
  377. RecordActionLog($userId, 'work', 'save',$workInfo['name'], '','','删除了项目成员:'.$user_info['realname']);
  378. return true;
  379. }
  380. /**
  381. * 项目成员列表
  382. * @author yykun
  383. * @param
  384. * @return
  385. */
  386. public function ownerList($param)
  387. {
  388. if ($param['work_id']) {
  389. $workInfo = $this->get($param['work_id']);
  390. if ($workInfo['is_open'] == 1) {
  391. //公开项目
  392. // $list = db('admin_user')->where(['status' => 1])->field('username,realname,thumb_img,id')->select();
  393. $list = db('work_user')
  394. ->alias('work')
  395. ->join('__ADMIN_USER__ user', 'user.id = work.user_id', 'LEFT')
  396. ->where(['work.work_id' => $param['work_id']])
  397. ->field('work.*,user.username,user.realname,user.thumb_img')
  398. ->order('work.types desc,user.id asc')
  399. ->select();
  400. } else {
  401. // $exp = new \think\db\Expression('field(types,1,0,2)');
  402. $list = db('work_user')
  403. ->alias('work')
  404. ->join('__ADMIN_USER__ user', 'user.id = work.user_id', 'LEFT')
  405. ->where(['work.work_id' => $param['work_id']])
  406. ->field('work.*,user.username,user.realname,user.thumb_img')
  407. ->order('work.types desc,user.id asc')
  408. ->select();
  409. }
  410. } else {
  411. $list = db('admin_user')->where(['status' => 1])->field('username,realname,thumb_img,id')->select();
  412. }
  413. if ($list) {
  414. foreach ($list as $k=>$v) {
  415. $list[$k]['thumb_img'] = $v['thumb_img'] ? getFullPath($v['thumb_img']) : '';
  416. $list[$k]['id'] = $v['user_id'] ? : $v['id'];
  417. }
  418. }
  419. return $list ? : [];
  420. }
  421. /**
  422. * 项目权限判断(成员)
  423. * @author yykun
  424. * @param
  425. * @return
  426. */
  427. public function checkWork($work_id, $user_id)
  428. {
  429. $info = $this->get($work_id);
  430. if (!$info) {
  431. $this->error = '该项目不存在或已删除';
  432. return false;
  433. }
  434. //私有项目(成员可见)
  435. $map = function($query) use ($user_id){
  436. $query->whereOr(function ($query) use ($user_id) {
  437. $query->where(['is_open' => 0,'owner_user_id' => array('like','%,'.$user_id.',%')]);
  438. })
  439. ->whereOr(function ($query) use ($user_id) {
  440. $query->where(['is_open' => 1]);
  441. })
  442. ->whereOr(function ($query) use ($user_id) {
  443. $query->where(['create_user_id' => $user_id]);
  444. });
  445. };
  446. $resData = db('work')->where(['work_id' => $work_id])->where($map)->find();
  447. $userMap = function($query) {
  448. $query->where(['types' => 1])
  449. ->whereOr(['group_id' => 1]);
  450. };
  451. $adminUser = db('work_user')->where(['work_id' => $work_id])->where($userMap)->column('user_id');
  452. $adminTypes = adminGroupTypes($user_id);
  453. if (!$resData && !in_array(1,$adminTypes) && !in_array(7,$adminTypes) && !in_array($user_id,$adminUser)) {
  454. $this->error = '没有权限';
  455. return false;
  456. }
  457. return true;
  458. }
  459. /**
  460. * 判断项目操作权限
  461. *
  462. * @param $m
  463. * @param $c
  464. * @param $a
  465. * @param $work_id
  466. * @param $user_id
  467. * @return bool
  468. * @throws \think\db\exception\DataNotFoundException
  469. * @throws \think\db\exception\ModelNotFoundException
  470. * @throws \think\exception\DbException
  471. */
  472. public function isCheck($m, $c, $a, $work_id, $user_id)
  473. {
  474. if (!$work_id) return false;
  475. $adminTypes = adminGroupTypes($user_id);
  476. $workInfo = Db::name('Work')->where(['work_id' => $work_id])->find();
  477. if (in_array(1,$adminTypes) || in_array(7,$adminTypes)) {
  478. return true;
  479. }
  480. //创建人有管理权限
  481. if ($workInfo['create_user_id'] == $user_id) {
  482. return true;
  483. }
  484. if (empty($workInfo['is_open'])) {
  485. //私有项目
  486. $groupInfo = db('work_user')->where(['work_id' => $work_id,'user_id' => $user_id])->find();
  487. if ($groupInfo['types'] == 1 && $groupInfo['group_id'] == 1) {
  488. return true;
  489. }
  490. $checkParam = [];
  491. $checkParam['user_id'] = $user_id;
  492. $checkParam['group_id'] = $groupInfo['group_id'];
  493. if (checkWorkPerByAction($m, $c, $a, $checkParam)) {
  494. return true;
  495. }
  496. } else {
  497. if ($m == 'work' && $c == 'work' && $a == 'update') {
  498. return false;
  499. }
  500. return true;
  501. }
  502. return false;
  503. }
  504. /**
  505. * 获取项目权限范围
  506. * @author Michael_xu
  507. * @return
  508. */
  509. public function getWorkWhere($param)
  510. {
  511. $user_id = $param['user_id'];
  512. $adminTypes = adminGroupTypes($user_id);
  513. $map = [];
  514. if (!in_array(1,$adminTypes) && !in_array(7,$adminTypes)) {
  515. $map = function($query) use ($user_id){
  516. $query->whereOr(function ($query) use ($user_id) {
  517. $query->where(['is_open' => 0,'owner_user_id' => array('like','%,'.$user_id.',%')]);
  518. })
  519. ->whereOr(function ($query) use ($user_id) {
  520. $query->where(['is_open' => 1]);
  521. })
  522. ->whereOr(function ($query) use ($user_id) {
  523. $query->where(['create_user_id' => $user_id]);
  524. });
  525. };
  526. }
  527. return $map ? : [];
  528. }
  529. /**
  530. * 获取项目下权限信息
  531. * @author Michael_xu
  532. * @return
  533. */
  534. public function authList($param)
  535. {
  536. $user_id = $param['user_id'];
  537. $work_id = $param['work_id'];
  538. $ruleMap = [];
  539. $adminTypes = adminGroupTypes($user_id);
  540. $ruleMap['types'] = ['eq',3];
  541. $ruleMap['status'] = 1;
  542. if (!in_array(1,$adminTypes) && !in_array(7,$adminTypes)) {
  543. $workInfo = $this->get($work_id);
  544. if ($workInfo['is_open'] == 1) {
  545. //公开项目
  546. if ($workInfo['create_user_id'] !== $user_id) {
  547. $ruleMap['name'] = ['not in',['update']];
  548. }
  549. } else {
  550. //私有项目
  551. $groupInfo = db('work_user')->where(['work_id' => $work_id,'user_id' => $user_id])->find();
  552. if ($groupInfo['types'] !== 1 || $groupInfo['group_id'] !== 1) {
  553. $rule_ids = db('admin_group')->where(['id' => $groupInfo['group_id']])->value('rules');
  554. $ruleIds = stringToArray($rule_ids);
  555. if ($ruleIds) {
  556. $ruleMap['id'] = array('in', $ruleIds);
  557. } else {
  558. $ruleMap['id'] = ['eq',3];
  559. }
  560. }
  561. }
  562. }
  563. $newRuleIds = [];
  564. // 重新设置ruleIds,除去部分已删除或禁用的权限。
  565. $rules = Db::name('admin_rule')->where($ruleMap)->order('types asc')->select();
  566. foreach ($rules as $k => $v) {
  567. $newRuleIds[] = $v['id'];
  568. $rules[$k]['name'] = strtolower($v['name']);
  569. }
  570. $tree = new \com\Tree();
  571. $rulesList = $tree->list_to_tree($rules, 'id', 'pid', 'child', 0, true, array('pid'));
  572. //权限数组
  573. $authList = rulesListToArray($rulesList, $newRuleIds);
  574. return $authList ? : [];
  575. }
  576. /**
  577. * 任务列表统计
  578. * @author yykun
  579. * @return
  580. */
  581. public function classList($work_id)
  582. {
  583. $classList = Db::name('WorkTaskClass')->where(['status' => 1,'work_id' => $work_id])->order('order_id asc')->select();
  584. $taskarray = array();
  585. foreach ($classList as $k => $v) {
  586. $task_list = [];
  587. $task_list = db('task')->where(['work_id' => $work_id,'class_id' => $v['class_id'],'is_archive' => 0,'ishidden' => 0])->field('is_archive,status')->select();
  588. $allTask = 0;
  589. $undoneTask = 0;
  590. $doneTask = 0;
  591. foreach ($task_list as $kk => $vv) {
  592. $allTask += 1;
  593. if ($vv['status'] == 1) {
  594. $undoneTask += 1;
  595. continue;
  596. }
  597. if ($vv['status'] == 5) {
  598. $doneTask += 1;
  599. continue;
  600. }
  601. }
  602. $classList[$k]['allTask'] = $allTask ? : 0;
  603. $classList[$k]['undoneTask'] = $undoneTask ? : 0;
  604. $classList[$k]['doneTask'] = $doneTask ? : 0;
  605. }
  606. return $classList ? : [];
  607. }
  608. /**
  609. * 任务标签统计
  610. * @author yykun
  611. * @return
  612. */
  613. public function labelList($work_id,$labelIds = array())
  614. {
  615. if ($labelIds) {
  616. $labelList = [];
  617. $i = 0;
  618. foreach ($labelIds as $k => $v) {
  619. $labledet = [];
  620. $task_list = [];
  621. $labledet = Db::name('WorkTaskLable')->where(['lable_id' => $v])->find();
  622. $task_list = Db::name('Task')->where(['lable_id' => ['like','%,'.$v.',%'],'work_id' => $work_id,'is_archive' => 0,'ishidden' => 0])->field('status,task_id')->select();
  623. $allTask = 0;
  624. $undoneTask = 0;
  625. $doneTask = 0;
  626. foreach ($task_list as $kk => $vv) {
  627. if ($vv['status'] !== 3) $allTask += 1;
  628. if ($vv['status'] == 1) {
  629. $undoneTask += 1;
  630. continue;
  631. }
  632. if ($vv['status'] == 5) {
  633. $doneTask += 1;
  634. continue;
  635. }
  636. }
  637. $labelList[$i]['allTask'] = $allTask ? : 0;
  638. $labelList[$i]['undoneTask'] = $undoneTask ? : 0;
  639. $labelList[$i]['doneTask'] = $doneTask ? : 0;
  640. $labelList[$i]['lablename'] = $labledet['name'];
  641. $i++;
  642. }
  643. }
  644. return $labelList ? : [];
  645. }
  646. }