models.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. #!/usr/bin/python
  2. # -*- coding=utf-8 -*-
  3. # @Create Time: 2024-01-12 15:23:13
  4. # @Last Modified time: 2024-01-22 15:10:32
  5. from datetime import datetime
  6. import click
  7. from flask import current_app
  8. from flask.cli import with_appcontext
  9. from flask_sqlalchemy import SQLAlchemy
  10. db = SQLAlchemy()
  11. class Record(db.Model):
  12. # 原始记录表
  13. __tablename__ = 'recorder'
  14. # 表的结构:
  15. id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='记录id')
  16. Record_Time = db.Column(db.DateTime, nullable=False, doc='记录时间')
  17. Current_Url = db.Column(db.UnicodeText, nullable=False, doc='当前url')
  18. Full_Url = db.Column(db.UnicodeText, nullable=False, doc='')
  19. Sim_Url = db.Column(db.UnicodeText, nullable=True, doc='')
  20. User_Id = db.Column(db.String, nullable=False, doc='用户id')
  21. Device_Id = db.Column(db.String, nullable=True, doc='设备id')
  22. Request_Method = db.Column(db.String, nullable=False, doc='请求方法')
  23. Event_Type = db.Column(db.String, nullable=True, doc='事件类型')
  24. Form_Data = db.Column(db.UnicodeText, nullable=True, doc='表单数据')
  25. Json_Data = db.Column(db.UnicodeText, nullable=True, doc='')
  26. Value_Data = db.Column(db.UnicodeText, nullable=True, doc='')
  27. Status_Code = db.Column(db.String, nullable=True, doc='状态码')
  28. Target_Url = db.Column(db.UnicodeText, nullable=False, doc='请求地址')
  29. Iframe_Url = db.Column(db.UnicodeText, nullable=True, doc='内联url')
  30. Button_Text = db.Column(db.String, nullable=True, doc='按钮文字')
  31. def to_json(self):
  32. json_data = {
  33. 'record_time': self.Record_Time,
  34. 'current_url': self.Current_Url,
  35. 'full_url': self.Full_Url,
  36. 'user_id': self.User_Id,
  37. 'device_id': self.Device_Id,
  38. 'request_method': self.Request_Method,
  39. 'event_type': self.Event_Type,
  40. 'form_data': self.Form_Data,
  41. 'status_code': self.Status_Code,
  42. 'target_url': self.Target_Url,
  43. 'iframe_url': self.Iframe_Url,
  44. 'button_text': self.Button_Text
  45. }
  46. return json_data
  47. class Fragment(db.Model):
  48. # 临时表(屏一表三 | 屏一表四)
  49. __tablename__ = 'fragment'
  50. # 表的结构:
  51. id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='统计id')
  52. Time = db.Column(db.DateTime, nullable=False, doc='记录时间')
  53. User_Id = db.Column(db.String, nullable=False, doc='用户id')
  54. Method = db.Column(db.String, nullable=False, doc='请求方法')
  55. Has_Form = db.Column(db.Boolean, nullable=False, default=False, doc='是否有表单')
  56. Dom = db.Column(db.String, nullable=False, doc='访问域')
  57. Title1 = db.Column(db.String, nullable=False, doc='一级标题')
  58. Title2 = db.Column(db.String, nullable=False, doc='二级标题')
  59. Title3 = db.Column(db.String, nullable=False, doc='三级标题')
  60. Title4 = db.Column(db.String, nullable=True, doc='四级标题')
  61. Behavior = db.Column(db.String, nullable=False, doc='行为内容')
  62. Stay = db.Column(db.Integer, nullable=False, default=0, doc='持续时间')
  63. class TotalCount(db.Model):
  64. # 统计表(屏一表一 | 屏一表二)
  65. __tablename__ = 'totalcount'
  66. # 表的结构: 采集总量,偏离总量,登录人数,四域偏离量
  67. id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='统计id')
  68. Name = db.Column(db.String, nullable=False, unique=True, doc='统计名')
  69. Count = db.Column(db.Integer, nullable=False, default=0, doc='统计量')
  70. def __init__(self, name, count = 0):
  71. self.Name = name
  72. self.Count = count
  73. def to_json(self):
  74. json_data = {
  75. self.Name: self.Count
  76. }
  77. return json_data
  78. def add_one(self):
  79. self.Count += 1
  80. class PersonLogin(db.Model):
  81. # 用户登录统计表(屏二表二 | 屏一表五)
  82. __tablename__ = 'personlogin'
  83. # 表的结构: 用户在线时长
  84. id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='id')
  85. User_Id = db.Column(db.String, nullable=False, unique=True, doc='业务用户id')
  86. Online_Duration = db.Column(db.Integer, nullable=False, default=0, doc='在线时长')
  87. ZC_Visit = db.Column(db.Boolean, nullable=False, default=False, doc='是否访问资产域')
  88. CW_Visit = db.Column(db.Boolean, nullable=False, default=False, doc='是否访问财务域')
  89. RZ_Visit = db.Column(db.Boolean, nullable=False, default=False, doc='是否访问人资域')
  90. YX_Visit = db.Column(db.Boolean, nullable=False, default=False, doc='是否访问财务域')
  91. def __init__(self, user_id):
  92. self.User_Id = user_id
  93. def visit_zc(self):
  94. self.ZC_Visit = True
  95. def visit_cw(self):
  96. self.CW_Visit = True
  97. def visit_rz(self):
  98. self.RZ_Visit = True
  99. def visit_yx(self):
  100. self.YX_Visit = True
  101. def to_json(self):
  102. json_data = {
  103. "User_Id": self.User_Id ,
  104. "Online_Duration": self.Online_Duration,
  105. "ZC_Visit": self.ZC_Visit ,
  106. "CW_Visit": self.CW_Visit ,
  107. "RZ_Visit": self.RZ_Visit ,
  108. "YX_Visit": self.YX_Visit
  109. }
  110. return json_data
  111. class Business(db.Model):
  112. # 业务操作统计表(屏二表一 | 屏二表三)
  113. __tablename__ = 'business'
  114. # 表的结构: 用户操作数量,业务数量,业务时长,业务偏离统计量
  115. id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='行为id')
  116. User_Id = db.Column(db.String, unique=True, nullable=False, doc='业务用户id')
  117. Be_Num = db.Column(db.Integer, nullable=False, doc='操作统计量')
  118. Bu_Num = db.Column(db.Integer, nullable=False, doc='业务统计量')
  119. Time = db.Column(db.DateTime, nullable=False, doc='业务时间')
  120. Bias_Num = db.Column(db.Integer, nullable=False, doc='业务偏离统计量')
  121. class TotalVisit(db.Model):
  122. # 域访问量统计表
  123. __tablename__ = 'totalvisit'
  124. # 表的结构:
  125. id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='域id')
  126. Name = db.Column(db.String, unique=True, nullable=False, doc='域名')
  127. Count = db.Column(db.Integer, nullable=False, doc='访问量')
  128. class TotalBusiness(db.Model):
  129. # 业务统计表
  130. __tablename__ = 'totalbusiness'
  131. # 表的结构:
  132. id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='业务id')
  133. Name = db.Column(db.String, nullable=False, doc='业务名称')
  134. Count = db.Column(db.Integer, nullable=False, doc='访问量')
  135. class PersonTotalVisit(db.Model):
  136. # 个人域访问量统计表
  137. __tablename__ = 'persontotalvisit'
  138. # 表的结构:
  139. id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='域id')
  140. User_Id = db.Column(db.String, nullable=False, doc='用户id')
  141. Name = db.Column(db.String, nullable=False, doc='域名')
  142. Count = db.Column(db.Integer, nullable=False, doc='访问量')
  143. class PersonPortrayal(db.Model):
  144. # 用户画像表(屏三表四)
  145. __tablename__ = 'personportrayal'
  146. # 表的结构:
  147. id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='画像id')
  148. User_Id = db.Column(db.String, nullable=False, doc='用户id')
  149. Attr1 = db.Column(db.String, nullable=False, doc='用户属性1')
  150. Attr2 = db.Column(db.String, nullable=False, doc='用户属性2')
  151. Attr3 = db.Column(db.String, nullable=False, doc='用户属性3')
  152. Attr4 = db.Column(db.String, nullable=False, doc='用户属性4')
  153. Attr5 = db.Column(db.String, nullable=False, doc='用户属性5')
  154. Attr6 = db.Column(db.String, nullable=False, doc='用户属性6')
  155. Attr7 = db.Column(db.String, nullable=False, doc='用户属性7')
  156. Attr8 = db.Column(db.String, nullable=False, doc='用户属性8')
  157. class PersonDeparture(db.Model):
  158. # 个人行为偏离统计
  159. __tablename__ = 'persondeparture'
  160. # 表的结构:
  161. id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='统计id')
  162. User_Id = db.Column(db.String, nullable=False, doc='用户id')
  163. Count = db.Column(db.Integer, nullable=False, doc='偏离量')
  164. class PersonBehavior(db.Model):
  165. # 个人行为表
  166. __tablename__ = 'personbehavior'
  167. # 表的结构:
  168. id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='行为id')
  169. User_Id = db.Column(db.String, nullable=False, unique=True, doc='行为用户id')
  170. Time = db.Column(db.DateTime, nullable=False, doc='行为时间')
  171. BGroup = db.Column(db.String, doc='行为组')
  172. @click.command('init-db')
  173. @with_appcontext
  174. def init_db_command():
  175. db.create_all()
  176. tc1 = TotalCount(name='采集量')
  177. tc2 = TotalCount(name='发现行为偏离')
  178. tc3 = TotalCount(name='资产域行为偏离')
  179. tc4 = TotalCount(name='财务域行为偏离')
  180. tc5 = TotalCount(name='人资域行为偏离')
  181. tc6 = TotalCount(name='营销管理行为偏离')
  182. db.session.add_all([tc1,tc2,tc3,tc4,tc5,tc6])
  183. db.session.commit()
  184. @click.command('drop-db')
  185. @with_appcontext
  186. def drop_db_command():
  187. db.drop_all()
  188. def init_app(app):
  189. app.cli.add_command(init_db_command)
  190. app.cli.add_command(drop_db_command)