Files
xk-api-yii/common/services/SalespersonOrderBindService.php
2026-06-15 16:20:02 +08:00

70 lines
2.0 KiB
PHP

<?php
namespace common\services;
use common\models\newDb\ClinicSalespersonModel;
use common\models\newDb\SalespersonQrCodeModel;
use common\models\newDb\UserSalespersonModel;
use Yii;
/**
* 推广员与订单/挂号绑定解析(与 Laravel SalespersonOrderBindService 规则一致)。
*/
class SalespersonOrderBindService
{
/**
* @return array{salesperson_id: int, user_salesperson_id: int}
*/
public function resolveForOrder(int $userId, int $storeId, int $orderCreatedAt): array
{
$empty = ['salesperson_id' => 0, 'user_salesperson_id' => 0];
if ($userId <= 0 || $storeId <= 0 || !Yii::$app->has('new_db')) {
return $empty;
}
$bind = UserSalespersonModel::find()
->where(['user_id' => $userId, 'status' => 0])
->orderBy(['id' => SORT_DESC])
->one();
if (!$bind) {
return $empty;
}
$salespersonId = (int) ($bind->salesperson_id ?? 0);
if ($salespersonId <= 0) {
return $empty;
}
$storeIds = array_map('intval', SalespersonQrCodeModel::find()
->select('store_id')
->where(['salesperson_id' => $salespersonId])
->column());
if (!in_array($storeId, $storeIds, true)) {
return $empty;
}
$bindCreatedAt = $bind->created_at ?? 0;
if (!is_numeric($bindCreatedAt)) {
$bindCreatedAt = strtotime((string) $bindCreatedAt);
}
$bindCreatedAt = (int) $bindCreatedAt;
if ($orderCreatedAt <= $bindCreatedAt) {
return $empty;
}
$salesperson = ClinicSalespersonModel::findOne($salespersonId);
if (!$salesperson) {
return $empty;
}
return [
'salesperson_id' => (int) $salesperson->id,
'user_salesperson_id' => (int) ($bind->id ?? 0),
];
}
}