MasterOrderSettledService.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace app\api\service\order\settled;
  3. use app\common\enum\order\OrderSourceEnum;
  4. use app\api\model\order\Order as OrderModel;
  5. /**
  6. * 普通订单结算服务类
  7. */
  8. class MasterOrderSettledService extends OrderSettledService
  9. {
  10. /**
  11. * 构造函数
  12. */
  13. public function __construct($user, $supplierData, $params)
  14. {
  15. parent::__construct($user, $supplierData, $params);
  16. //订单来源
  17. $this->orderSource = [
  18. 'source' => OrderSourceEnum::MASTER,
  19. 'activity_id' => 0
  20. ];
  21. //自身构造,差异化规则
  22. }
  23. /**
  24. * 验证订单商品的状态
  25. */
  26. public function validateProductList()
  27. {
  28. foreach ($this->supplierData as $supplier) {
  29. foreach ($supplier['productList'] as $product) {
  30. // 判断商品是否下架
  31. if ($product['product_status']['value'] != 10) {
  32. $this->error = "很抱歉,商品 [{$product['product_name']}] 已下架";
  33. return false;
  34. }
  35. // 判断商品库存
  36. if ($product['spec_type'] == 20 && $product['total_num'] > $product['product_sku']['stock_num']) {
  37. $this->error = "很抱歉,商品 [{$product['product_name']}] 库存不足";
  38. return false;
  39. }
  40. if ($product['spec_type'] == 10 && $product['total_num'] > $product['product_stock']) {
  41. $this->error = "很抱歉,商品 [{$product['product_name']}] 库存不足";
  42. return false;
  43. }
  44. // 是否是会员商品
  45. if(count($product['grade_ids']) > 0 && $product['grade_ids'][0] != ''){
  46. if(!in_array($this->user['grade_id'], $product['grade_ids'])){
  47. $this->error = '很抱歉,此商品仅特定会员可购买';
  48. return false;
  49. }
  50. }
  51. // 判断是否超过限购数量
  52. if($product['limit_num'] > 0){
  53. $hasNum = OrderModel::getHasBuyOrderNum($this->user['user_id'], $product['product_id']);
  54. if($hasNum + $product['total_num'] > $product['limit_num']){
  55. $this->error = "很抱歉,购买超过此商品最大限购数量";
  56. return false;
  57. }
  58. }
  59. }
  60. }
  61. return true;
  62. }
  63. }