首页 > 其他分享 >自定义开发odoo14的统计在线用户人数

自定义开发odoo14的统计在线用户人数

时间:2023-12-26 16:26:13浏览次数:37  
标签:last users 自定义 models res odoo14 用户 在线

在 Odoo 14 中统计在线人数通常涉及到定制开发或者使用特定的模块。

  1. 自定义开发:如果没有现成的模块,您可能需要进行一些自定义开发。这通常涉及到扩展Odoo的用户模型,以跟踪用户的登录和登出活动。以下是一个基本的实现思路:

    • 扩展用户模型:在用户模型(通常是res.users)中添加字段来记录用户的最后活动时间。
    • 更新最后活动时间:在用户进行操作时更新这个字段。这可以通过继承并修改相应的控制器和方法来实现。
    • 计算在线用户:创建一个方法或计划任务,定期检查用户的最后活动时间,并确定哪些用户可以被视为“在线”。例如,您可以认为在过去几分钟内有活动的用户是在线的。
  2. 视图和报告:为了方便查看在线用户,您可以创建一个特定的视图或报告,显示当前在线的用户列表。

  3. 安全性和性能考虑:在实现这样的功能时,请确保考虑到数据的安全性和对系统性能的影响。例如,频繁地更新用户的最后活动时间可能会对数据库性能产生影响。

这些只是基本的指导思路,具体实现会根据您的具体需求和Odoo环境的配置有所不同。如果您不熟悉Odoo的开发,建议咨询专业的Odoo开发人员或者公司以获得更具体的帮助。

  为了在 Odoo 14 中监控在线人数,我们需要创建一个自定义模块。这个模块将扩展res.users模型来记录用户的最后活动时间,并提供一个方法来计算当前在线的用户数量。以下是实现这一功能的步骤和代码示例。
  

步骤 1:创建模块结构

首先,您需要创建一个新的 Odoo 模块。这通常涉及到创建以下文件和目录:

  • __init__.py:初始化文件。
  • __manifest__.py:模块的元数据文件。
  • models/:包含模型扩展的目录。
  • models/__init__.py:初始化模型目录。
  • models/res_users.py:包含用户模型扩展的文件。

步骤 2:扩展res.users模型

models/res_users.py文件中,我们将扩展res.users模型以添加一个字段来记录用户的最后活动时间。

from odoo import fields, models

class ResUsers(models.Model):
    _inherit = 'res.users'

    last_activity_time = fields.Datetime("Last Activity Time")

    def update_last_activity(self):
        """ 更新用户的最后活动时间 """
        self.sudo().write({'last_activity_time': fields.Datetime.now()})

 

步骤 3:创建一个计算在线用户的方法

在同一个文件中,我们可以添加一个方法来计算在线用户的数量。这里我们定义“在线”为在过去10分钟内有活动的用户。

from odoo import fields, models
from datetime import timedelta

class ResUsers(models.Model):
    _inherit = 'res.users'

    # ... [之前的代码]

    @classmethod
    def get_online_users_count(cls):
        """ 计算当前在线用户的数量 """
        last_10_minutes = fields.Datetime.now() - timedelta(minutes=10)
        return cls.search_count([('last_activity_time', '>=', last_10_minutes)])

 

步骤 4:更新用户活动

您需要在用户执行操作时更新last_activity_time字段。这可能涉及到修改多个地方,例如在登录时或者在执行特定操作时。这里是一个简化的例子,展示如何在用户登录时更新:

from odoo import api, models

class ResUsers(models.Model):
    _inherit = 'res.users'

    # ... [之前的代码]

    @api.model
    def _update_last_activity_after_login(self, db, login, password):
        """ 登录后更新用户的最后活动时间 """
        user = self.search([('login', '=', login)])
        if user:
            user.update_last_activity()

步骤 5:__init__.py文件

确保在__init__.py文件中导入扩展后的res.users模型。

from . import models

步骤 6:__manifest__.py文件

__manifest__.py中定义模块的元数据。

{
    'name': 'Online Users Monitoring',
    'version': '1.0',
    'summary': 'Monitor Online Users in Odoo',
    'category': 'Tools',
    'depends': ['base'],
    'data': [],
    'installable': True,
}

好了,到此就可以构成odoo14的所有文件,下面把上面的分析整合成一个完整的文件 

=====================================================================================================================================================

 

为了实现在 Odoo 14 中监控在线用户的功能,我们需要创建一个自定义模块,该模块将会记录用户的最后活动时间,并提供一个视图来展示当前在线的用户。以下是整合的 Python 和 XML 文件,这些文件应该构成模块的主要部分。

1. __init__.py 文件

这个文件将导入我们自定义的模型。

from . import models

2. __manifest__.py 文件

这个文件包含了模块的基本信息。

{
    'name': 'Online Users Monitoring',
    'version': '1.0',
    'summary': 'Monitor Online Users in Odoo',
    'category': 'Tools',
    'depends': ['base', 'web'],
    'data': [
        'views/online_users_view.xml',
    ],
    'installable': True,
    'application': True,
}

 

3. models/__init__.py 文件

这个文件导入了扩展后的用户模型。

 

from . import res_users

 

 

4. models/res_users.py 文件

这个文件包含了扩展后的用户模型和相关方法。

from odoo import api, fields, models, http
from datetime import timedelta

class ResUsers(models.Model):
    _inherit = 'res.users'

    last_activity_time = fields.Datetime("Last Activity Time")

    @api.model
    def update_last_activity(self):
        """ 更新用户的最后活动时间 """
        self.sudo().write({'last_activity_time': fields.Datetime.now()})

    @classmethod
    def get_online_users_count(cls):
        """ 计算当前在线用户的数量 """
        last_10_minutes = fields.Datetime.now() - timedelta(minutes=10)
        return cls.search_count([('last_activity_time', '>=', last_10_minutes)])

