0, 'fugou_type' => 1, 'fugou_day' => 0, 'fugou_price' => 0, 'fugou_where_num' => 0, 'fugou_where_price' => 0, 'fugou_goods' => [], 'fugou_freeze_level' => '0', 'fugou_freeze_rand' => [1, 1], ]); $fugouSetting = Option::get('fugou', $store_id, 'bonus_pool', 'null')['value']; if (empty($fugouSetting) || $fugouSetting == 'null') { $fugouSetting = $default; } return \json_decode($fugouSetting, true); } // 距离复购剩余天数, 0 不需要复购,< 0 需要复购, > 0 复购剩余天数 public static function cycleByDay($user_id, $store_id, $setting = null) { if ($setting === null) { $setting = self::getSetting($store_id); } // 查找是否有复购订单 $fugouOrder = Order::find()->where([ 'user_id' => $user_id, 'store_id' => $store_id, 'is_fugou' => 1, 'is_sale' => 1, ])->orderBy('id DESC')->one(); $startTime = null; if ($fugouOrder) { $startTime = $fugouOrder->created_at; } if (empty($startTime)) { $shareHolder = ShareHolder::findOne(['user_id' => $user_id, 'store_id' => $store_id, 'is_delete' => 0, 'status' => 1]); if ($shareHolder) { $startTime = $shareHolder->created_at; } } if (empty($startTime)) { return 0; } $settingDay = $setting['fugou_day']; // 计算剩余天数 $day = ceil((time() - $startTime) / 86400); return $settingDay - $day; } // 剩余冻结金额,<=0 需要复购,> 0 不需要复购,剩余金额 public static function cycleByPrice($user_id, $store_id, $setting = null, $frost_price = null) { if ($setting === null) { $setting = self::getSetting($store_id); } if ($frost_price === null) { $frost_price = self::getUserFrostPrice($user_id); } return $setting['fugou_price'] > 0 ? $setting['fugou_price'] - ($frost_price ?: 0) : 0; } // 是否需要复购 public static function isFugou($user_id, $store_id, $setting = null) { if ($setting === null) { $setting = self::getSetting($store_id); } $cycle_day = self::cycleByDay($user_id, $store_id, $setting); $cycle_price = self::cycleByPrice($user_id, $store_id, $setting); if ($setting['fugou_type'] == 1 || $setting['fugou_type'] == 3) { if ($cycle_day < 0) { return true; } } if ($setting['fugou_type'] == 2 || $setting['fugou_type'] == 3) { if ($cycle_price <= 0) { return true; } } return false; } // 获取用户冻结金额 public static function getUserFrostPrice($user_id) { $price = ShareHolderFugouFrostLog::find()->where(['user_id' => $user_id, 'status' => 0])->sum('amount'); return $price ?: 0; } // 发放复购冻结佣金 public static function sendFrostPrice($user_id) { $t = \Yii::$app->db->beginTransaction(); try { $totalPrice = static::getUserFrostPrice($user_id); if ($totalPrice <= 0) { throw new \Exception('没有冻结佣金'); } $user = User::findOne($user_id); $user->updateCounters(['price' => $totalPrice, 'total_price' => $totalPrice]); ShareHolderFugouFrostLog::updateAll(['status' => 1, 'updated_at' => time()], ['user_id' => $user_id]); ShareDetail::updateAll(['is_send' => 1, 'send_time' => time()], ['user_id' => $user_id, 'is_fugou' => 1]); $t->commit(); return true; } catch (\Exception $e) { $t->rollBack(); return false; } } }