diff --git a/app/api/controller/user/UserVisitController.php b/app/api/controller/user/UserVisitController.php index 26fac0cff..9481eedf2 100644 --- a/app/api/controller/user/UserVisitController.php +++ b/app/api/controller/user/UserVisitController.php @@ -6,6 +6,10 @@ use app\api\controller\BaseApiController; use app\api\logic\user\UserVisitLogic; use app\api\validate\VisitValidate; use hg\apidoc\annotation as ApiDoc; + +use Illuminate\Support\Facades\Request; +use support\Response; + #[ApiDoc\title('用户访问')] class UserVisitController extends BaseApiController { @@ -20,7 +24,7 @@ class UserVisitController extends BaseApiController ApiDoc\Header(name: "token", type: "string", require: true, desc: "token"), ApiDoc\ResponseSuccess("data", type: "array"), ] - public function productLog() + public function productLog(): Response { $params = (new VisitValidate())->post()->goCheck('add'); @@ -32,4 +36,30 @@ class UserVisitController extends BaseApiController } + + #[ + ApiDoc\Title('用户访问页面记录'), + ApiDoc\url('/api/user/UserVisit/htmlLog'), + ApiDoc\Method('POST'), + ApiDoc\Param(name: "url", type: "string", require: true, desc: "路径"), + ApiDoc\Param(name: "stay_time", type: "int", require: true, desc: "停留时间"), + ApiDoc\NotHeaders(), + ApiDoc\Header(name: "token", type: "string", require: true, desc: "token"), + ApiDoc\ResponseSuccess("data", type: "array"), + ] + public function htmlLog() + { + $ip = $this->request->getRealIp(); + $params = (new VisitValidate())->post()->goCheck('userAdd'); + $params['ip'] = $ip; + $result = UserVisitLogic::visitAdd($params,$this->userInfo); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(UserVisitLogic::getError()); + + } + + + } \ No newline at end of file diff --git a/app/api/logic/user/UserVisitLogic.php b/app/api/logic/user/UserVisitLogic.php index 5a95ef88c..860b1601f 100644 --- a/app/api/logic/user/UserVisitLogic.php +++ b/app/api/logic/user/UserVisitLogic.php @@ -44,4 +44,41 @@ return false; } } + + + public static function visitAdd(array $params,$userInfo): bool + { + Db::startTrans(); + try { + $check = UserVisit::where(['url'=>$params['url'], + 'uid'=>$userInfo['user_id'] + ]) + ->whereDay('create_time') + ->find(); + if($check){ + UserVisit::where('id',$check['id'])->inc('stay_time',$params['stay_time'])->update(); + }else{ + UserVisit::create([ + 'uid' => $userInfo['user_id'], + 'url' => $params['url'], + 'channel_type' =>$userInfo['terminal'], + 'ip' => $params['ip'], + 'stay_time' => $params['stay_time'], + 'create_time' => time(), + ]); + } + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + + + } + + + + } \ No newline at end of file diff --git a/app/api/validate/VisitValidate.php b/app/api/validate/VisitValidate.php index daf39519a..c343c260a 100644 --- a/app/api/validate/VisitValidate.php +++ b/app/api/validate/VisitValidate.php @@ -21,6 +21,8 @@ class VisitValidate extends BaseValidate protected $rule = [ 'product_id' => 'require|number', 'cate_id' => 'require|number', + 'url' => 'require', + 'stay_time' => 'require|number', ]; @@ -31,6 +33,8 @@ class VisitValidate extends BaseValidate protected $field = [ 'product_id' => '商品id', 'cate_id' => '分类', + 'url' => '路径', + 'stay_time' => '页面停留时间(秒)', ]; @@ -46,5 +50,11 @@ class VisitValidate extends BaseValidate } + public function sceneUserAdd() + { + return $this->only(['url','stay_time']); + } + + } \ No newline at end of file