Bargain.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. /**
  3. *
  4. * @copyright ©2020 点小铺
  5. * @author hanj
  6. * @link: https://dyuit.com
  7. * Created by VSCode
  8. */
  9. namespace app\api\service\order\source;
  10. use app\api\model\GoodsSku as GoodsSkuModel;
  11. /**
  12. * 订单来源-砍价订单扩展类
  13. * Class Bargain
  14. * @package app\api\service\order\source
  15. */
  16. class Bargain extends Basics
  17. {
  18. /**
  19. * 判断订单是否允许付款
  20. * @param $order
  21. * @return bool
  22. * @throws \think\exception\DbException
  23. */
  24. public function checkOrderStatusOnPay($order)
  25. {
  26. // 判断订单状态
  27. if (!$this->checkOrderStatusOnPayCommon($order)) {
  28. return false;
  29. }
  30. // 判断商品状态、库存
  31. if (!$this->checkGoodsStatusOnPay($order['goods'])) {
  32. return false;
  33. }
  34. return true;
  35. }
  36. /**
  37. * 判断商品状态、库存 (未付款订单)
  38. * @param $goodsList
  39. * @return bool
  40. * @throws \think\exception\DbException
  41. */
  42. protected function checkGoodsStatusOnPay($goodsList)
  43. {
  44. foreach ($goodsList as $goods) {
  45. // 获取商品的sku信息
  46. $goodsSku = $this->getOrderGoodsSku($goods['goods_id'], $goods['spec_sku_id']);
  47. // sku已不存在
  48. if (empty($goodsSku)) {
  49. $this->error = "很抱歉,商品 [{$goods['goods_name']}] sku已不存在,请重新下单";
  50. return false;
  51. }
  52. // 付款减库存
  53. if ($goods['deduct_stock_type'] == 20 && $goods['total_num'] > $goodsSku['stock_num']) {
  54. $this->error = "很抱歉,商品 [{$goods['goods_name']}] 库存不足";
  55. return false;
  56. }
  57. }
  58. return true;
  59. }
  60. /**
  61. * 获取指定的商品sku信息
  62. * @param $goodsId
  63. * @param $specSkuId
  64. * @return \app\common\model\GoodsSku|null
  65. * @throws \think\exception\DbException
  66. */
  67. private function getOrderGoodsSku($goodsId, $specSkuId)
  68. {
  69. return GoodsSkuModel::detail($goodsId, $specSkuId);
  70. }
  71. }