Master.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 Master
  14. * @package app\api\service\order\source
  15. */
  16. class Master 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. // 判断商品是否下架
  46. if (
  47. empty($goods['goods'])
  48. || $goods['goods']['goods_status']['value'] != 10
  49. ) {
  50. $this->error = "很抱歉,商品 [{$goods['goods_name']}] 已下架";
  51. return false;
  52. }
  53. // 获取商品的sku信息
  54. $goodsSku = $this->getOrderGoodsSku($goods['goods_id'], $goods['spec_sku_id']);
  55. // sku已不存在
  56. if (empty($goodsSku)) {
  57. $this->error = "很抱歉,商品 [{$goods['goods_name']}] sku已不存在,请重新下单";
  58. return false;
  59. }
  60. // 付款减库存
  61. if ($goods['deduct_stock_type'] == 20 && $goods['total_num'] > $goodsSku['stock_num']) {
  62. $this->error = "很抱歉,商品 [{$goods['goods_name']}] 库存不足";
  63. return false;
  64. }
  65. }
  66. return true;
  67. }
  68. /**
  69. * 获取指定的商品sku信息
  70. * @param $goodsId
  71. * @param $specSkuId
  72. * @return \app\common\model\GoodsSku|null
  73. * @throws \think\exception\DbException
  74. */
  75. private function getOrderGoodsSku($goodsId, $specSkuId)
  76. {
  77. return GoodsSkuModel::detail($goodsId, $specSkuId);
  78. }
  79. }