Product.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. namespace app\shop\model\plus\bargain;
  3. use app\common\model\plus\bargain\Product as ProductModel;
  4. use app\common\model\plus\bargain\BargainSku as BargainSkuModel;
  5. /**
  6. * 砍价商品模型
  7. */
  8. class Product extends ProductModel
  9. {
  10. /**
  11. * 获取砍价商品列表
  12. */
  13. public static function getList($bargain_activity_id)
  14. {
  15. return (new static())->with(['product', 'bargainSku'])
  16. ->where('bargain_activity_id', '=', $bargain_activity_id)
  17. ->order(['sort' => 'asc', 'create_time' => 'asc'])
  18. ->select();
  19. }
  20. /**
  21. * 检查商品是否存在
  22. */
  23. public function checkProduct($product_id)
  24. {
  25. return $this->where('product_id', '=', $product_id)->find();
  26. }
  27. /**
  28. * 新增
  29. */
  30. public function add($bargain_activity_id, $product_list)
  31. {
  32. //添加活动
  33. foreach ($product_list as $product){
  34. $this->addProduct($bargain_activity_id, $product);
  35. }
  36. }
  37. /**
  38. * 修改
  39. */
  40. public function edit($bargain_activity_id, $product_list)
  41. {
  42. //添加活动
  43. foreach ($product_list as $product){
  44. $this->addProduct($bargain_activity_id, $product, true);
  45. }
  46. }
  47. /**
  48. * 添加商品
  49. */
  50. public function addProduct($bargain_activity_id, $product, $isUpdate = false)
  51. {
  52. //添加商品
  53. $stock = array_sum(array_column($product['spec_list'], 'bargain_stock'));
  54. $arr = [
  55. 'product_id' => $product['product_id'],
  56. 'limit_num' => $product['limit_num'],
  57. 'stock' => $stock,
  58. 'bargain_activity_id' => $bargain_activity_id,
  59. 'sort' => $product['sort'],
  60. 'sales_initial' => $product['sales_initial'],
  61. 'is_delete' => $product['is_delete'],
  62. 'app_id' => self::$app_id,
  63. ];
  64. if($isUpdate){
  65. $model = static::detail($product['bargain_product_id'])?:new self();
  66. }else{
  67. $model = new self();
  68. }
  69. $model->save($arr);
  70. //商品规格
  71. $sku_model = new BargainSkuModel();
  72. $save_data = [];
  73. $not_in_sku_id = [];
  74. foreach ($product['spec_list'] as $sku) {
  75. $sku_data = [
  76. 'bargain_product_id' => $model['bargain_product_id'],
  77. 'product_id' => $product['product_id'],
  78. 'product_sku_id' => $sku['product_sku_id'],
  79. 'bargain_price' => $sku['bargain_price'],
  80. 'bargain_num' => $sku['bargain_num'],
  81. 'product_price' => $sku['product_price'],
  82. 'bargain_stock' => $sku['bargain_stock'],
  83. 'product_attr' => isset($sku['product_attr'])?$sku['product_attr']:'',
  84. 'bargain_activity_id' => $bargain_activity_id,
  85. 'app_id' => self::$app_id,
  86. ];
  87. if($sku['bargain_product_sku_id'] > 0){
  88. $detail = $sku_model->find($sku['bargain_product_sku_id']);
  89. if($detail){
  90. $detail->save($sku_data);
  91. array_push($not_in_sku_id, $sku['bargain_product_sku_id']);
  92. }
  93. }else{
  94. $save_data[] = $sku_data;
  95. }
  96. }
  97. //删除规格
  98. count($not_in_sku_id) > 0 && $sku_model->where('bargain_product_id', '=', $model['bargain_product_id'])
  99. ->whereNotIn('bargain_product_sku_id', $not_in_sku_id)
  100. ->delete();
  101. //新增规格
  102. count($save_data) > 0 && $sku_model->saveAll($save_data);
  103. }
  104. /**
  105. * 商品ID是否存在,并且活动未结束,或未删除
  106. */
  107. public static function isExistProductId($productId)
  108. {
  109. return !!(new static)->alias('product')
  110. ->join('bargain_activity activity', 'activity.bargain_activity_id = product.bargain_activity_id','left')
  111. ->where('product.product_id', '=', $productId)
  112. ->where('product.is_delete', '=', 0)
  113. ->where('activity.end_time', '>', time())
  114. ->where('activity.is_delete', '=', 0)
  115. ->value('product.bargain_product_id');
  116. }
  117. }