OperationHeartbeatController.php 5.3 KB
<?php
/**
 * @remark :
 * @name   :OperationHeartbeatController.php
 * @author :lyh
 * @method :post
 * @time   :2024/8/28 14:02
 */

namespace App\Http\Controllers\Bside\BCom;

use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Models\Log\OperationHeartbeat;
use App\Models\Manage\Manage;
use App\Models\User\User;

class OperationHeartbeatController extends BaseController
{
    /**
     * @remark :保存数据
     * @name   :saveHeartbeat
     * @author :lyh
     * @method :post
     * @time   :2024/8/28 14:03
     */
    public function saveHeartbeat(){
        if($this->user['project_id'] == 1){
            $this->response('success');
        }
        $this->request->validate([
            'source'=>'required',
            'source_id'=>'required',
            'is_list' => 'required',
            'is_custom'=>'required',
            'is_template'=>'required',
        ], [
            'source.required' => '请选择页面',
            'source_id.required' => '请选择数据id',
            'is_list.required' => '列表页/详情页',
            'is_custom.required' => '是否为扩展模版',
            'is_template.required' => '详情页/可视化',
        ]);
        if(empty($this->param['source_id'])){
            $this->response('success');
        }
        $condition = ['project_id'=>$this->user['project_id'],'source'=>$this->param['source'],'source_id'=>$this->param['source_id'],
            'is_list'=>$this->param['is_list'],'is_custom'=>$this->param['is_custom'],'is_template'=>$this->param['is_template']];
        $operationHeartbeatModel = new OperationHeartbeat();
        $info = $operationHeartbeatModel->read($condition,['id','status']);
        $condition['status'] = $this->param['status'] ?? 0;
        if($info === false){
            $condition['operator_id'] = $this->user['id'];
            $condition['project_id'] = $this->user['project_id'];
            $condition['ip'] = $this->request->ip();
            $condition['manager_id'] = $this->user['manager_id'] ?? 0;
            $operationHeartbeatModel->addReturnId($condition);
        }else{
            $operationHeartbeatModel->edit(['status'=>$condition['status'] ?? 0,'ip'=>$this->request->ip(),'manager_id'=> $this->user['manager_id'] ?? 0],['id'=>$info['id']]);
        }
        $this->response('success');
    }

    /**
     * @remark :获取当前详情
     * @name   :getInfo
     * @author :lyh
     * @method :post
     * @time   :2024/8/28 14:29
     */
    public function getInfo(){
        if($this->user['project_id'] == 1){
            $info['status'] = 0;
            $this->response('success',Code::SUCCESS,$info);
        }
        $this->request->validate([
            'source'=>'required',
            'source_id'=>'required',
            'is_list' => 'required',
            'is_custom'=>'required',
            'is_template'=>'required',
        ], [
            'source.required' => '请选择页面',
            'source_id.required' => '请选择数据id',
            'is_list.required' => '列表页/详情页',
            'is_custom.required' => '是否为扩展模版',
            'is_template.required' => '详情页/可视化',
        ]);
        $condition = ['project_id'=>$this->user['project_id'],'source'=>$this->param['source'],'source_id'=>$this->param['source_id'],
            'is_list'=>$this->param['is_list'],'is_custom'=>$this->param['is_custom'],'is_template'=>$this->param['is_template']];
        $operationHeartbeatModel = new OperationHeartbeat();
        $info = $operationHeartbeatModel->read($condition,['id','status','manager_id','ip','operator_id','updated_at']);
        if($info === false){
            $info = [];
        }else{
            $date_time = strtotime($info['updated_at']) + 120;
            if($date_time < time()){
                $operationHeartbeatModel->edit(['status'=>0,'ip'=>'127.0.0.1'],$condition);
                $info['status'] = 0;
            }
            if($info['status'] == 1){
                //当前登录为切入登录
                if(isset($this->user['manager_id']) && !empty($this->user['manager_id'])){
                    //上一次验证也是切入登录
                    if($info['manager_id'] != 0){
                        $managerModel = new Manage();
                        $managerInfo = $managerModel->read(['id'=>$info['manager_id']],['name']);
                        if(($info['ip'] == $this->request->ip()) && ($info['manager_id'] == $this->user['manager_id'])){
                            $info['status'] = 0;
                        }else{
                            $info['message'] = '此页面数据已有人在编辑,请勿重复操作!操作人ip:'.$info['ip'].'操作的管理员为:'.$managerInfo['name'];
                        }
                    }else{
                        //账号密码登录
                        $userModel = new User();
                        $userInfo = $userModel->read(['id'=>$info['operator_id']],['name']);
                        $info['message'] = '此页面数据已有人在编辑,请勿重复操作!'.$userInfo['name'].'用户登录在操作。';
                    }
                }else{
                    $info['message'] = '此页面数据已有人在编辑,请勿重复操作!';
                }
            }
        }
        $this->response('success',Code::SUCCESS,$info);
    }
}