GrouponLucky.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace addons\shopro\library\activity\provider;
  3. /**
  4. * 幸运拼团
  5. */
  6. class GrouponLucky extends Base
  7. {
  8. protected $rules = [
  9. // "is_commission" => "require|bool",
  10. // "is_free_shipping" => "require|bool",
  11. // "sales_show_type" => "require",
  12. // "team_num" => "require|number",
  13. // "lucky_num" => "require|number",
  14. // "is_fictitious" => "require|bool",
  15. // "fictitious_num" => "number|gt:0",
  16. // "fictitious_time" => "require|float|egt:0",
  17. // "part_gift" => "require|array",
  18. // "is_team_card" => "require|bool",
  19. // "is_leader_discount" => "require|bool",
  20. // "valid_time" => "require|float|gt:0",
  21. // "limit_num" => "number|gt:0",
  22. // "limit_team_buy" => "number|gt:0",
  23. // "refund_type" => "back", // 退款方式 back=原路退回|money=退回到余额
  24. // "order_auto_close" => "float|gt:0",
  25. ];
  26. protected $message = [
  27. // 'team_num.require' => '请填写成团人数',
  28. // 'is_alone.require' => '请选择单独购买',
  29. // 'stock.gt' => '请填写补货数量'
  30. ];
  31. protected $default = [
  32. "is_commission" => 0, // 是否参与分销
  33. "is_free_shipping" => 0, // 是否包邮
  34. "sales_show_type" => "real", // real=真实活动销量|goods=商品总销量(包含虚拟销量)
  35. "team_num" => 2, // 成团人数,最少两人
  36. "lucky_num" => 1, // 拼中人数,最少一人
  37. "is_fictitious" => 0, // 是否允许虚拟成团
  38. "fictitious_num" => 0, // 最多虚拟人数
  39. "fictitious_time" => 0, // 开团多长时间自动虚拟成团
  40. "part_gift" => [], // {"types": "coupon=优惠券|score=积分|money=余额","coupon_ids":"赠优惠券时存在","total":"赠送优惠券总金额","score":"积分","money":"余额"}
  41. "is_team_card" => 0, // 参团卡显示
  42. "is_leader_discount" => 0, // 团长优惠
  43. "valid_time" => 0, // 组团有效时间
  44. "limit_num" => 0, // 每人限购数量
  45. "limit_team_buy" => 0, // 每人每团可参与次数
  46. "refund_type" => "back", // 退款方式 back=原路退回|money=退回到余额
  47. "order_auto_close" => 0, // 订单自动关闭时间
  48. ];
  49. public function check($params, $activity_id = 0)
  50. {
  51. // 数据验证
  52. $params = parent::check($params);
  53. // 验证添加的活动商品是否至少设置了一个活动规格
  54. $this->checkActivitySkuPrice($params['goods_list']);
  55. // 验证赠送规则字段
  56. $this->checkLuckyPartGift($params['rules']['part_gift']);
  57. // 检测活动之间是否存在冲突
  58. $this->checkActivityConflict($params, $params['goods_list'], $activity_id);
  59. return $params;
  60. }
  61. public function save($activity, $params = [])
  62. {
  63. $goodsList = $params['goods_list'];
  64. $this->saveSkuPrice($goodsList, $activity->id);
  65. }
  66. public function recoverSkuPrices($goods, $activity)
  67. {
  68. $activitySkuPrices = $activity['activity_sku_prices'];
  69. $skuPrices = $goods->sku_prices;
  70. foreach ($skuPrices as $key => &$skuPrice) {
  71. $stock = $skuPrice->stock; // 下面要用
  72. $skuPrice->stock = 0;
  73. $skuPrice->sales = 0;
  74. foreach ($activitySkuPrices as $activitySkuPrice) {
  75. if ($skuPrice['id'] == $activitySkuPrice['goods_sku_price_id']) {
  76. // 采用活动的 规格内容
  77. $skuPrice->stock = ($activitySkuPrice['stock'] > $stock) ? $stock : $activitySkuPrice['stock']; // 活动库存不能超过商品库存
  78. $skuPrice->sales = $activitySkuPrice['sales'];
  79. $skuPrice->groupon_price = $activitySkuPrice['price']; // 不覆盖原来规格价格,用作单独购买,将活动的价格设置为新的拼团价格
  80. $skuPrice->status = $activitySkuPrice['status']; // 采用活动的上下架
  81. // 记录相关活动类型
  82. $skuPrice->activity_type = $activity['type'];
  83. $skuPrice->activity_id = $activity['id'];
  84. // 下单的时候需要存活动 的 sku_price_id)
  85. $skuPrice->item_goods_sku_price = $activitySkuPrice;
  86. break;
  87. }
  88. }
  89. }
  90. return $skuPrice;
  91. }
  92. }