70 lines
2.0 KiB
PHP
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),
|
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|
|
|