from db.db_conn import db_conn from sqlalchemy import Column, Integer, String, DATETIME, DOUBLE, BOOLEAN, TEXT from utils.date_utils import DateUtils class LoginInfo(db_conn.Base): """登录信息表""" __tablename__ = 'du_js_t_login_info' id = Column(Integer, primary_key=True, autoincrement=True, doc="主键") user_name = Column(String(50), doc="登录账号") password = Column(String(255), doc="登录密码") cookie = Column(String(500), doc="cookies") cookie_timestamp = Column(DATETIME, doc="cookie时间戳") region = Column(String(255), doc="区域") class RequestTaskSetting(db_conn.Base): """爬取任务配置参数表""" __tablename__ = 'du_js_t_request_task_setting' id = Column(Integer, primary_key=True, autoincrement=True, doc="主键") user = Column(String(50), doc="用户名称") update_time = Column(DATETIME, doc="配置更新时间") region = Column(String(50), doc="区县") version = Column(String(10), doc="版本号") request_start_time = Column(DATETIME, doc="数据爬取开始时间") request_end_time = Column(DATETIME, doc="数据爬取结束时间") request_interval_seconds = Column(Integer, doc="在爬取任务开始结束时间内,爬取的频率") request_range_hour = Column(Integer, doc="一次数据爬取任务中,按总时长分段执行的每段时间长度") request_range_interval_seconds = Column(Integer, doc="一次数据爬取任务中,分段执行时的每段的间隔时间") request_fail_wait_seconds = Column(Integer, doc="爬取任务异常时再次尝试间隔") request_retry_times = Column(Integer, doc="爬取失败时再次尝试的总次数") request_cookie_valid_duration = Column(Integer, doc="cookie存储有效时长") statics_daily_time = Column(DATETIME, doc="") statics_monthly_time = Column(DATETIME, doc="") login_fail_wait_seconds = Column(Integer, doc="单次登陆失败重新尝试等待时间") login_retry_times = Column(Integer, doc="登陆失败连续尝试次数") task_retry_wait_seconds = Column(Integer, doc="整个爬取任务重新开始尝试等待时间") first_request_offset_days = Column(Integer, doc="程序首次执行, 站点数据最新时刻表为空时, 数据获取开始时间相对当日往前偏移的天数") class DustDataInfo(db_conn.Base): """监测数据表""" __tablename__ = 'ja_t_dust_site_data_info' id = Column(Integer, primary_key=True, autoincrement=True, doc="主键") mn_code = Column(String(255), doc="站点编号") dust_value = Column(DOUBLE, doc="扬尘监测值") noise_value = Column(DOUBLE, doc="噪声监测值") lst = Column(DATETIME, doc="监测时间") quality = Column(String(10), doc="监测质量") grade = Column(Integer, doc="监测质量") flag = Column(String(10), doc="状态标识") def __init__(self, json_obj) -> None: """ Args: json_obj: { "longitude": "121.32", "latitude": "30.840834", "Address": "西新泾黄汶泾", "DustValue": 0.207, "Grade": 1, "GroupID": 16, "GroupName": "金山区", "LST": "2023-10-16 12:00:00", "LST1": "1697457600", "Name": "大信.中信海直华东无人机总部基地项目——1号点", "MNCode": "SHXH0JS0100306", "NoiseValue": 59.4, "ProjectID": 45879, "Quality": "好", "SName": "上海小慧", "TypeName": "建筑工地", "flag": "N" } """ self.mn_code = json_obj.get('MNCode') self.dust_value = json_obj.get('DustValue') self.noise_value = json_obj.get('NoiseValue') self.lst = DateUtils.str_to_time(json_obj.get('LST')) self.quality = json_obj.get('Quality') self.grade = json_obj.get('Grade') self.flag = json_obj.get('flag') def json_to_cls(json_list) -> list: m = map(lambda x: DustDataInfo(x), json_list) return list(m) class SiteLatestTime(db_conn.Base): """站点数据最新时刻表""" __tablename__ = 'du_js_t_site_latest_time' mn_code = Column(String(50), primary_key=True, doc="站点编号") latest_time = Column(DATETIME, doc="最新时间") device_status = Column(Integer, doc="站点状态, 0代表上线;1代表停运;2代表下线") class DustSiteInfo(db_conn.Base): """站点基本信息表""" __tablename__ = 'ja_t_dust_site_info' id = Column(Integer, primary_key=True, autoincrement=True, doc="项目编号") mn_code = Column(String(50), doc="设备编号") address = Column(String(255), doc="安装地址") name = Column(String(255), doc="站点名称") code = Column(String(50), doc="") begin_date = Column(DATETIME, doc="") duty_company = Column(String(255), doc="") duty_company_id = Column(String(50), doc="") end_date = Column(DATETIME, doc="") engineering_stage = Column(String(50), doc="") group_id = Column(String(10), doc="") group_name = Column(String(50), doc="") is_online = Column(String(10), doc="") is_trouble = Column(String(10), doc="") jhpt_update_time = Column(String(50), doc="") kindex = Column(String(50), doc="") latitude = Column(String(50), doc="") linkman = Column(String(50), doc="") longitude = Column(String(50), doc="") phone = Column(String(50), doc="") province = Column(String(20), doc="") ring_id = Column(String(20), doc="") ring_name = Column(String(50), doc="") type_id = Column(String(20), doc="") typename = Column(String(50), doc="") stop_time = Column(DATETIME, doc="") active = Column(String(10), doc="") trouble_num = Column(Integer, doc="") insert_time = Column(DATETIME, doc="") stage_begin_date = Column(DATETIME, doc="") tsp = Column(DOUBLE, doc="") union_type_id = Column(String(20), doc="") wall_height = Column(String(20), doc="") ywsj_date = Column(DATETIME, doc="") build_area = Column(String(20), doc="") construction_unit = Column(String(255), doc="") control_level = Column(String(50), doc="") developers = Column(String(100), doc="") do_time = Column(DATETIME, doc="") has_monitor = Column(String(20), doc="") data_time = Column(DATETIME, doc="") engineering_stage_code = Column(String(50), doc="") equipment_code = Column(String(50), doc="") floor_area = Column(String(20), doc="") jhpt_delete = Column(String(10), doc="") noise_region = Column(String(255), doc="") responsible = Column(String(50), doc="") def __init__(self, json_obj) -> None: """ Args: json_obj: { "Active": 1, "Address": "上海市金山区亭林镇周栅村荡新7组1056号", "Code": "HMHB00087", "DustValue": 0.065, "DutyCompany": "上海泓旻环保科技有限公司", "DutyCompanyID": 25, "GroupID": 16, "GroupName": "金山区", "ID": 41024, "IsOnline": 1, "Name": "上海阜阜建材有限公司", "IsTrouble": 0, "LST": "2023-10-27 08:15:00", "RingName": "外环外", "MNCode": "HMHB0JS0300084", "TypeName": "码头", "TypeID": 3, "NoiseValue": "68.9", "RingID": 4 } """ self.update(json_obj) def update(self, json_obj): self.id = json_obj.get('ID') self.mn_code = json_obj.get('MNCode') self.address = json_obj.get('Address') self.name = json_obj.get('Name') self.code = json_obj.get('Code') self.begin_date = json_obj.get('BeginDate') self.duty_company = json_obj.get('DutyCompany') self.duty_company_id = json_obj.get('DutyCompanyID') self.end_date = json_obj.get('EndDate') self.engineering_stage = json_obj.get('EngineeringStage') self.group_id = json_obj.get('GroupID') self.group_name = json_obj.get('GroupName') self.is_online = json_obj.get('IsOnline') self.is_trouble = json_obj.get('IsTrouble') # self.jhpt_update_time = json_obj.get('') self.kindex = json_obj.get('KIndex') # self.latitude = json_obj.get('') self.linkman = json_obj.get('Linkman') # self.longitude = json_obj.get('') self.phone = json_obj.get('Phone') self.province = "上海市" self.ring_id = json_obj.get('RingID') self.ring_name = json_obj.get('RingName') self.type_id = json_obj.get('TypeID') self.typename = json_obj.get('TypeName') # self.stop_time = json_obj.get('') self.active = json_obj.get('Active') self.trouble_num = json_obj.get('TroubleNum') # self.insert_time = json_obj.get('') # self.stage_begin_date = json_obj.get('') # self.tsp = json_obj.get('') # self.union_type_id = json_obj.get('') # self.wall_height = json_obj.get('') # self.ywsj_date = json_obj.get('') # self.build_area = json_obj.get('') # self.construction_unit = json_obj.get('') # self.control_level = json_obj.get('') # self.developers = json_obj.get('') # self.do_time = json_obj.get('') # self.has_monitor = json_obj.get('') # self.data_time = json_obj.get('') # self.engineering_stage_code = json_obj.get('') # self.equipment_code = json_obj.get('') # self.floor_area = json_obj.get('') # self.jhpt_delete = json_obj.get('') # self.noise_region = json_obj.get('') # self.responsible = json_obj.get('') class RequestTask(db_conn.Base): """爬取数据任务表""" __tablename__ = 'du_js_t_request_task' id = Column(Integer, primary_key=True, autoincrement=True, doc="任务编号") start_time = Column(DATETIME, doc="") end_time = Column(DATETIME, doc="") running_status = Column(BOOLEAN, doc="") success = Column(BOOLEAN, doc="") def __init__(self, id, start_time) -> None: self.id = id self.start_time = start_time self.running_status = True self.success = False class RequestTaskLog(db_conn.Base): """爬取数据任务日志表""" __tablename__ = 'du_js_t_request_task_log' id = Column(Integer, primary_key=True, autoincrement=True, doc="日志编号") request_id = Column(Integer, doc="任务编号") create_time = Column(DATETIME, doc="") log_type = Column(String(20), doc="") log = Column(TEXT, doc="")