Master.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 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\api\service\order\source;
  13. use app\api\model\GoodsSku as GoodsSkuModel;
  14. use app\common\model\ShopGoodsSku as ShopGoodsSkuModel;
  15. /**
  16. * 订单来源-普通订单扩展类
  17. * Class Master
  18. * @package app\api\service\order\source
  19. */
  20. class Master extends Basics
  21. {
  22. /**
  23. * 判断订单是否允许付款
  24. * @param $order
  25. * @return bool
  26. */
  27. public function checkOrderStatusOnPay($order)
  28. {
  29. // 判断订单状态
  30. if (!$this->checkOrderStatusOnPayCommon($order)) {
  31. return false;
  32. }
  33. // 判断商品状态、库存
  34. if (!$this->checkGoodsStatusOnPay($order)) {
  35. return false;
  36. }
  37. return true;
  38. }
  39. /**
  40. * 判断商品状态、库存 (未付款订单)
  41. * @param $order
  42. * @return bool
  43. */
  44. protected function checkGoodsStatusOnPay($order)
  45. {
  46. $goodsList = $order['goods'];
  47. $deliveryType = $order['delivery_type'];
  48. foreach ($goodsList as $goods) {
  49. // 判断商品是否下架
  50. if (
  51. empty($goods['goods'])
  52. || $goods['goods']['status'] != 10
  53. ) {
  54. $this->error = "很抱歉,商品 [".limit_str((string)$goods['goods_name'])."] 已下架";
  55. return false;
  56. }
  57. if ($deliveryType == 10) {
  58. // 获取商品的sku信息
  59. $goodsSku = $this->getOrderGoodsSku($goods['goods_id'], $goods['goods_sku_id']);
  60. } else { // 门店自提
  61. if($goods['goods_type']==20){
  62. $goodsSku = $this->getOrderGoodsSku($goods['goods_id'], $goods['goods_sku_id']);
  63. }else{
  64. $goodsSku = $this->getOrderShopGoodsSku($order['shop_id'], $goods['goods_id'], $goods['goods_sku_id']);
  65. }
  66. }
  67. // sku已不存在
  68. if (empty($goodsSku)) {
  69. $this->error = "很抱歉,商品 [".limit_str((string)$goods['goods_name'])."] sku已不存在,请重新下单";
  70. return false;
  71. }
  72. // 付款减库存
  73. if ($goods['deduct_stock_type'] == 20 && $goods['total_num'] > $goodsSku['stock_num']) {
  74. $this->error = "很抱歉,商品 [".limit_str((string)$goods['goods_name'])."] 库存不足";
  75. return false;
  76. }
  77. }
  78. return true;
  79. }
  80. /**
  81. * 获取指定的商品sku信息
  82. * @param $goodsId
  83. * @param $goodsSkuId
  84. * @return GoodsSkuModel|array|null
  85. */
  86. private function getOrderGoodsSku($goodsId, $goodsSkuId)
  87. {
  88. return GoodsSkuModel::detail($goodsId, $goodsSkuId);
  89. }
  90. /**
  91. * 获取指定的门店商品sku信息
  92. * @param $goodsId
  93. * @param $goodsSkuId
  94. * @return GoodsSkuModel|array|null
  95. */
  96. private function getOrderShopGoodsSku($shopId, $goodsId, $goodsSkuId)
  97. {
  98. return ShopGoodsSkuModel::where(['goods_id' => $goodsId,'goods_sku_id' => $goodsSkuId,'shop_id' => $shopId])->find();
  99. }
  100. }