Sharp.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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\sharp\Goods as SharpGoodsModel;
  11. use app\common\library\helper;
  12. /**
  13. * 订单来源-秒杀订单扩展类
  14. * Class Sharp
  15. * @package app\api\service\order\source
  16. */
  17. class Sharp extends Basics
  18. {
  19. /**
  20. * 判断订单是否允许付款
  21. * @param $order
  22. * @return bool
  23. * @throws \think\exception\DbException
  24. */
  25. public function checkOrderStatusOnPay($order)
  26. {
  27. // 判断订单状态
  28. if (!$this->checkOrderStatusOnPayCommon($order)) {
  29. return false;
  30. }
  31. // 判断商品状态、库存
  32. if (!$this->checkGoodsStatusOnPay($order['goods'])) {
  33. return false;
  34. }
  35. return true;
  36. }
  37. /**
  38. * 判断商品状态、库存 (未付款订单)
  39. * @param $goodsList
  40. * @return bool
  41. * @throws \think\exception\DbException
  42. */
  43. protected function checkGoodsStatusOnPay($goodsList)
  44. {
  45. foreach ($goodsList as $goods) {
  46. // 秒杀商品信息
  47. $sharpGoods = SharpGoodsModel::detail($goods['goods_source_id'], ['sku']);
  48. // 判断商品是否下架
  49. if (empty($sharpGoods) || $sharpGoods['is_delete'] || !$sharpGoods['status']) {
  50. $this->error = "很抱歉,商品 [{$goods['goods_name']}] 不存在或已下架";
  51. return false;
  52. }
  53. // 获取秒杀商品的sku信息
  54. $goodsSku = $this->getOrderGoodsSku($sharpGoods, $goods['spec_sku_id']);
  55. if (empty($goodsSku)) {
  56. $this->error = "很抱歉,商品 [{$goods['goods_name']}] sku已不存在,请重新下单";
  57. return false;
  58. }
  59. // 付款减库存
  60. if ($goods['deduct_stock_type'] == 20 && $goods['total_num'] > $goodsSku['seckill_stock']) {
  61. $this->error = "很抱歉,商品 [{$goods['goods_name']}] 库存不足";
  62. return false;
  63. }
  64. }
  65. return true;
  66. }
  67. /**
  68. * 获取指定的商品sku信息
  69. * @param $sharpGoods
  70. * @param $specSkuId
  71. * @return bool
  72. */
  73. private function getOrderGoodsSku($sharpGoods, $specSkuId)
  74. {
  75. return helper::getArrayItemByColumn($sharpGoods['sku'], 'spec_sku_id', $specSkuId);
  76. }
  77. }