OrderBatchPayFrom.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace addons\TinyShop\common\forms;
  3. use Yii;
  4. use yii\base\Model;
  5. use common\helpers\BcHelper;
  6. use common\interfaces\PayHandler;
  7. use addons\TinyShop\common\enums\OrderStatusEnum;
  8. use addons\TinyShop\common\models\order\Order;
  9. use addons\TinyShop\common\models\order\OrderProduct;
  10. /**
  11. * Class OrderBatchPayFrom
  12. * @package addons\TinyShop\common\forms
  13. */
  14. class OrderBatchPayFrom extends Model implements PayHandler
  15. {
  16. /**
  17. * @var
  18. */
  19. public $unite_no;
  20. /**
  21. * @var Order
  22. */
  23. public $orders;
  24. /**
  25. * @return array
  26. */
  27. public function rules()
  28. {
  29. return [
  30. ['unite_no', 'required'],
  31. ['unite_no', 'verifyPay'],
  32. ];
  33. }
  34. /**
  35. * @param $attribute
  36. * @throws \yii\web\UnprocessableEntityHttpException
  37. */
  38. public function verifyPay($attribute)
  39. {
  40. $this->orders = Yii::$app->tinyShopService->order->findByUniteNo($this->unite_no);
  41. if (!$this->orders) {
  42. $this->addError($attribute, '找不到订单');
  43. return;
  44. }
  45. /** @var Order $order */
  46. foreach ($this->orders as $order) {
  47. if ($order['order_status'] != OrderStatusEnum::NOT_PAY) {
  48. $this->addError($attribute, '订单已完成');
  49. return;
  50. }
  51. // 支付前验证库存
  52. Yii::$app->tinyShopService->productSku->decrRepertory($order, $order->product, null, false);
  53. }
  54. }
  55. /**
  56. * 支付说明
  57. *
  58. * @return string
  59. */
  60. public function getBody(): string
  61. {
  62. return '订单支付';
  63. }
  64. /**
  65. * 支付详情
  66. *
  67. * @return string
  68. */
  69. public function getDetails(): string
  70. {
  71. return '';
  72. }
  73. /**
  74. * 支付金额
  75. *
  76. * @return float
  77. */
  78. public function getTotalFee(): float
  79. {
  80. $payMoney = 0;
  81. /** @var Order $order */
  82. foreach ($this->orders as $order) {
  83. $payMoney = BcHelper::add($payMoney, $order->pay_money);
  84. }
  85. return $payMoney;
  86. }
  87. /**
  88. * 获取订单号
  89. *
  90. * @return float
  91. */
  92. public function getOrderSn(): string
  93. {
  94. return $this->unite_no;
  95. }
  96. /**
  97. * 交易流水号
  98. *
  99. * @return string
  100. */
  101. public function getOutTradeNo(): string
  102. {
  103. if ($pay = Yii::$app->services->extendPay->findByOrderSn($this->unite_no)) {
  104. return $pay->unite_no;
  105. }
  106. return '';
  107. }
  108. /**
  109. * @return int
  110. */
  111. public function getMerchantId(): int
  112. {
  113. return 0;
  114. }
  115. /**
  116. * 是否查询订单号(避免重复生成)
  117. *
  118. * @return bool
  119. */
  120. public function isQueryOrderSn(): bool
  121. {
  122. return true;
  123. }
  124. }
粤ICP备19079148号