|
@@ -0,0 +1,273 @@
|
|
|
+#!/usr/bin/env python3
|
|
|
+# encoding:utf-8
|
|
|
+
|
|
|
+import json
|
|
|
+from . import db
|
|
|
+from datetime import datetime
|
|
|
+
|
|
|
+
|
|
|
+class Agent(db.Model):
|
|
|
+ __tablename__ = 'c_agent'
|
|
|
+ __table_args__ = {
|
|
|
+ 'comment': '坐席信息表',
|
|
|
+ 'mysql_engine': 'InnoDB',
|
|
|
+ 'mysql_charset': 'utf8mb4'
|
|
|
+ }
|
|
|
+
|
|
|
+ id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键')
|
|
|
+ saas_id = db.Column(db.String(16), nullable=False, default='', comment='租户隔离')
|
|
|
+ agent_num = db.Column(db.String(32), nullable=False, default='', comment='坐席工号')
|
|
|
+ agent_name = db.Column(db.String(32), nullable=False, default='', comment='坐席姓名')
|
|
|
+ out_id = db.Column(db.String(32), nullable=False, default='', comment='外部id')
|
|
|
+ agent_pwd = db.Column(db.String(64), nullable=False, default='', comment='坐席密码')
|
|
|
+ agent_type = db.Column(db.SmallInteger, nullable=False, default=0, comment='坐席类型 0:普通坐席; 1:组长; 2:主管')
|
|
|
+ phone_num = db.Column(db.String(32), nullable=False, default='0', comment='分机号')
|
|
|
+ distribute = db.Column(db.SmallInteger, nullable=False, default=1, comment='分配标志 0:不参与排队; 1:参与排队')
|
|
|
+ agent_state = db.Column(db.SmallInteger, nullable=False, default=0, comment='账号状态 0:可用; 1:禁用')
|
|
|
+ identity_type = db.Column(db.SmallInteger, nullable=False, default=0, comment='身份标识')
|
|
|
+ is_delete = db.Column(db.SmallInteger, nullable=False, default=0, comment='删除标识')
|
|
|
+ update_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间')
|
|
|
+ create_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='创建时间')
|
|
|
+
|
|
|
+ __table_args__ = (
|
|
|
+ db.UniqueConstraint('saas_id', 'agent_num', name='uniq_vcc_id_agent_num'),
|
|
|
+ db.Index('idx_saas_id_out_id', 'saas_id', 'out_id'),
|
|
|
+ db.Index('idx_saas_id_phone_num', 'saas_id', 'phone_num')
|
|
|
+ )
|
|
|
+
|
|
|
+ def __repr__(self):
|
|
|
+ return json.dumps(self.to_dict())
|
|
|
+
|
|
|
+ def to_dict(self):
|
|
|
+ return {
|
|
|
+ 'id': self.id,
|
|
|
+ 'saas_id': self.saas_id,
|
|
|
+ 'agent_num': self.agent_num,
|
|
|
+ 'agent_name': self.agent_name,
|
|
|
+ 'out_id': self.out_id,
|
|
|
+ 'agent_pwd': self.agent_pwd,
|
|
|
+ 'agent_type': self.agent_type,
|
|
|
+ 'phone_num': self.phone_num,
|
|
|
+ 'distribute': self.distribute,
|
|
|
+ 'agent_state': self.agent_state,
|
|
|
+ 'identity_type': self.identity_type,
|
|
|
+ 'is_delete': self.is_delete,
|
|
|
+ 'update_time': self.update_time.isoformat() if self.update_time else None,
|
|
|
+ 'create_time': self.create_time.isoformat() if self.create_time else None,
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+class AgentActionLog(db.Model):
|
|
|
+ __tablename__ = 'c_agent_action_log'
|
|
|
+ __table_args__ = {
|
|
|
+ 'comment': '坐席行为日志表',
|
|
|
+ 'mysql_engine': 'InnoDB',
|
|
|
+ 'mysql_charset': 'utf8mb4'
|
|
|
+ }
|
|
|
+
|
|
|
+ id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键')
|
|
|
+ saas_id = db.Column(db.String(16), nullable=False, default='', comment='租户隔离')
|
|
|
+ agent_num = db.Column(db.String(32), nullable=False, default='', comment='坐席工号')
|
|
|
+ out_id = db.Column(db.String(32), nullable=False, default='', comment='外部id')
|
|
|
+ action_type = db.Column(db.SmallInteger, nullable=False, default=0, comment='行为类型')
|
|
|
+ check_state = db.Column(db.SmallInteger, nullable=False, default=-1, comment='签入或签出')
|
|
|
+ pre_check_state = db.Column(db.SmallInteger, nullable=False, default=-1, comment='上一次签入或签出')
|
|
|
+ service_state = db.Column(db.SmallInteger, nullable=False, default=-1, comment='坐席状态')
|
|
|
+ pre_service_state = db.Column(db.SmallInteger, nullable=False, default=-1, comment='上一次坐席状态')
|
|
|
+ check_state_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime(2000, 1, 1), comment='签入或签出时间')
|
|
|
+ pre_check_state_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime(2000, 1, 1), comment='上一次签入或签出时间')
|
|
|
+ service_state_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime(2000, 1, 1), comment='坐席状态变更时间')
|
|
|
+ pre_service_state_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime(2000, 1, 1), comment='上一次坐席状态变更时间')
|
|
|
+ check_state_duration = db.Column(db.BigInteger, nullable=False, default=0, comment='行为持续时间')
|
|
|
+ service_state_duration = db.Column(db.BigInteger, nullable=False, default=0, comment='状态持续时间')
|
|
|
+ task_id = db.Column(db.String(32), nullable=False, default='', comment='任务Id')
|
|
|
+ service_id = db.Column(db.String(32), nullable=False, default='', comment='人工组id')
|
|
|
+ event_type = db.Column(db.Integer, nullable=False, default=0, comment='日志事件类型')
|
|
|
+ event_desc = db.Column(db.String(100), nullable=False, default='', comment='日志事件描述')
|
|
|
+ is_delete = db.Column(db.SmallInteger, nullable=False, default=0, comment='删除标识')
|
|
|
+ update_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间')
|
|
|
+ create_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='创建时间')
|
|
|
+
|
|
|
+ __table_args__ = (
|
|
|
+ db.Index('idx_create_time', 'create_time'),
|
|
|
+ db.Index('idx_saas_id_agent_num', 'saas_id', 'agent_num'),
|
|
|
+ db.Index('idx_saas_id_out_id', 'saas_id', 'out_id'),
|
|
|
+ db.Index('idx_saas_id_task_id', 'saas_id', 'task_id'),
|
|
|
+ db.Index('idx_update_time', 'update_time'),
|
|
|
+ )
|
|
|
+
|
|
|
+ def __repr__(self):
|
|
|
+ return json.dumps(self.to_dict())
|
|
|
+
|
|
|
+ def to_dict(self):
|
|
|
+ return {
|
|
|
+ 'id': self.id,
|
|
|
+ 'saas_id': self.saas_id,
|
|
|
+ 'agent_num': self.agent_num,
|
|
|
+ 'out_id': self.out_id,
|
|
|
+ 'action_type': self.action_type,
|
|
|
+ 'check_state': self.check_state,
|
|
|
+ 'pre_check_state': self.pre_check_state,
|
|
|
+ 'service_state': self.service_state,
|
|
|
+ 'pre_service_state': self.pre_service_state,
|
|
|
+ 'check_state_time': self.check_state_time.isoformat() if self.check_state_time else None,
|
|
|
+ 'pre_check_state_time': self.pre_check_state_time.isoformat() if self.pre_check_state_time else None,
|
|
|
+ 'service_state_time': self.service_state_time.isoformat() if self.service_state_time else None,
|
|
|
+ 'pre_service_state_time': self.pre_service_state_time.isoformat() if self.pre_service_state_time else None,
|
|
|
+ 'check_state_duration': self.check_state_duration,
|
|
|
+ 'service_state_duration': self.service_state_duration,
|
|
|
+ 'task_id': self.task_id,
|
|
|
+ 'service_id': self.service_id,
|
|
|
+ 'event_type': self.event_type,
|
|
|
+ 'event_desc': self.event_desc,
|
|
|
+ 'is_delete': self.is_delete,
|
|
|
+ 'update_time': self.update_time.isoformat() if self.update_time else None,
|
|
|
+ 'create_time': self.create_time.isoformat() if self.create_time else None,
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+class AgentLog(db.Model):
|
|
|
+ __tablename__ = 'c_agent_log'
|
|
|
+ __table_args__ = {
|
|
|
+ 'comment': '坐席日志表',
|
|
|
+ 'mysql_engine': 'InnoDB',
|
|
|
+ 'mysql_charset': 'utf8mb4'
|
|
|
+ }
|
|
|
+
|
|
|
+ id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键')
|
|
|
+ saas_id = db.Column(db.String(16), nullable=False, default='', comment='租户隔离')
|
|
|
+ flow_id = db.Column(db.String(64), nullable=False, default='', comment='人工外呼流程ID')
|
|
|
+ agent_num = db.Column(db.String(32), nullable=False, default='', comment='坐席工号')
|
|
|
+ out_id = db.Column(db.String(32), nullable=False, default='', comment='外部id')
|
|
|
+ event_type = db.Column(db.SmallInteger, nullable=False, default=0, comment='事件类型')
|
|
|
+ event = db.Column(db.String(32), nullable=False, default='0', comment='事件')
|
|
|
+ content = db.Column(db.String(64), nullable=False, default='', comment='描述')
|
|
|
+ is_delete = db.Column(db.SmallInteger, nullable=False, default=0, comment='删除标识')
|
|
|
+ update_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间')
|
|
|
+ create_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='创建时间')
|
|
|
+
|
|
|
+ __table_args__ = (
|
|
|
+ db.Index('idx_saas_id_agent_num', 'saas_id', 'agent_num'),
|
|
|
+ db.Index('idx_saas_id_out_id', 'saas_id', 'out_id')
|
|
|
+ )
|
|
|
+
|
|
|
+ def __repr__(self):
|
|
|
+ return json.dumps(self.to_dict())
|
|
|
+
|
|
|
+ def to_dict(self):
|
|
|
+ return {
|
|
|
+ 'id': self.id,
|
|
|
+ 'saas_id': self.saas_id,
|
|
|
+ 'flow_id': self.flow_id,
|
|
|
+ 'agent_num': self.agent_num,
|
|
|
+ 'out_id': self.out_id,
|
|
|
+ 'event_type': self.event_type,
|
|
|
+ 'event': self.event,
|
|
|
+ 'content': self.content,
|
|
|
+ 'is_delete': self.is_delete,
|
|
|
+ 'update_time': self.update_time.isoformat() if self.update_time else None,
|
|
|
+ 'create_time': self.create_time.isoformat() if self.create_time else None,
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+class AgentMonitor(db.Model):
|
|
|
+ __tablename__ = 'c_agent_monitor'
|
|
|
+ __table_args__ = {
|
|
|
+ 'comment': '坐席监控表',
|
|
|
+ 'mysql_engine': 'InnoDB',
|
|
|
+ 'mysql_charset': 'utf8mb4'
|
|
|
+ }
|
|
|
+
|
|
|
+ id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键')
|
|
|
+ saas_id = db.Column(db.String(16), nullable=False, default='', comment='租户隔离')
|
|
|
+ agent_num = db.Column(db.String(32), nullable=False, default='', comment='坐席工号')
|
|
|
+ out_id = db.Column(db.String(32), nullable=False, default='', comment='外部id')
|
|
|
+ identity_type = db.Column(db.SmallInteger, nullable=False, default=0, comment='身份标识')
|
|
|
+ check_state = db.Column(db.SmallInteger, nullable=False, default=1, comment='是否签入 0:是 1:否 默认未签入')
|
|
|
+ check_scene = db.Column(db.String(16), nullable=False, default='', comment='迁入场景')
|
|
|
+ check_in_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='签入时间')
|
|
|
+ check_out_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='签出时间')
|
|
|
+ service_state = db.Column(db.SmallInteger, nullable=False, default=0, comment='坐席服务状态 0: 未登录(签出) 1: 置忙 2: 置闲 3: 通话中 4: 后处理 5: 拨号中')
|
|
|
+ busy_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='置忙时间')
|
|
|
+ idle_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='置闲时间')
|
|
|
+ call_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='接通时间')
|
|
|
+ hang_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='挂断时间')
|
|
|
+ heart_state = db.Column(db.SmallInteger, nullable=False, default=0, comment='心跳状态 0: 默认 1:正常 2: 异常')
|
|
|
+ heart_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='正常心跳时间')
|
|
|
+ session_id = db.Column(db.String(64), nullable=False, default='', comment='sessionId')
|
|
|
+ is_delete = db.Column(db.SmallInteger, nullable=False, default=0, comment='删除标识')
|
|
|
+ update_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间')
|
|
|
+ create_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='创建时间')
|
|
|
+
|
|
|
+ __table_args__ = (
|
|
|
+ db.UniqueConstraint('saas_id', 'agent_num', name='uniq_saas_id_agent_num'),
|
|
|
+ db.Index('idx_saas_id_out_id', 'saas_id', 'out_id')
|
|
|
+ )
|
|
|
+
|
|
|
+ def __repr__(self):
|
|
|
+ return json.dumps(self.to_dict())
|
|
|
+
|
|
|
+ def to_dict(self):
|
|
|
+ return {
|
|
|
+ 'id': self.id,
|
|
|
+ 'saas_id': self.saas_id,
|
|
|
+ 'agent_num': self.agent_num,
|
|
|
+ 'out_id': self.out_id,
|
|
|
+ 'identity_type': self.identity_type,
|
|
|
+ 'check_state': self.check_state,
|
|
|
+ 'check_scene': self.check_scene,
|
|
|
+ 'check_in_time': self.check_in_time.isoformat() if self.check_in_time else None,
|
|
|
+ 'check_out_time': self.check_out_time.isoformat() if self.check_out_time else None,
|
|
|
+ 'service_state': self.service_state,
|
|
|
+ 'busy_time': self.busy_time.isoformat() if self.busy_time else None,
|
|
|
+ 'idle_time': self.idle_time.isoformat() if self.idle_time else None,
|
|
|
+ 'call_time': self.call_time.isoformat() if self.call_time else None,
|
|
|
+ 'hang_time': self.hang_time.isoformat() if self.hang_time else None,
|
|
|
+ 'heart_state': self.heart_state,
|
|
|
+ 'heart_time': self.heart_time.isoformat() if self.heart_time else None,
|
|
|
+ 'session_id': self.session_id,
|
|
|
+ 'is_delete': self.is_delete,
|
|
|
+ 'update_time': self.update_time.isoformat() if self.update_time else None,
|
|
|
+ 'create_time': self.create_time.isoformat() if self.create_time else None,
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+class Phone(db.Model):
|
|
|
+ __tablename__ = 'c_phone'
|
|
|
+ __table_args__ = {
|
|
|
+ 'comment': '分机信息表',
|
|
|
+ 'mysql_engine': 'InnoDB',
|
|
|
+ 'mysql_charset': 'utf8mb4'
|
|
|
+ }
|
|
|
+
|
|
|
+ id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键')
|
|
|
+ saas_id = db.Column(db.String(16), nullable=False, default='', comment='租户隔离')
|
|
|
+ phone_num = db.Column(db.String(32), nullable=False, default='0', comment='分机号')
|
|
|
+ phone_pwd = db.Column(db.String(32), nullable=False, default='', comment='分机密码')
|
|
|
+ sip_server = db.Column(db.String(64), nullable=False, default='', comment='SIP服务器')
|
|
|
+ wss_server = db.Column(db.String(64), nullable=False, default='', comment='WSS服务器')
|
|
|
+ ice_server = db.Column(db.String(64), nullable=False, default='', comment='ICE服务器')
|
|
|
+ is_delete = db.Column(db.SmallInteger, nullable=False, default=0, comment='删除标识')
|
|
|
+ update_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间')
|
|
|
+ create_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='创建时间')
|
|
|
+
|
|
|
+ __table_args__ = (
|
|
|
+ db.Index('idx_vcc_id_phone_num', 'saas_id', 'phone_num'),
|
|
|
+ )
|
|
|
+
|
|
|
+ def __repr__(self):
|
|
|
+ return json.dumps(self.to_dict())
|
|
|
+
|
|
|
+ def to_dict(self):
|
|
|
+ return {
|
|
|
+ 'id': self.id,
|
|
|
+ 'saas_id': self.saas_id,
|
|
|
+ 'phone_num': self.phone_num,
|
|
|
+ 'phone_pwd': self.phone_pwd,
|
|
|
+ 'sip_server': self.sip_server,
|
|
|
+ 'wss_server': self.wss_server,
|
|
|
+ 'ice_server': self.ice_server,
|
|
|
+ 'is_delete': self.is_delete,
|
|
|
+ 'update_time': self.update_time.isoformat() if self.update_time else None,
|
|
|
+ 'create_time': self.create_time.isoformat() if self.create_time else None,
|
|
|
+ }
|