在 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分钟内为在线。这不一定能完美地检测浏览器关闭的情况,但它提供了一种近似的方法。
  • 在实际部署之前,请在开发环境中进行充分的测试。
  • 根据您的具体需求,您可能需要调整代码中的一些参数,

自定义开发odoo14的统计在线用户人数的更多相关文章

  1. 使用 Redis 统计在线用户人数

    在构建应用的时候, 我们经常需要对用户的一举一动进行记录, 而其中一个比较重要的操作, 就是对在线的用户进行记录. 本文将介绍四种使用 Redis 对在线用户进行记录的方案, 这些方案虽然都可以对在线 ...

  2. ASP.NET MVC使用SignalR统计在线用户人数

    学到新东西就记录一下.也许正好有人需要~~~~~~ 由于需要记录当前在线用户,emmmm又是没做过的... 本来想用数据库的形式,但是想想这么简单的功能百度肯定有.遨游一波百度,有所收获.... 虽然 ...

  3. Tomcat集群下获取memcached缓存对象数量,统计在线用户数据量

    项目需要统计在线用户数量,系统部署在集群环境下,使用会话粘贴的方式解决Session问题.要想得到真实在线用户数,必须是所有节点的总和. 这里考虑使用memcached存放用户登录数据,key为use ...

  4. 用HttpSessionListener统计在线用户或做账号在线人数管理

    使用HttpSessionListener接口可监听session的创建和失效 session是在用户第一次访问页面时创建 在session超时或调用request.getSession().inva ...

  5. PHP统计在线用户数量

    一段经典的php统计在线用户数量的代码,一起学习分享. <?php /**  * Created by PhpStorm.  * User: jifei  * Date: 15/11/24  * ...

  6. Javaweb基础--->利用监听器统计在线用户数量和用户信息

    首页布局:index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  7. java Session统计在线用户,并且显示在线用户

    关键字: httpsession 1.http://www.jspcn.net/htmlnews/11049329478121583.html       监听器 2.session.invalida ...

  8. 用python爬取B站在线用户人数

    最近在自学Python爬虫,所以想练一下手,用python来爬取B站在线人数,应该可以拿来小小分析一下 设计思路 首先查看网页源代码,找到相应的html,然后利用各种工具(BeautifulSoup或 ...

  9. ASP.NET中在线用户统计

    统计在线用户的作用不言而喻,就是为了网站管理者可以知道当前用户的多少,然后根据用户数量来观察服务器或者程序的性能,从而可以直观的了解到网站的吸引力或者网站程序的效率.现在,我们就介绍一个简单明了的方法 ...

  10. 拼多多后台开发面试真题:如何用Redis统计独立用户访问量

    众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发,稍微优秀一点的,都给到30K的Offer,当然,拼多多加班也是出名的,一周上6天班是常态,每天工作时间基本都是超过1 ...

随机推荐

  1. 机器学习(6)K近邻算法

    k-近邻,通过离你最近的来判断你的类别 例子: 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近的样本中大多数属于某一类别),则该样本属于这个类别 K近邻需要做标准化处理 例如: imp ...

  2. 每日一练:无感刷新页面(附可运行的前后端源码,前端vue,后端node)

    1.前言 想象下,你正常在网页上浏览页面.突然弹出一个窗口,告诉你登录失效,跳回了登录页面,让你重新登录.你是不是很恼火.这时候无感刷新的作用就体现出来了. 2.方案 2.1 redis设置过期时间 ...

  3. 「co-examination - A」

    破壁,组合意义法: 五种颜色 \(\star,a,b,c,d\). 对于 l.h.s. 钦定 \(k\),在 \(3n+k\) 个球中选出 \(2n\) 个球染色,在靠左的 \(n\) 个球中选 \( ...

  4. Vue路由新开页面跳转和传参传递

    需求:在后台管理系统首页列表项中,点击详情跳转到系统中指定菜单的路由要求新开窗口并需要带上参数查询. 第一种方法: 1 const { id } = item; 2 let routeUrl = th ...

  5. 整理DB2左补零,右补零的方法

    在项目中经常遇到需要左补零,右补零的情况,在DB2实验环境中展示 1.左补零(1)数字左补零,数字长度不定用right(digits(cast(expression as bigint)),NUM)能 ...

  6. 一行代码搞定 font-size 响应式

    前言 公司要做大屏,但是大屏还要有个嵌在系统的版本,屏幕(iframe)小了但字体大了怎么办.网上找了很多代码都很长,个人参考了资料后实现了一个一行代码 font-size 响应式. TL;DR ht ...

  7. Java算法之动态规划

    ①动态规划 动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程.20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的 ...

  8. struct 结构体【GO 基础】

    〇.前言 虽然 Go 语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念,但是可以通过结构体的内嵌,再配合接口,来实现面向对象,甚至具有更高的扩展性和 ...

  9. Macos下用Clion调试chromium源码

    1:下载CLion 2021.1.3(网上有破解版) 2:选择File->Open 导入chromium源码 3:在Src同级目录新建一个CMakeLists.txt 4:点击clion编译按钮 ...

  10. 微软发布开源平台 Radius:高效构建、运行基于Dapr 云原生应用程序

    Microsoft Azure 孵化团队很高兴地宣布[1]推出一个名为 Radius 的新开放应用程序平台,该平台将应用程序置于每个开发阶段的中心,重新定义应用程序的构建.管理和理解方式.Radius ...