ProjectController.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Module\Base;
  5. use App\Module\Users;
  6. use DB;
  7. use Request;
  8. use Session;
  9. /**
  10. * @apiDefine project
  11. *
  12. * 项目
  13. */
  14. class ProjectController extends Controller
  15. {
  16. public function __invoke($method, $action = '')
  17. {
  18. $app = $method ? $method : 'main';
  19. if ($action) {
  20. $app .= "__" . $action;
  21. }
  22. return (method_exists($this, $app)) ? $this->$app() : Base::ajaxError("404 not found (" . str_replace("__", "/", $app) . ").");
  23. }
  24. /**
  25. * 项目列表
  26. *
  27. * @apiParam {String} act 类型
  28. * - join: 加入的项目(默认)
  29. * - favor: 收藏的项目
  30. * - manage: 管理的项目
  31. * @apiParam {Number} [page] 当前页,默认:1
  32. * @apiParam {Number} [pagesize] 每页显示数量,默认:20,最大:100
  33. */
  34. public function lists()
  35. {
  36. $user = Users::authE();
  37. if (Base::isError($user)) {
  38. return $user;
  39. } else {
  40. $user = $user['data'];
  41. }
  42. //
  43. $whereArray = [];
  44. $whereArray[] = ['project_lists.delete', '=', 0];
  45. $whereArray[] = ['project_users.username', '=', $user['username']];
  46. switch (Request::input('act')) {
  47. case "favor": {
  48. $whereArray[] = ['project_users.type', '=', '收藏'];
  49. break;
  50. }
  51. case "manage": {
  52. $whereArray[] = ['project_users.type', '=', '成员'];
  53. $whereArray[] = ['project_users.isowner', '=', 1];
  54. break;
  55. }
  56. default: {
  57. $whereArray[] = ['project_users.type', '=', '成员'];
  58. break;
  59. }
  60. }
  61. $lists = DB::table('project_lists')
  62. ->join('project_users', 'project_lists.id', '=', 'project_users.projectid')
  63. ->select(['project_lists.*', 'project_users.isowner', 'project_users.indate as uindate'])
  64. ->where($whereArray)
  65. ->orderByDesc('project_lists.id')->paginate(Min(Max(Base::nullShow(Request::input('pagesize'), 10), 1), 100));
  66. $lists = Base::getPageList($lists);
  67. if ($lists['total'] == 0) {
  68. return Base::retError('未找到任何相关的项目');
  69. }
  70. return Base::retSuccess('success', $lists);
  71. }
  72. /**
  73. * 添加项目
  74. *
  75. * @apiParam {String} title 项目名称
  76. * @apiParam {Array} labels 流程,格式[流程1, 流程2]
  77. */
  78. public function add()
  79. {
  80. $user = Users::authE();
  81. if (Base::isError($user)) {
  82. return $user;
  83. } else {
  84. $user = $user['data'];
  85. }
  86. //项目名称
  87. $title = trim(Request::input('title'));
  88. if (mb_strlen($title) < 2) {
  89. return Base::retError('项目名称不可以少于2个字!');
  90. } elseif (mb_strlen($title) > 32) {
  91. return Base::retError('项目名称最多只能设置32个字!');
  92. }
  93. //流程
  94. $labels = Request::input('labels');
  95. if (!is_array($labels)) $labels = [];
  96. $insertLabels = [];
  97. $inorder = 0;
  98. foreach ($labels AS $label) {
  99. $label = trim($label);
  100. if ($label) {
  101. $insertLabels[] = [
  102. 'title' => $label,
  103. 'inorder' => $inorder++,
  104. ];
  105. }
  106. }
  107. if (empty($insertLabels)) {
  108. $insertLabels[] = [
  109. 'title' => '默认',
  110. 'inorder' => 0,
  111. ];
  112. }
  113. //开始创建
  114. $projectid = DB::table('project_lists')->insertGetId([
  115. 'title' => $title,
  116. 'username' => $user['username'],
  117. 'createuser' => $user['username'],
  118. 'indate' => Base::time()
  119. ]);
  120. if ($projectid) {
  121. DB::table('project_label')->insert($insertLabels);
  122. DB::table('project_log')->insert([
  123. 'type' => '日志',
  124. 'projectid' => $projectid,
  125. 'username' => $user['username'],
  126. 'detail' => '创建项目',
  127. 'indate' => Base::time()
  128. ]);
  129. DB::table('project_users')->insert([
  130. 'type' => '成员',
  131. 'projectid' => $projectid,
  132. 'isowner' => 1,
  133. 'username' => $user['username'],
  134. 'indate' => Base::time()
  135. ]);
  136. return Base::retSuccess('添加成功!');
  137. } else {
  138. return Base::retError('添加失败!');
  139. }
  140. }
  141. /**
  142. * 收藏项目
  143. *
  144. * @apiParam {String} act 类型
  145. * - cancel: 取消收藏
  146. * - else: 添加收藏
  147. * @apiParam {Number} projectid 项目ID
  148. *
  149. * @throws \Throwable
  150. */
  151. public function favor()
  152. {
  153. $user = Users::authE();
  154. if (Base::isError($user)) {
  155. return $user;
  156. } else {
  157. $user = $user['data'];
  158. }
  159. //
  160. $projectid = trim(Request::input('projectid'));
  161. $item = Base::DBC2A(DB::table('project_lists')->where('id', $projectid)->first());
  162. if (empty($item)) {
  163. return Base::retError('项目不存在或已被删除!');
  164. }
  165. return DB::transaction(function () use ($item, $user) {
  166. switch (Request::input('act')) {
  167. case 'cancel': {
  168. if (DB::table('project_users')->where([
  169. 'type' => '收藏',
  170. 'projectid' => $item['id'],
  171. 'username' => $user['username'],
  172. ])->delete()) {
  173. DB::table('project_log')->insert([
  174. 'type' => '日志',
  175. 'projectid' => $item['id'],
  176. 'username' => $user['username'],
  177. 'detail' => '取消收藏',
  178. 'indate' => Base::time()
  179. ]);
  180. return Base::retSuccess('取消成功');
  181. }
  182. return Base::retSuccess('已取消');
  183. }
  184. default: {
  185. $row = Base::DBC2A(DB::table('project_users')->where([
  186. 'type' => '收藏',
  187. 'projectid' => $item['id'],
  188. 'username' => $user['username'],
  189. ])->lockForUpdate()->first());
  190. if (empty($row)) {
  191. DB::table('project_users')->insert([
  192. 'type' => '收藏',
  193. 'projectid' => $item['id'],
  194. 'isowner' => $item['username'] == $user['username'] ? 1 : 0,
  195. 'username' => $user['username'],
  196. 'indate' => Base::time()
  197. ]);
  198. DB::table('project_log')->insert([
  199. 'type' => '日志',
  200. 'projectid' => $item['id'],
  201. 'username' => $user['username'],
  202. 'detail' => '收藏项目',
  203. 'indate' => Base::time()
  204. ]);
  205. return Base::retSuccess('收藏成功');
  206. }
  207. return Base::retSuccess('已收藏');
  208. }
  209. }
  210. });
  211. }
  212. /**
  213. * 重命名项目
  214. *
  215. * @apiParam {Number} projectid 项目ID
  216. * @apiParam {String} title 项目新名称
  217. */
  218. public function rename()
  219. {
  220. $user = Users::authE();
  221. if (Base::isError($user)) {
  222. return $user;
  223. } else {
  224. $user = $user['data'];
  225. }
  226. //
  227. $projectid = trim(Request::input('projectid'));
  228. $item = Base::DBC2A(DB::table('project_lists')->where('id', $projectid)->first());
  229. if (empty($item)) {
  230. return Base::retError('项目不存在或已被删除!');
  231. }
  232. if ($item['username'] != $user['username']) {
  233. return Base::retError('你不是项目负责人!');
  234. }
  235. //
  236. $title = trim(Request::input('title'));
  237. if (mb_strlen($title) < 2) {
  238. return Base::retError('项目名称不可以少于2个字!');
  239. } elseif (mb_strlen($title) > 32) {
  240. return Base::retError('项目名称最多只能设置32个字!');
  241. }
  242. //
  243. DB::table('project_lists')->where('id', $item['id'])->update([
  244. 'title' => $title
  245. ]);
  246. DB::table('project_log')->insert([
  247. 'type' => '日志',
  248. 'projectid' => $item['id'],
  249. 'username' => $user['username'],
  250. 'detail' => '【' . $item['title'] . '】重命名【' . $title . '】',
  251. 'indate' => Base::time()
  252. ]);
  253. //
  254. return Base::retSuccess('修改成功');
  255. }
  256. /**
  257. * 移交项目
  258. *
  259. * @apiParam {Number} projectid 项目ID
  260. * @apiParam {String} username 项目新负责人用户名
  261. *
  262. * @throws \Throwable
  263. */
  264. public function transfer()
  265. {
  266. $user = Users::authE();
  267. if (Base::isError($user)) {
  268. return $user;
  269. } else {
  270. $user = $user['data'];
  271. }
  272. //
  273. $projectid = trim(Request::input('projectid'));
  274. $item = Base::DBC2A(DB::table('project_lists')->where('id', $projectid)->first());
  275. if (empty($item)) {
  276. return Base::retError('项目不存在或已被删除!');
  277. }
  278. if ($item['username'] != $user['username']) {
  279. return Base::retError('你不是项目负责人!');
  280. }
  281. //
  282. $username = trim(Request::input('username'));
  283. if ($username == $item['username']) {
  284. return Base::retError('你已是项目负责人!');
  285. }
  286. $count = DB::table('users')->where('username', $username)->count();
  287. if ($count <= 0) {
  288. return Base::retError('成员用户名(' . $username . ')不存在!');
  289. }
  290. //判断是否已在项目
  291. $count = DB::table('project_users')->where([
  292. 'type' => '成员',
  293. 'projectid' => $item['id'],
  294. 'username' => $username,
  295. ])->count();
  296. if ($count <= 0) {
  297. DB::table('project_users')->insert([
  298. 'type' => '成员',
  299. 'projectid' => $item['id'],
  300. 'isowner' => 0,
  301. 'username' => $username,
  302. 'indate' => Base::time()
  303. ]);
  304. DB::table('project_log')->insert([
  305. 'type' => '日志',
  306. 'projectid' => $item['id'],
  307. 'username' => $username,
  308. 'detail' => '移交项目,自动加入项目',
  309. 'indate' => Base::time()
  310. ]);
  311. }
  312. //开始移交
  313. return DB::transaction(function () use ($user, $username, $item) {
  314. DB::table('project_lists')->where('id', $item['id'])->update([
  315. 'username' => $username
  316. ]);
  317. DB::table('project_log')->insert([
  318. 'type' => '日志',
  319. 'projectid' => $item['id'],
  320. 'username' => $user['username'],
  321. 'detail' => '【' . $item['username'] . '】移交给【' . $username . '】',
  322. 'indate' => Base::time()
  323. ]);
  324. DB::table('project_users')->where([
  325. 'projectid' => $item['id'],
  326. 'username' => $item['username'],
  327. ])->update([
  328. 'isowner' => 0
  329. ]);
  330. DB::table('project_users')->where([
  331. 'projectid' => $item['id'],
  332. 'username' => $username,
  333. ])->update([
  334. 'isowner' => 1
  335. ]);
  336. return Base::retSuccess('移交成功');
  337. });
  338. }
  339. /**
  340. * 删除项目
  341. *
  342. * @apiParam {Number} projectid 项目ID
  343. */
  344. public function delete()
  345. {
  346. $user = Users::authE();
  347. if (Base::isError($user)) {
  348. return $user;
  349. } else {
  350. $user = $user['data'];
  351. }
  352. //
  353. $projectid = trim(Request::input('projectid'));
  354. $item = Base::DBC2A(DB::table('project_lists')->where('id', $projectid)->first());
  355. if (empty($item)) {
  356. return Base::retError('项目不存在或已被删除!');
  357. }
  358. if ($item['username'] != $user['username']) {
  359. return Base::retError('你不是项目负责人!');
  360. }
  361. //
  362. DB::table('project_lists')->where('id', $item['id'])->update([
  363. 'delete' => 1,
  364. 'deletedate' => Base::time()
  365. ]);
  366. DB::table('project_log')->insert([
  367. 'type' => '日志',
  368. 'projectid' => $item['id'],
  369. 'username' => $user['username'],
  370. 'detail' => '删除项目',
  371. 'indate' => Base::time()
  372. ]);
  373. //
  374. return Base::retSuccess('删除成功');
  375. }
  376. /**
  377. * 退出项目
  378. *
  379. * @apiParam {Number} projectid 项目ID
  380. */
  381. public function out()
  382. {
  383. $user = Users::authE();
  384. if (Base::isError($user)) {
  385. return $user;
  386. } else {
  387. $user = $user['data'];
  388. }
  389. //
  390. $projectid = trim(Request::input('projectid'));
  391. $item = Base::DBC2A(DB::table('project_lists')->where('id', $projectid)->first());
  392. if (empty($item)) {
  393. return Base::retError('项目不存在或已被删除!');
  394. }
  395. if ($item['username'] == $user['username']) {
  396. return Base::retError('你是项目负责人,不可退出项目!');
  397. }
  398. $count = DB::table('project_users')->where([
  399. 'type' => '成员',
  400. 'projectid' => $projectid,
  401. 'username' => $user['username'],
  402. ])->count();
  403. if ($count <= 0) {
  404. return Base::retError('你不在项目成员内!');
  405. }
  406. //
  407. DB::table('project_users')->where([
  408. 'type' => '成员',
  409. 'projectid' => $item['id'],
  410. 'username' => $user['username'],
  411. ])->delete();
  412. DB::table('project_log')->insert([
  413. 'type' => '日志',
  414. 'projectid' => $item['id'],
  415. 'username' => $user['username'],
  416. 'detail' => '退出项目',
  417. 'indate' => Base::time()
  418. ]);
  419. //
  420. return Base::retSuccess('退出项目成功');
  421. }
  422. /**
  423. * 项目成员-列表
  424. *
  425. * @apiParam {Number} projectid 项目ID
  426. * @apiParam {Number} [page] 当前页,默认:1
  427. * @apiParam {Number} [pagesize] 每页显示数量,默认:20,最大:100
  428. */
  429. public function users__lists()
  430. {
  431. $user = Users::authE();
  432. if (Base::isError($user)) {
  433. return $user;
  434. } else {
  435. $user = $user['data'];
  436. }
  437. //
  438. $projectid = intval(Request::input('projectid'));
  439. $count = DB::table('project_users')->where([
  440. 'type' => '成员',
  441. 'projectid' => $projectid,
  442. 'username' => $user['username'],
  443. ])->count();
  444. if ($count <= 0) {
  445. return Base::retError('你不在项目成员内!');
  446. }
  447. //
  448. $lists = DB::table('project_lists')
  449. ->join('project_users', 'project_lists.id', '=', 'project_users.projectid')
  450. ->select(['project_lists.title', 'project_users.*'])
  451. ->where([
  452. ['project_lists.id', $projectid],
  453. ['project_lists.delete', 0],
  454. ['project_users.type', '成员'],
  455. ])
  456. ->orderByDesc('project_lists.id')->paginate(Min(Max(Base::nullShow(Request::input('pagesize'), 10), 1), 100));
  457. $lists = Base::getPageList($lists);
  458. if ($lists['total'] == 0) {
  459. return Base::retError('未找到任何相关的成员');
  460. }
  461. foreach ($lists['lists'] AS $key => $item) {
  462. $userInfo = Users::username2basic($item['username']);
  463. $lists['lists'][$key]['userimg'] = $userInfo['userimg'];
  464. $lists['lists'][$key]['nickname'] = $userInfo['nickname'];
  465. $lists['lists'][$key]['profession'] = $userInfo['profession'];
  466. }
  467. return Base::retSuccess('success', $lists);
  468. }
  469. /**
  470. * 项目成员-添加、删除
  471. *
  472. * @apiParam {String} act
  473. * - delete: 删除成员
  474. * - else: 添加成员
  475. * @apiParam {Number} projectid 项目ID
  476. * @apiParam {Array|String} username 用户名(或用户名组)
  477. */
  478. public function users__join()
  479. {
  480. $user = Users::authE();
  481. if (Base::isError($user)) {
  482. return $user;
  483. } else {
  484. $user = $user['data'];
  485. }
  486. //
  487. $projectid = trim(Request::input('projectid'));
  488. $item = Base::DBC2A(DB::table('project_lists')->where('id', $projectid)->first());
  489. if (empty($item)) {
  490. return Base::retError('项目不存在或已被删除!');
  491. }
  492. if ($item['username'] != $user['username']) {
  493. return Base::retError('你是不是项目负责人!');
  494. }
  495. $usernames = Request::input('username');
  496. if (empty($usernames)) {
  497. return Base::retError('参数错误!');
  498. }
  499. if (!is_array($usernames)) {
  500. if (Base::strExists($usernames, ',')) {
  501. $usernames = explode(',', $usernames);
  502. } else {
  503. $usernames = [$usernames];
  504. }
  505. }
  506. //
  507. $logArray = [];
  508. foreach ($usernames AS $username) {
  509. $count = DB::table('project_users')->where([
  510. 'type' => '成员',
  511. 'projectid' => $projectid,
  512. 'username' => $username,
  513. ])->count();
  514. switch (Request::input('act')) {
  515. case 'delete': {
  516. if ($count > 0 && $item['username'] != $username) {
  517. DB::table('project_users')->where([
  518. 'type' => '成员',
  519. 'projectid' => $projectid,
  520. 'username' => $username,
  521. ])->delete();
  522. $logArray[] = [
  523. 'type' => '日志',
  524. 'projectid' => $item['id'],
  525. 'username' => $user['username'],
  526. 'detail' => '将成员【' . $username . '】移出项目',
  527. 'indate' => Base::time()
  528. ];
  529. }
  530. break;
  531. }
  532. default: {
  533. if ($count == 0) {
  534. DB::table('project_users')->insert([
  535. 'type' => '成员',
  536. 'projectid' => $projectid,
  537. 'isowner' => 0,
  538. 'username' => $username,
  539. 'indate' => Base::time()
  540. ]);
  541. $logArray[] = [
  542. 'type' => '日志',
  543. 'projectid' => $item['id'],
  544. 'username' => $username,
  545. 'detail' => '将成员【' . $username . '】加入项目',
  546. 'indate' => Base::time()
  547. ];
  548. }
  549. break;
  550. }
  551. }
  552. }
  553. return Base::retSuccess('操作完成');
  554. }
  555. /**
  556. * 项目任务-列表
  557. *
  558. * @apiParam {Number} projectid 项目ID
  559. * @apiParam {Number} [archived] 是否归档
  560. * - 0: 未归档
  561. * - 1: 已归档
  562. * @apiParam {String} [type] 任务类型
  563. * - 未完成
  564. * - 已超期
  565. * - 已完成
  566. * @apiParam {Number} [statistics] 是否获取统计数据(1:获取)
  567. * @apiParam {Number} [page] 当前页,默认:1
  568. * @apiParam {Number} [pagesize] 每页显示数量,默认:20,最大:100
  569. */
  570. public function task__lists()
  571. {
  572. $user = Users::authE();
  573. if (Base::isError($user)) {
  574. return $user;
  575. } else {
  576. $user = $user['data'];
  577. }
  578. //
  579. $projectid = intval(Request::input('projectid'));
  580. $count = DB::table('project_users')->where([
  581. 'type' => '成员',
  582. 'projectid' => $projectid,
  583. 'username' => $user['username'],
  584. ])->count();
  585. if ($count <= 0) {
  586. return Base::retError('你不在项目成员内!');
  587. }
  588. //
  589. $whereFunc = null;
  590. $whereArray = [];
  591. $whereArray[] = ['project_lists.id', '=', $projectid];
  592. $whereArray[] = ['project_lists.delete', '=', 0];
  593. if (in_array(Request::input('archived'), [0, 1])) {
  594. $whereArray[] = ['project_task.archived', '=', intval(Request::input('archived'))];
  595. }
  596. $type = trim(Request::input('type'));
  597. switch ($type) {
  598. case '未完成':
  599. $whereArray[] = ['project_task.status', '=', '进行中'];
  600. $whereFunc = function($query) {
  601. $query->where('project_task.enddate', '=', 0)->orWhere('project_task.enddate', '>', Base::time());
  602. };
  603. break;
  604. case '已超期':
  605. $whereArray[] = ['project_task.status', '=', '进行中'];
  606. $whereArray[] = ['project_task.enddate', '>', 0];
  607. $whereArray[] = ['project_task.enddate', '<=', Base::time()];
  608. break;
  609. case '已完成':
  610. $whereArray[] = ['project_task.status', '=', '已完成'];
  611. break;
  612. }
  613. //
  614. $orderBy = 'project_task.id';
  615. if (intval(Request::input('archived')) === 1) {
  616. $orderBy = 'project_task.archiveddate';
  617. }
  618. //
  619. $lists = DB::table('project_lists')
  620. ->join('project_task', 'project_lists.id', '=', 'project_task.projectid')
  621. ->select(['project_task.*'])
  622. ->where($whereArray)
  623. ->where($whereFunc)
  624. ->orderByDesc($orderBy)->paginate(Min(Max(Base::nullShow(Request::input('pagesize'), 10), 1), 100));
  625. $lists = Base::getPageList($lists);
  626. if ($lists['total'] == 0) {
  627. return Base::retError('未找到任何相关的任务');
  628. }
  629. if (intval(Request::input('statistics')) == 1) {
  630. $lists['statistics_unfinished'] = $type === '未完成' ? $lists['total'] : DB::table('project_task')->where('status', '进行中')->where(function($query) { $query->where('enddate', '=', 0)->orWhere('enddate', '>', Base::time()); })->count();
  631. $lists['statistics_overdue'] = $type === '已超期' ? $lists['total'] : DB::table('project_task')->where('status', '进行中')->whereBetween('enddate', [0, Base::time()])->count();
  632. $lists['statistics_complete'] = $type === '已完成' ? $lists['total'] : DB::table('project_task')->where('status', '已完成')->count();
  633. }
  634. return Base::retSuccess('success', $lists);
  635. }
  636. /**
  637. * 项目任务-归档、取消归档
  638. *
  639. * @apiParam {String} act
  640. * - cancel: 取消归档
  641. * - else: 加入归档
  642. * @apiParam {Number} taskid 任务ID
  643. */
  644. public function task__archived()
  645. {
  646. $user = Users::authE();
  647. if (Base::isError($user)) {
  648. return $user;
  649. } else {
  650. $user = $user['data'];
  651. }
  652. //
  653. $taskid = intval(Request::input('taskid'));
  654. $task = Base::DBC2A(DB::table('project_lists')
  655. ->join('project_task', 'project_lists.id', '=', 'project_task.projectid')
  656. ->select(['project_task.projectid', 'project_task.title', 'project_task.archived'])
  657. ->where([
  658. ['project_lists.delete', '=', 0],
  659. ['project_task.id', '=', $taskid],
  660. ])
  661. ->first());
  662. if (empty($task)) {
  663. return Base::retError('任务不存在!');
  664. }
  665. $count = DB::table('project_users')->where([
  666. 'type' => '成员',
  667. 'projectid' => $task['projectid'],
  668. 'username' => $user['username'],
  669. ])->count();
  670. if ($count <= 0) {
  671. return Base::retError('你不在项目成员内!');
  672. }
  673. //
  674. switch (Request::input('act')) {
  675. case 'cancel': {
  676. if ($task['archived'] == 0) {
  677. return Base::retError('任务未归档!');
  678. }
  679. DB::table('project_task')->where('id', $taskid)->update([
  680. 'archived' => 1,
  681. 'archiveddate' => Base::time()
  682. ]);
  683. DB::table('project_log')->insert([
  684. 'type' => '日志',
  685. 'projectid' => $task['projectid'],
  686. 'taskid' => $taskid,
  687. 'username' => $user['username'],
  688. 'detail' => '取消归档【' . $task['title'] . '】',
  689. 'indate' => Base::time()
  690. ]);
  691. return Base::retSuccess('取消归档成功');
  692. }
  693. default: {
  694. if ($task['archived'] == 1) {
  695. return Base::retError('任务已归档!');
  696. }
  697. DB::table('project_task')->where('id', $taskid)->update([
  698. 'archived' => 0,
  699. ]);
  700. DB::table('project_log')->insert([
  701. 'type' => '日志',
  702. 'projectid' => $task['projectid'],
  703. 'taskid' => $taskid,
  704. 'username' => $user['username'],
  705. 'detail' => '归档【' . $task['title'] . '】',
  706. 'indate' => Base::time()
  707. ]);
  708. return Base::retSuccess('加入归档成功');
  709. }
  710. }
  711. }
  712. }