dao.py 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454
  1. #!/usr/bin/env python3
  2. # encoding:utf-8
  3. import json
  4. from . import db
  5. from datetime import datetime
  6. class Agent(db.Model):
  7. __tablename__ = 'sys_user'
  8. __table_args__ = {
  9. 'comment': '坐席信息表',
  10. 'mysql_engine': 'InnoDB',
  11. 'mysql_charset': 'utf8mb4'
  12. }
  13. id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键')
  14. saas_id = db.Column(db.String(16), nullable=False, default='', comment='租户隔离')
  15. agent_num = db.Column(db.String(32), nullable=False, default='', comment='坐席工号')
  16. agent_name = db.Column(db.String(32), nullable=False, default='', comment='坐席姓名')
  17. out_id = db.Column(db.String(32), nullable=False, default='', comment='外部id')
  18. agent_pwd = db.Column(db.String(64), nullable=False, default='', comment='坐席密码')
  19. agent_type = db.Column(db.SmallInteger, nullable=False, default=0, comment='坐席类型 0:普通坐席; 1:组长; 2:主管')
  20. phone_num = db.Column(db.String(32), nullable=False, default='0', comment='分机号')
  21. distribute = db.Column(db.SmallInteger, nullable=False, default=1, comment='分配标志 0:不参与排队; 1:参与排队')
  22. agent_state = db.Column(db.SmallInteger, nullable=False, default=0, comment='账号状态 0:可用; 1:禁用')
  23. identity_type = db.Column(db.SmallInteger, nullable=False, default=0, comment='身份标识')
  24. is_delete = db.Column(db.SmallInteger, nullable=False, default=0, comment='删除标识')
  25. update_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间')
  26. create_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='创建时间')
  27. __table_args__ = (
  28. db.UniqueConstraint('saas_id', 'agent_num', name='uniq_vcc_id_agent_num'),
  29. db.Index('idx_saas_id_out_id', 'saas_id', 'out_id'),
  30. db.Index('idx_saas_id_phone_num', 'saas_id', 'phone_num')
  31. )
  32. def __repr__(self):
  33. return json.dumps(self.to_dict())
  34. def to_dict(self):
  35. return {
  36. 'id': self.id,
  37. 'saas_id': self.saas_id,
  38. 'agent_num': self.agent_num,
  39. 'agent_name': self.agent_name,
  40. 'out_id': self.out_id,
  41. 'agent_pwd': self.agent_pwd,
  42. 'agent_type': self.agent_type,
  43. 'phone_num': self.phone_num,
  44. 'distribute': self.distribute,
  45. 'agent_state': self.agent_state,
  46. 'identity_type': self.identity_type,
  47. 'is_delete': self.is_delete,
  48. 'update_time': self.update_time.isoformat() if self.update_time else None,
  49. 'create_time': self.create_time.isoformat() if self.create_time else None,
  50. }
  51. class AgentActionLog(db.Model):
  52. __tablename__ = 'c_agent_action_log'
  53. __table_args__ = {
  54. 'comment': '坐席行为日志表',
  55. 'mysql_engine': 'InnoDB',
  56. 'mysql_charset': 'utf8mb4'
  57. }
  58. id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键')
  59. saas_id = db.Column(db.String(16), nullable=False, default='', comment='租户隔离')
  60. agent_num = db.Column(db.String(32), nullable=False, default='', comment='坐席工号')
  61. out_id = db.Column(db.String(32), nullable=False, default='', comment='外部id')
  62. action_type = db.Column(db.SmallInteger, nullable=False, default=0, comment='行为类型')
  63. check_state = db.Column(db.SmallInteger, nullable=False, default=-1, comment='签入或签出')
  64. pre_check_state = db.Column(db.SmallInteger, nullable=False, default=-1, comment='上一次签入或签出')
  65. service_state = db.Column(db.SmallInteger, nullable=False, default=-1, comment='坐席状态')
  66. pre_service_state = db.Column(db.SmallInteger, nullable=False, default=-1, comment='上一次坐席状态')
  67. check_state_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime(2000, 1, 1), comment='签入或签出时间')
  68. pre_check_state_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime(2000, 1, 1), comment='上一次签入或签出时间')
  69. service_state_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime(2000, 1, 1), comment='坐席状态变更时间')
  70. pre_service_state_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime(2000, 1, 1), comment='上一次坐席状态变更时间')
  71. check_state_duration = db.Column(db.BigInteger, nullable=False, default=0, comment='行为持续时间')
  72. service_state_duration = db.Column(db.BigInteger, nullable=False, default=0, comment='状态持续时间')
  73. task_id = db.Column(db.String(32), nullable=False, default='', comment='任务Id')
  74. service_id = db.Column(db.String(32), nullable=False, default='', comment='人工组id')
  75. event_type = db.Column(db.Integer, nullable=False, default=0, comment='日志事件类型')
  76. event_desc = db.Column(db.String(100), nullable=False, default='', comment='日志事件描述')
  77. is_delete = db.Column(db.SmallInteger, nullable=False, default=0, comment='删除标识')
  78. update_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间')
  79. create_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='创建时间')
  80. __table_args__ = (
  81. db.Index('idx_create_time', 'create_time'),
  82. db.Index('idx_saas_id_agent_num', 'saas_id', 'agent_num'),
  83. db.Index('idx_saas_id_out_id', 'saas_id', 'out_id'),
  84. db.Index('idx_saas_id_task_id', 'saas_id', 'task_id'),
  85. db.Index('idx_update_time', 'update_time'),
  86. )
  87. def __repr__(self):
  88. return json.dumps(self.to_dict())
  89. def to_dict(self):
  90. return {
  91. 'id': self.id,
  92. 'saas_id': self.saas_id,
  93. 'agent_num': self.agent_num,
  94. 'out_id': self.out_id,
  95. 'action_type': self.action_type,
  96. 'check_state': self.check_state,
  97. 'pre_check_state': self.pre_check_state,
  98. 'service_state': self.service_state,
  99. 'pre_service_state': self.pre_service_state,
  100. 'check_state_time': self.check_state_time.isoformat() if self.check_state_time else None,
  101. 'pre_check_state_time': self.pre_check_state_time.isoformat() if self.pre_check_state_time else None,
  102. 'service_state_time': self.service_state_time.isoformat() if self.service_state_time else None,
  103. 'pre_service_state_time': self.pre_service_state_time.isoformat() if self.pre_service_state_time else None,
  104. 'check_state_duration': self.check_state_duration,
  105. 'service_state_duration': self.service_state_duration,
  106. 'task_id': self.task_id,
  107. 'service_id': self.service_id,
  108. 'event_type': self.event_type,
  109. 'event_desc': self.event_desc,
  110. 'is_delete': self.is_delete,
  111. 'update_time': self.update_time.isoformat() if self.update_time else None,
  112. 'create_time': self.create_time.isoformat() if self.create_time else None,
  113. }
  114. class AgentLog(db.Model):
  115. __tablename__ = 'c_agent_log'
  116. __table_args__ = {
  117. 'comment': '坐席日志表',
  118. 'mysql_engine': 'InnoDB',
  119. 'mysql_charset': 'utf8mb4'
  120. }
  121. id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键')
  122. saas_id = db.Column(db.String(16), nullable=False, default='', comment='租户隔离')
  123. flow_id = db.Column(db.String(64), nullable=False, default='', comment='人工外呼流程ID')
  124. agent_num = db.Column(db.String(32), nullable=False, default='', comment='坐席工号')
  125. out_id = db.Column(db.String(32), nullable=False, default='', comment='外部id')
  126. event_type = db.Column(db.SmallInteger, nullable=False, default=0, comment='事件类型')
  127. event = db.Column(db.String(32), nullable=False, default='0', comment='事件')
  128. content = db.Column(db.String(64), nullable=False, default='', comment='描述')
  129. is_delete = db.Column(db.SmallInteger, nullable=False, default=0, comment='删除标识')
  130. update_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间')
  131. create_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='创建时间')
  132. __table_args__ = (
  133. db.Index('idx_saas_id_agent_num', 'saas_id', 'agent_num'),
  134. db.Index('idx_saas_id_out_id', 'saas_id', 'out_id')
  135. )
  136. def __repr__(self):
  137. return json.dumps(self.to_dict())
  138. def to_dict(self):
  139. return {
  140. 'id': self.id,
  141. 'saas_id': self.saas_id,
  142. 'flow_id': self.flow_id,
  143. 'agent_num': self.agent_num,
  144. 'out_id': self.out_id,
  145. 'event_type': self.event_type,
  146. 'event': self.event,
  147. 'content': self.content,
  148. 'is_delete': self.is_delete,
  149. 'update_time': self.update_time.isoformat() if self.update_time else None,
  150. 'create_time': self.create_time.isoformat() if self.create_time else None,
  151. }
  152. class AgentMonitor(db.Model):
  153. __tablename__ = 'c_agent_monitor'
  154. __table_args__ = {
  155. 'comment': '坐席监控表',
  156. 'mysql_engine': 'InnoDB',
  157. 'mysql_charset': 'utf8mb4'
  158. }
  159. id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键')
  160. saas_id = db.Column(db.String(16), nullable=False, default='', comment='租户隔离')
  161. agent_num = db.Column(db.String(32), nullable=False, default='', comment='坐席工号')
  162. out_id = db.Column(db.String(32), nullable=False, default='', comment='外部id')
  163. identity_type = db.Column(db.SmallInteger, nullable=False, default=0, comment='身份标识')
  164. check_state = db.Column(db.SmallInteger, nullable=False, default=1, comment='是否签入 0:是 1:否 默认未签入')
  165. check_scene = db.Column(db.String(16), nullable=False, default='', comment='迁入场景')
  166. check_in_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='签入时间')
  167. check_out_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='签出时间')
  168. service_state = db.Column(db.SmallInteger, nullable=False, default=0, comment='坐席服务状态 0: 未登录(签出) 1: 置忙 2: 置闲 3: 通话中 4: 后处理 5: 拨号中')
  169. busy_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='置忙时间')
  170. idle_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='置闲时间')
  171. call_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='接通时间')
  172. hang_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='挂断时间')
  173. heart_state = db.Column(db.SmallInteger, nullable=False, default=0, comment='心跳状态 0: 默认 1:正常 2: 异常')
  174. heart_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='正常心跳时间')
  175. session_id = db.Column(db.String(64), nullable=False, default='', comment='sessionId')
  176. is_delete = db.Column(db.SmallInteger, nullable=False, default=0, comment='删除标识')
  177. update_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间')
  178. create_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='创建时间')
  179. __table_args__ = (
  180. db.UniqueConstraint('saas_id', 'agent_num', name='uniq_saas_id_agent_num'),
  181. db.Index('idx_saas_id_out_id', 'saas_id', 'out_id')
  182. )
  183. def __repr__(self):
  184. return json.dumps(self.to_dict())
  185. def to_dict(self):
  186. return {
  187. 'id': self.id,
  188. 'saas_id': self.saas_id,
  189. 'agent_num': self.agent_num,
  190. 'out_id': self.out_id,
  191. 'identity_type': self.identity_type,
  192. 'check_state': self.check_state,
  193. 'check_scene': self.check_scene,
  194. 'check_in_time': self.check_in_time.isoformat() if self.check_in_time else None,
  195. 'check_out_time': self.check_out_time.isoformat() if self.check_out_time else None,
  196. 'service_state': self.service_state,
  197. 'busy_time': self.busy_time.isoformat() if self.busy_time else None,
  198. 'idle_time': self.idle_time.isoformat() if self.idle_time else None,
  199. 'call_time': self.call_time.isoformat() if self.call_time else None,
  200. 'hang_time': self.hang_time.isoformat() if self.hang_time else None,
  201. 'heart_state': self.heart_state,
  202. 'heart_time': self.heart_time.isoformat() if self.heart_time else None,
  203. 'session_id': self.session_id,
  204. 'is_delete': self.is_delete,
  205. 'update_time': self.update_time.isoformat() if self.update_time else None,
  206. 'create_time': self.create_time.isoformat() if self.create_time else None,
  207. }
  208. class Phone(db.Model):
  209. __tablename__ = 'c_phone'
  210. __table_args__ = {
  211. 'comment': '分机信息表',
  212. 'mysql_engine': 'InnoDB',
  213. 'mysql_charset': 'utf8mb4'
  214. }
  215. id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键')
  216. saas_id = db.Column(db.String(16), nullable=False, default='', comment='租户隔离')
  217. phone_num = db.Column(db.String(32), nullable=False, default='0', comment='分机号')
  218. phone_pwd = db.Column(db.String(32), nullable=False, default='', comment='分机密码')
  219. sip_server = db.Column(db.String(64), nullable=False, default='', comment='SIP服务器')
  220. wss_server = db.Column(db.String(64), nullable=False, default='', comment='WSS服务器')
  221. ice_server = db.Column(db.String(64), nullable=False, default='', comment='ICE服务器')
  222. is_delete = db.Column(db.SmallInteger, nullable=False, default=0, comment='删除标识')
  223. update_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间')
  224. create_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='创建时间')
  225. __table_args__ = (
  226. db.Index('idx_vcc_id_phone_num', 'saas_id', 'phone_num'),
  227. )
  228. def __repr__(self):
  229. return json.dumps(self.to_dict())
  230. def to_dict(self):
  231. return {
  232. 'id': self.id,
  233. 'saas_id': self.saas_id,
  234. 'phone_num': self.phone_num,
  235. 'phone_pwd': self.phone_pwd,
  236. 'sip_server': self.sip_server,
  237. 'wss_server': self.wss_server,
  238. 'ice_server': self.ice_server,
  239. 'is_delete': self.is_delete,
  240. 'update_time': self.update_time.isoformat() if self.update_time else None,
  241. 'create_time': self.create_time.isoformat() if self.create_time else None,
  242. }
  243. class HumanService(db.Model):
  244. __tablename__ = 'c_human_service'
  245. __table_args__ = {'comment': '人工服务组信息'}
  246. id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键')
  247. saas_id = db.Column(db.String(16), nullable=False, default='', comment='租户隔离')
  248. service_id = db.Column(db.String(32), nullable=False, default='', comment='人工组编号')
  249. service_name = db.Column(db.String(32), nullable=False, default='', comment='人工组名称')
  250. schedule_key = db.Column(db.String(32), nullable=False, default='', comment='日程编号')
  251. effective = db.Column(db.String(32), nullable=False, default='0', comment='状态 0:启用(可以或正在进行外呼)1:暂停')
  252. service_start = db.Column(db.String(32), nullable=False, default='', comment='任务开始时间 yyyyMMddHHmmss')
  253. service_end = db.Column(db.String(32), nullable=False, default='22200101000000', comment='任务结束时间 yyyyMMddHHmmss')
  254. distribute = db.Column(db.String(32), nullable=False, default='3', comment='分配策略')
  255. call_in_limit = db.Column(db.String(32), nullable=False, default='0', comment='呼入线数 限制 固定值0')
  256. record_type = db.Column(db.String(32), nullable=False, default='1', comment='录音方式 默认0 0:服务器不录 1:服务器录 4:按间隔抽样录 5:按百分比抽样录 固定值 1')
  257. queue_length = db.Column(db.String(32), nullable=False, default='100', comment='排队长度 固定值 100')
  258. queue_warning = db.Column(db.String(32), nullable=False, default='100', comment='排队告警 长度 固定值 100')
  259. queue_timeout = db.Column(db.String(32), nullable=False, default='60', comment='排队超时 时间 固定值 60')
  260. sum_queue_time = db.Column(db.String(32), nullable=False, default='90', comment='所有排队 时间 单位:秒;默认300: 固定值 90')
  261. connect_type = db.Column(db.String(32), nullable=False, default='0', comment='连接坐席 类型 默认0 0盲转连接 1桥接连接并超时重排 固定值 0')
  262. queue_music = db.Column(db.String(32), nullable=False, default='', comment='排队音 全局配置')
  263. direct_queue_type = db.Column(db.String(32), nullable=False, default='', comment='直接连接 媒体类型 默认1 接入码直接转人工服务能听到排队音 0:直接排队不连接媒体; 1:直接排队连接媒体 全局配置')
  264. is_delete = db.Column(db.Boolean, nullable=False, default=False, comment='删除标识')
  265. update_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间')
  266. create_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='创建时间')
  267. # Indexes
  268. __table_args__ = (
  269. db.Index('idx_create_time', 'create_time'),
  270. db.Index('idx_update_time', 'update_time'),
  271. db.Index('idx_saas_id_service_id', 'saas_id', 'service_id'),
  272. )
  273. def to_dict(self):
  274. return {
  275. 'id': self.id,
  276. 'saas_id': self.saas_id,
  277. 'service_id': self.service_id,
  278. 'service_name': self.service_name,
  279. 'schedule_key': self.schedule_key,
  280. 'effective': self.effective,
  281. 'service_start': self.service_start,
  282. 'service_end': self.service_end,
  283. 'distribute': self.distribute,
  284. 'call_in_limit': self.call_in_limit,
  285. 'record_type': self.record_type,
  286. 'queue_length': self.queue_length,
  287. 'queue_warning': self.queue_warning,
  288. 'queue_timeout': self.queue_timeout,
  289. 'sum_queue_time': self.sum_queue_time,
  290. 'connect_type': self.connect_type,
  291. 'queue_music': self.queue_music,
  292. 'direct_queue_type': self.direct_queue_type,
  293. 'is_delete': self.is_delete,
  294. 'update_time': self.update_time.isoformat() if self.update_time else None,
  295. 'create_time': self.create_time.isoformat() if self.create_time else None,
  296. }
  297. class HumanServiceMap(db.Model):
  298. __tablename__ = 'c_human_service_map'
  299. __table_args__ = {'comment': '人工服务组与坐席关系'}
  300. id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键')
  301. saas_id = db.Column(db.String(16), nullable=False, default='', comment='租户隔离')
  302. service_id = db.Column(db.String(32), nullable=False, default='', comment='人工组编号')
  303. service_type = db.Column(db.String(32), nullable=False, default='0', comment='服务类型')
  304. agent_id = db.Column(db.String(32), nullable=False, default='', comment='坐席工号')
  305. state = db.Column(db.Boolean, nullable=False, default=0, comment='状态 1激活(签入)')
  306. is_delete = db.Column(db.Boolean, nullable=False, default=0, comment='删除标识')
  307. update_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间')
  308. create_time = db.Column(db.TIMESTAMP, nullable=False, default=datetime.utcnow, comment='创建时间')
  309. # Indexes
  310. __table_args__ = (
  311. db.Index('idx_create_time', 'create_time'),
  312. db.Index('idx_update_time', 'update_time'),
  313. db.Index('idx_saas_id_service_id_agent_id', 'saas_id', 'service_id', 'agent_id'),
  314. )
  315. def to_dict(self):
  316. return {
  317. 'id': self.id,
  318. 'saas_id': self.vcc_id,
  319. 'service_id': self.service_id,
  320. 'service_type': self.service_type,
  321. 'agent_id': self.agent_id,
  322. 'state': self.state,
  323. 'is_delete': self.is_delete,
  324. 'update_time': self.update_time.isoformat() if self.update_time else None,
  325. 'create_time': self.create_time.isoformat() if self.create_time else None,
  326. }
  327. class Whitelist(db.Model):
  328. __tablename__ = 't_whitelist'
  329. __table_args__ = {'comment': '白名单配置表'}
  330. id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键')
  331. phone = db.Column(db.String(20), nullable=False, comment='电话号码')
  332. description = db.Column(db.String(255), nullable=True, comment='描述说明(备注)')
  333. del_flag = db.Column(db.Boolean, nullable=False, default=False, comment='删除标志(0代表存在 2代表删除)')
  334. revision = db.Column(db.Integer, nullable=True, comment='乐观锁')
  335. create_by = db.Column(db.String(32), nullable=True, comment='创建人')
  336. create_time = db.Column(db.DateTime, nullable=True, default=datetime.utcnow, comment='创建时间')
  337. update_by = db.Column(db.String(32), nullable=True, comment='更新人')
  338. update_time = db.Column(db.DateTime, nullable=True, onupdate=datetime.utcnow, comment='更新时间')
  339. remark = db.Column(db.String(500), nullable=True, comment='备注')
  340. def to_dict(self):
  341. return {
  342. 'id': self.id,
  343. 'phone': self.phone,
  344. 'description': self.description,
  345. 'del_flag': self.del_flag,
  346. 'revision': self.revision,
  347. 'create_by': self.create_by,
  348. 'create_time': self.create_time.isoformat() if self.create_time else None,
  349. 'update_by': self.update_by,
  350. 'update_time': self.update_time.isoformat() if self.update_time else None,
  351. 'remark': self.remark,
  352. }
  353. class CallRecord(db.Model):
  354. __tablename__ = 't_call_record'
  355. __table_args__ = {'comment': '通话记录表'}
  356. id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键')
  357. session_id = db.Column(db.String(30), nullable=True, comment='sessionId')
  358. type = db.Column(db.SmallInteger, nullable=True, comment='呼入分类(0白名单 1AI服务 2传统服务)')
  359. user_id = db.Column(db.BigInteger, nullable=True, comment='客服ID')
  360. user_name = db.Column(db.String(255), nullable=True, comment='客服名字')
  361. service_category = db.Column(db.SmallInteger, nullable=False, comment='服务类型(0人工坐席 1机器人坐席 2机器人转人工)')
  362. time_begin = db.Column(db.DateTime, nullable=True, comment='通话发起时间')
  363. time_end = db.Column(db.DateTime, nullable=True, comment='通话结束时间')
  364. times = db.Column(db.String(30), nullable=True, comment='通话时长(暂时按字符串接收)')
  365. category = db.Column(db.SmallInteger, nullable=True, comment='通话类型(0呼入 1呼出)')
  366. status = db.Column(db.SmallInteger, nullable=True, comment='通话状态(0未接听 1已接通)')
  367. phone = db.Column(db.String(20), nullable=True, comment='电话号码')
  368. bussiness_type = db.Column(db.String(50), nullable=True, comment='业务类型(创个返回字符串)')
  369. url = db.Column(db.String(255), nullable=True, comment='录音的地址')
  370. remark = db.Column(db.String(500), nullable=True, comment='备注')
  371. has_parsed = db.Column(db.Boolean, nullable=False, default=False, comment='是否已转录音(0否 1是)')
  372. parsed_voice_content = db.Column(db.Text, nullable=True, comment='通话录音内容')
  373. del_flag = db.Column(db.Boolean, nullable=False, default=False, comment='删除标志(0代表存在 2代表删除)')
  374. revision = db.Column(db.Integer, nullable=True, comment='乐观锁')
  375. create_by = db.Column(db.String(32), nullable=True, default="admin", comment='创建人')
  376. create_time = db.Column(db.DateTime, nullable=True, default=datetime.utcnow, comment='创建时间')
  377. update_by = db.Column(db.String(32), nullable=True, default="admin", comment='更新人')
  378. update_time = db.Column(db.DateTime, nullable=True, onupdate=datetime.utcnow, comment='更新时间')
  379. def to_dict(self):
  380. return {
  381. 'id': self.id,
  382. 'session_id': self.session_id,
  383. 'type': self.type,
  384. 'user_id': self.user_id,
  385. 'user_name': self.user_name,
  386. 'service_category': self.service_category,
  387. 'time_begin': self.time_begin.isoformat() if self.time_begin else None,
  388. 'time_end': self.time_end.isoformat() if self.time_end else None,
  389. 'times': self.times,
  390. 'category': self.category,
  391. 'status': self.status,
  392. 'phone': self.phone,
  393. 'bussiness_type': self.bussiness_type,
  394. 'url': self.url,
  395. 'remark': self.remark,
  396. 'has_parsed': self.has_parsed,
  397. 'parsed_voice_content': self.parsed_voice_content,
  398. 'del_flag': self.del_flag,
  399. 'revision': self.revision,
  400. 'create_by': self.create_by,
  401. 'create_time': self.create_time.isoformat() if self.create_time else None,
  402. 'update_by': self.update_by,
  403. 'update_time': self.update_time.isoformat() if self.update_time else None,
  404. }