Operate.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: shenyang
  5. * Date: 2018/6/16
  6. * Time: 上午10:53
  7. */
  8. namespace app\frontend\modules\process\controllers;
  9. use app\common\exceptions\AppException;
  10. use app\frontend\models\Process;
  11. trait Operate
  12. {
  13. /**
  14. * @var Process
  15. */
  16. protected $process;
  17. /**
  18. * @return Process
  19. */
  20. abstract protected function _getProcess();
  21. abstract protected function beforeStates();
  22. /**
  23. * @return Process
  24. * @throws AppException
  25. */
  26. protected function getProcess(){
  27. $this->validate([
  28. 'process_id' => 'integer'
  29. ]);
  30. if (!isset($this->process)) {
  31. $this->process = $this->_getProcess();
  32. if ($this->process->status->code != $this->beforeStates()) {
  33. throw new AppException("{$this->process->name}流程处于{$this->process->status->name}状态,无法执行{$this->name}操作");
  34. }
  35. }
  36. return $this->process;
  37. }
  38. /**
  39. * @return \Illuminate\Database\Eloquent\Model
  40. * @throws \Exception
  41. */
  42. public function toNextState()
  43. {
  44. $data = $this->getProcess()->toNextStatus();
  45. return $data;
  46. }
  47. /**
  48. * @return \Illuminate\Database\Eloquent\Model
  49. * @throws \Exception
  50. */
  51. public function toCancelState()
  52. {
  53. $data = $this->getProcess()->toCancelStatus();
  54. return $data;
  55. }
  56. }