Basics.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2024 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types=1);
  12. namespace app\common\service\order\source;
  13. use app\common\service\BaseService;
  14. use app\common\model\GoodsSku as GoodsSkuModel;
  15. use app\common\enum\goods\Status as GoodsStatusEnum;
  16. use app\common\enum\order\PayStatus as PayStatusEnum;
  17. use app\common\enum\order\OrderStatus as OrderStatusEnum;
  18. use app\common\enum\order\PayStatus as OrderPayStatusEnum;
  19. use app\common\enum\order\DeliveryStatus as DeliveryStatusEnum;
  20. use app\common\enum\goods\DeductStockType as DeductStockTypeEnum;
  21. /**
  22. * 订单来源基类
  23. * Class Basics
  24. * @package app\common\service\order\source
  25. */
  26. abstract class Basics extends BaseService
  27. {
  28. /**
  29. * 判断订单是否允许付款
  30. * @param $order
  31. * @return mixed
  32. */
  33. abstract public function checkOrderStatusOnPay($order);
  34. /**
  35. * 判断订单是否允许支付 (公共)
  36. * @param $order
  37. * @return bool
  38. */
  39. protected function checkOrderStatusOnPayCommon($order): bool
  40. {
  41. // 判断订单状态
  42. if ($order['order_status'] != OrderStatusEnum::NORMAL) {
  43. $this->error = '当前订单状态不合法,无法支付';
  44. return false;
  45. }
  46. // 判断订单支付状态
  47. if ($order['pay_status'] == OrderPayStatusEnum::SUCCESS) {
  48. $this->error = '当前订单已支付,无需重复支付';
  49. return false;
  50. }
  51. return true;
  52. }
  53. /**
  54. * 判断商品状态、库存 (未付款订单)
  55. * @param $goodsList
  56. * @param bool $verifyStatus 是否验证商品状态(上架)
  57. * @return bool
  58. */
  59. protected function checkGoodsStatusOnPayCommon($goodsList, bool $verifyStatus = true): bool
  60. {
  61. foreach ($goodsList as $goods) {
  62. // 判断商品是否下架
  63. if ($verifyStatus && $goods['goods']['status'] == GoodsStatusEnum::OFF_SALE) {
  64. $this->error = "很抱歉,商品 [{$goods['goods_name']}] 已下架";
  65. return false;
  66. }
  67. // 获取商品的sku信息
  68. $goodsSku = $this->getOrderGoodsSku($goods['goods_id'], $goods['goods_sku_id']);
  69. if (empty($goodsSku)) {
  70. $this->error = "很抱歉,商品 [{$goods['goods_name']}] SKU已不存在,请重新下单";
  71. return false;
  72. }
  73. // 付款减库存
  74. if ($goods['deduct_stock_type'] == DeductStockTypeEnum::PAYMENT && $goods['total_num'] > $goodsSku['stock_num']) {
  75. $this->error = "很抱歉,商品 [{$goods['goods_name']}] 库存不足";
  76. return false;
  77. }
  78. }
  79. return true;
  80. }
  81. /**
  82. * 判断订单是否允许取消 (公共)
  83. * @param $order
  84. * @return bool
  85. */
  86. protected function checkOrderByCancelCommon($order): bool
  87. {
  88. if ($order['delivery_status'] != DeliveryStatusEnum::NOT_DELIVERED) {
  89. $this->error = '已发货订单不可取消';
  90. return false;
  91. }
  92. return true;
  93. }
  94. /**
  95. * 判断订单是否允许发货 (公共)
  96. * @param $order
  97. * @return bool|false
  98. */
  99. protected function checkOrderByDeliveryCommon($order): bool
  100. {
  101. if ($order['pay_status'] != PayStatusEnum::SUCCESS
  102. || $order['delivery_status'] == DeliveryStatusEnum::DELIVERED) {
  103. $this->error = "订单号[{$order['order_no']}]不满足发货条件!";
  104. return false;
  105. }
  106. return true;
  107. }
  108. /**
  109. * 获取指定的商品sku信息
  110. * @param $goodsId
  111. * @param $goodsSkuId
  112. * @return GoodsSkuModel|array|null
  113. */
  114. private function getOrderGoodsSku($goodsId, $goodsSkuId)
  115. {
  116. return GoodsSkuModel::detail($goodsId, $goodsSkuId);
  117. }
  118. }