1. 推广员用户挂号

This commit is contained in:
李琦
2026-06-15 16:20:02 +08:00
parent bede28aced
commit 5f5ef87b44
6 changed files with 126 additions and 87 deletions

View File

@@ -0,0 +1,11 @@
<?php
namespace common\models\newDb;
class ClinicSalespersonModel extends \common\core\BaseNewActiveRecord
{
public static function tableName()
{
return 'xk_clinic_salesperson';
}
}

View File

@@ -0,0 +1,16 @@
<?php
namespace common\models\newDb;
class SalespersonQrCodeModel extends \common\core\BaseNewActiveRecord
{
public static function tableName()
{
return 'xk_salesperson_qr_code';
}
public function getClinicSalesperson()
{
return $this->hasOne(ClinicSalespersonModel::class, ['id' => 'salesperson_id']);
}
}

View File

@@ -0,0 +1,16 @@
<?php
namespace common\models\newDb;
class UserSalespersonModel extends \common\core\BaseNewActiveRecord
{
public static function tableName()
{
return 'xk_user_salesperson';
}
public function getClinicSalesperson()
{
return $this->hasOne(ClinicSalespersonModel::class, ['id' => 'salesperson_id']);
}
}

View File

@@ -1,73 +1,69 @@
<?php
namespace common\services;
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) {
return $empty;
}
$bind = (new \yii\db\Query())
->from('xk_user_salesperson')
->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 = (new \yii\db\Query())
->select('store_id')
->from('xk_salesperson_qr_code')
->where(['salesperson_id' => $salespersonId])
->column();
$storeIds = array_map('intval', $storeIds);
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 = (new \yii\db\Query())
->from('xk_salesperson')
->where(['id' => $salespersonId])
->one();
if (!$salesperson) {
return $empty;
}
return [
'salesperson_id' => (int) $salesperson['id'],
'user_salesperson_id' => (int) ($bind['id'] ?? 0),
];
}
}
<?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);

View File

@@ -156,14 +156,14 @@ class RegisterForm extends BaseModel
$UserRegister->order_number = ($order_number['order_number']??0 ) + 1;
$UserRegister->price = $ServiceUser->docService->register_price;
$UserRegister->pay_type = $payConfig->pay_type??2;//1微信 2易票联
// if ($UserRegister->hasAttribute('salesperson_id')) {
// $bindResult = (new SalespersonOrderBindService())->resolveForOrder(
// (int) \Yii::$app->user->id,
// $actualStoreId,
// time()
// );
// $UserRegister->salesperson_id = (int) ($bindResult['salesperson_id'] ?? 0);
// }
if ($UserRegister->hasAttribute('salesperson_id')) {
$bindResult = (new SalespersonOrderBindService())->resolveForOrder(
(int) \Yii::$app->user->id,
$actualStoreId,
time()
);
$UserRegister->salesperson_id = (int) ($bindResult['salesperson_id'] ?? 0);
}
$UserRegister->saveOrFail();
$event = new RegisterEvent();//触发订单创建事件

View File

@@ -5,6 +5,7 @@ namespace service\modules\v1\controllers;
use common\core\BaseAppController;
use common\enums\RegisterEnum;
use common\helpers\FuncHelper;
use common\models\newDb\ClinicSalespersonModel;
use common\models\oldDb\Register;
use common\models\oldDb\UserPatientCase;
use common\services\ExportService;
@@ -188,13 +189,12 @@ class RegisterController extends BaseAppController
if (!$m->hasAttribute('salesperson_id') || (int) $m->salesperson_id <= 0) {
return '';
}
$row = (new \yii\db\Query())
->select(['nick_name', 'phone'])
->from('xk_salesperson')
->where(['id' => (int) $m->salesperson_id])
->one();
$sp = ClinicSalespersonModel::findOne((int) $m->salesperson_id);
if (!$sp) {
return '';
}
return (string) ($row['nick_name'] ?? $row['phone'] ?? '');
return (string) ($sp->nick_name ?? $sp->phone ?? '');
},
]
];