IntegralOrderValidate.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. namespace app\shopapi\validate;
  3. use app\common\enum\{IntegralGoodsEnum, IntegralOrderEnum, PayEnum};
  4. use app\common\model\IntegralOrder;
  5. use app\common\validate\BaseValidate;
  6. /**
  7. * 积分订单验证
  8. * Class IntegralOrderValidate
  9. * @package app\api\validate
  10. */
  11. class IntegralOrderValidate extends BaseValidate
  12. {
  13. protected $rule = [
  14. 'id' => 'require|number|checkOrder',
  15. ];
  16. protected $message = [
  17. 'id.require' => '参数缺失',
  18. 'id.number' => '参数类型错误',
  19. ];
  20. /**
  21. * @notes 详情场景
  22. * @return IntegralOrderValidate
  23. * @author 段誉
  24. * @date 2022/3/31 15:14
  25. */
  26. public function sceneDetail()
  27. {
  28. return $this->only(['id']);
  29. }
  30. /**
  31. * @notes 取消订单场景
  32. * @return IntegralOrderValidate
  33. * @author 段誉
  34. * @date 2022/3/31 15:15
  35. */
  36. public function sceneCancel()
  37. {
  38. return $this->only(['id'])->append('id', 'checkCancel');
  39. }
  40. /**
  41. * @notes 确认收货场景
  42. * @return IntegralOrderValidate
  43. * @author 段誉
  44. * @date 2022/3/31 15:15
  45. */
  46. public function sceneConfirm()
  47. {
  48. return $this->only(['id'])->append('id', 'checkConfirm');
  49. }
  50. /**
  51. * @notes 物流场景
  52. * @return IntegralOrderValidate
  53. * @author 段誉
  54. * @date 2022/3/31 15:15
  55. */
  56. public function sceneTraces()
  57. {
  58. return $this->only(['id']);
  59. }
  60. /**
  61. * @notes 删除场景
  62. * @return IntegralOrderValidate
  63. * @author 段誉
  64. * @date 2022/3/31 15:16
  65. */
  66. public function sceneDel()
  67. {
  68. return $this->only(['id'])->append('id','checkDel');
  69. }
  70. /**
  71. * @notes 验证订单
  72. * @param $value
  73. * @param $rule
  74. * @param $data
  75. * @return bool|string
  76. * @author 段誉
  77. * @date 2022/3/31 15:16
  78. */
  79. protected function checkOrder($value, $rule, $data)
  80. {
  81. $condition = ['id' => $value, 'user_id' => $data['user_id']];
  82. $order = IntegralOrder::where($condition)->findOrEmpty();
  83. if ($order->isEmpty()) {
  84. return '订单不存在';
  85. }
  86. if ($order['del'] == 1) {
  87. return '订单已删除';
  88. }
  89. return true;
  90. }
  91. /**
  92. * @notes 校验确认收货操作
  93. * @param $value
  94. * @param $rule
  95. * @param $data
  96. * @return bool|string
  97. * @author 段誉
  98. * @date 2022/3/31 15:16
  99. */
  100. protected function checkConfirm($value, $rule, $data)
  101. {
  102. $order = IntegralOrder::findOrEmpty($value);
  103. if ($order['order_status'] < IntegralOrderEnum::ORDER_STATUS_DELIVERY) {
  104. return '订单未发货';
  105. }
  106. if ($order['order_status'] == IntegralOrderEnum::ORDER_STATUS_COMPLETE) {
  107. return '订单已完成';
  108. }
  109. return true;
  110. }
  111. /**
  112. * @notes 校验删除操作
  113. * @param $value
  114. * @param $rule
  115. * @param $data
  116. * @return bool|string
  117. * @author 段誉
  118. * @date 2022/3/31 15:16
  119. */
  120. public function checkDel($value, $rule, $data)
  121. {
  122. $order = IntegralOrder::findOrEmpty($value);
  123. // 订单状态为 已关闭 且 [未支付 或者 已退款才可以删除]
  124. if ($order['order_status'] == IntegralOrderEnum::ORDER_STATUS_DOWN) {
  125. if ($order['pay_status'] == PayEnum::UNPAID || $order['refund_status'] == 1) {
  126. return true;
  127. }
  128. }
  129. return '订单不可删除';
  130. }
  131. /**
  132. * @notes 校验取消操作
  133. * @param $value
  134. * @param $rule
  135. * @param $data
  136. * @return bool|string
  137. * @author 段誉
  138. * @date 2022/3/31 15:16
  139. */
  140. public function checkCancel($value, $rule, $data)
  141. {
  142. $order = IntegralOrder::findOrEmpty($value);
  143. $goods_snap = $order['goods_snap'];
  144. // 商品类型为红包的不可取消
  145. if ($goods_snap['type'] == IntegralGoodsEnum::TYPE_BALANCE) {
  146. return '此订单不可取消';
  147. }
  148. if ($order['order_status'] >= IntegralOrderEnum::ORDER_STATUS_GOODS) {
  149. return '此订单不可取消';
  150. }
  151. return true;
  152. }
  153. }