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