class IrHttp(models.AbstractModel):
    _inherit = 'ir.http'

    @classmethod
    def _dispatch(cls):
        """ 拦截 HTTP 请求并更新用户的最后活动时间 """
        response = super(IrHttp, cls)._dispatch()
        current_user = http.request.env.user
        if current_user:
            current_user.update_last_activity()
        return response

5. views/online_users_view.xml 文件

这个 XML 文件包含了一个视图,用于展示在线用户。

<odoo>
    <record id="view_online_users_tree" model="ir.ui.view">
        <field name="name">online.users.tree</field>
        <field name="model">res.users</field>
        <field name="arch" type="xml">
            <tree>
                <field name="name"/>
                <field name="login"/>
                <field name="last_activity_time"/>
            </tree>
        </field>
    </record>

    <record id="action_online_users" model="ir.actions.act_window">
        <field name="name">Online Users</field>
        <field name="res_model">res.users</field>
        <field name="view_mode">tree</field>
        <field name="view_id" ref="view_online_users_tree"/>
        <field name="domain">[('last_activity_time','&gt;=', (DateTime.now() - timedelta(minutes=10)).strftime('%Y-%m-%d %H:%M:%S'))]</field>
    </record>

    <menuitem id="menu_online_users"
              name="Online Users"
              action="action_online_users"
              parent="base.menu_management"/>
</odoo>

使用说明

  1. 创建模块:您需要按照上述结构创建一个 Odoo 模块。这包括创建文件夹和相应的文件。
  2. 安装模块:在 Odoo 中安装这个模块。
  3. 使用:安装后,您可以在 Odoo 的界面上找到“在线用户”的菜单项,查看当前在线的用户。

注意事项

  • 这个实现假定用户在最后一次HTTP请求后的10分钟内为在线。这不一定能完美地检测浏览器关闭的情况,但它提供了一种近似的方法。
  • 在实际部署之前,请在开发环境中进行充分的测试。
  • 根据您的具体需求,您可能需要调整代码中的一些参数,

标签:last,users,自定义,models,res,odoo14,用户,在线
From: https://www.cnblogs.com/lyt263/p/17928368.html

相关文章

  • 微信小程序自定义ui库开发记录
    首先去翻官网,看有没有提供,发现微信官方提供了命令行工具,用于快速初始化一个项目npminstall-g@wechat-miniprogram/miniprogram-cli自定义组件/开发第三方自定义组件(qq.com)使用体验打包后的组件,每个js顶部都会带上一大段代码,增大了文件体积。没有相关的组件文档生......
  • uniGUI学习之自定义Hint(74)
    默认Hint样式 procedureTMainForm.UniFormShow(Sender:TObject);vari:Integer;beginfori:=0toSelf.ControlCount-1dobeginwithTUniFormControl(Self.Controls[i])dobeginifHint<>''thenbeginShowHint......
  • 在线helpdesk帮助台软件
    随着企业的数字化转型和信息化建设,IT部门承担着越来越重要的职责。为了更好地管理和解决用户的技术问题,许多企业选择采用在线helpdesk帮助台软件。在本文中,我们将探讨在线helpdesk帮助台软件的定义、功能和优势。 首先,什么是在线helpdesk帮助台软件?在线helpdesk帮助台软件是一......
  • Salesforce LWC学习(四十七) 标准页面更新以后自定义页面如何捕捉?
    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_subscribe_lc.htmhttps://developer.salesforce.com/docs/component-library/bundle/lightning-emp-api/documentationsalesforce零基础学习(九十六)Platfor......
  • [CSS]border-image-slice宽高不确定时自定义边框
    宽高不确定时自定义边框效果: <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>borde......
  • 初中英语优秀范文100篇-038Should Students Make Firiends Online?学生应该在线交友吗
    PDF格式公众号回复关键字:SHCZFW038记忆树1Nowadays,manyteenagersshowagreatinterestinmakingfriendsonline.翻译现如今,许多青少年对于在网上交朋友表现出很大的兴趣。简化记忆兴趣句子结构1"Nowadays"是一个副词,表示这个句子描述的是现在的情景。2"man......
  • 自定义指令
    介绍​除了Vue内置的一系列指令(比如v-model或v-show)之外,Vue还允许你注册自定义的指令(CustomDirectives)。我们已经介绍了两种在Vue中重用代码的方式:组件和组合式函数。组件是主要的构建模块,而组合式函数则侧重于有状态的逻辑。另一方面,自定义指令主要是为了重用......
  • 【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
    问题描述当在AppServiceforWindows环境中所列出的TomcatVersion没有所需要的情况下,如何实现自定义Tomcat环境呢? 问题解答第一步: 从官网下载要使用的 tomcat版本,解压到本地目录第二步:修改 conf/server.xml 配置文件将 port 改成 -1:将 Http-connectport 改成 ${po......
  • 【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
    问题描述当在AppServiceforWindows环境中所列出的TomcatVersion没有所需要的情况下,如何实现自定义Tomcat环境呢? 问题解答第一步: 从官网下载要使用的tomcat版本,解压到本地目录 第二步:修改 conf/server.xml 配置文件将 port 改成 -1:将 Http-connect......
  • 免费又好用的在线资源托管支持外链
    免费又好用的在线资源托管支持外链有时候想外链引用一些媒体资源,如音乐、图片等1.opendrivehttps://www.opendrive.com......