| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- from logger import logger
- from databases import DeviceConfig, PhotoRecord, SqlQuery
- from sqlalchemy.orm import sessionmaker, scoped_session
- import settings
- from .online_request.module_online_data import OnlineDataRequest, GetOnlineDataHLM
- import time
- from datetime import datetime, timedelta
- from sqlalchemy.sql import func
- from sqlalchemy.orm import aliased
- import copy
- import threading
- class DataBaseModel():
- # 基础数据基类
- # signal_data = Signal(dict)
- # add_data_to_online_sign = Signal(dict)
- def __init__(self):
- # super().__init__(parent=None)
- self.logger = logger
- # 创建一个实例化的会话对象 session;该会话会自己处理上下文,线程结束时会自动关闭会话;适合多线程处理
- self.session = SqlQuery()
- if settings.PROJECT == "红蜻蜓":
- self.get_online_data = OnlineDataRequest()
- elif settings.PROJECT == "惠利玛":
- self.get_online_data = GetOnlineDataHLM()
- # self.add_data_to_online_sign.connect(self.send_record_to_online)
- # 新增数据的记录发送到云端
- def send_record_to_online(self, data):
- # _data = {"goods_art_no":goods_art_no,
- # "image_index": image_index,
- # "photo_create_time": photo_create_time,
- # "image_deal_mode": image_deal_mode,
- # "take_photo_created_at": date_time.strftime('%Y-%m-%d %H:%M:%S'),
- # }
- data["photo_create_time"] = "{}".format(data["photo_create_time"])
- data["take_photo_created_at"] = "{}".format(data["take_photo_created_at"])
- self.get_online_data.add_auto_photo_logs(data)
- pass
- def send_info(self, _type="", mode="", data=None):
- self.signal_data.emit({"_type": _type, "plugins_mode": mode, "data": data})
- def send_log(self, text, is_debug=False):
- if is_debug:
- self.logger.debug(text)
- else:
- self.logger.info(text)
- def insert_data_to_phone_record(self, data: dict):
- # 异步提交数据到后台
- photo_create_time = data["photo_create_time"]
- try:
- photo_create_time = time.strptime(photo_create_time, "%Y-%m-%d %H:%M:%S")
- except:
- photo_create_time = time.strptime(photo_create_time, "%Y:%m:%d %H:%M:%S")
- photo_create_time = time.mktime(photo_create_time)
- photo_create_time = datetime.fromtimestamp(photo_create_time)
- image_deal_mode = data["image_deal_mode"] if "image_deal_mode" in data else 0
- image_index = data["image_index"] if "image_index" in data else 0
- goods_art_no = data["goods_art_no"]
- d_1 = PhotoRecord(
- goods_art_no=goods_art_no,
- image_index=image_index,
- photo_create_time=photo_create_time,
- image_deal_mode=image_deal_mode,
- )
- self.session.add(d_1)
- self.session.commit()
- date_time = datetime.fromtimestamp(time.time())
- _data = {"goods_art_no": goods_art_no,
- "image_index": image_index,
- "photo_create_time": photo_create_time,
- "image_deal_mode": image_deal_mode,
- "take_photo_created_at": date_time.strftime('%Y-%m-%d %H:%M:%S'),
- }
- # self.add_data_to_online_sign.emit(_data)
- def get_goods_art_no(self, date_time_original):
- time_array = time.strptime(date_time_original, "%Y:%m:%d %H:%M:%S")
- time_array = time.mktime(time_array)
- datetime_obj = datetime.fromtimestamp(time_array)
- result = (
- self.session.query(PhotoRecord)
- .filter(PhotoRecord.photo_create_time == datetime_obj)
- .order_by(PhotoRecord.id.desc())
- .scalar()
- )
- if result:
- return result.goods_art_no, result.image_index, result.image_deal_mode
- else:
- return None
- def get_data_from_hqt_with_goods_art_no(self, goods_art_no_list):
- _goods_art_no_list = copy.deepcopy(goods_art_no_list)
- _list = []
- # 单次请求数少于20个
- goods_art_no_dict = {}
- while _goods_art_no_list:
- goods_art_no = _goods_art_no_list.pop()
- _list.append(goods_art_no)
- if len(_list) == 20 or len(_goods_art_no_list) == 0:
- online_goods_art_data = self.get_online_data.get_goods_art_no_info(
- goods_art_list=_list
- )
- if online_goods_art_data:
- for _goods_art_no in online_goods_art_data:
- goods_art_no_dict[_goods_art_no] = online_goods_art_data[
- _goods_art_no
- ]
- _list = []
- return goods_art_no_dict
- def get_data_from_hqt(self, goods_number_list):
- _goods_number_list = copy.deepcopy(goods_number_list)
- _list = []
- # 单次请求数少于20个
- goods_number_dict = {}
- while _goods_number_list:
- goods_art_no = _goods_number_list.pop()
- if "NUM" in goods_art_no:
- goods_art_no = goods_art_no.replace("NUM", "")
- _list.append(goods_art_no)
- if len(_list) == 20 or len(_goods_number_list) == 0:
- online_goods_art_data = self.get_online_data.get_goods_art_no_info(
- numbers_list=_list
- )
- if online_goods_art_data:
- for number in online_goods_art_data:
- goods_number_dict["NUM" + number] = online_goods_art_data[
- number
- ]
- _list = []
- return goods_number_dict
- ##=====设备配置处理=======
- def device_config_delete(self, config_id):
- d_c_1 = self.session.query(DeviceConfig).get(config_id)
- self.session.delete(d_c_1)
- self.session.commit()
- def device_config_delete_by_mode_type(self, mode_type: str):
- all_data = (
- self.session.query(DeviceConfig)
- .filter(DeviceConfig.mode_type == mode_type)
- .all()
- )
- [self.session.delete(u) for u in all_data]
- self.session.commit()
- def device_config_copy_by_id(self, config_id):
- d_c_1 = self.session.query(DeviceConfig).get(config_id)
- d_c_2 = DeviceConfig(
- mode_type=d_c_1.mode_type,
- execution_type=d_c_1.execution_type,
- action_name=d_c_1.action_name + "_复制",
- action_index=d_c_1.action_index + 1,
- picture_index=d_c_1.picture_index,
- camera_height=d_c_1.camera_height,
- camera_angle=d_c_1.camera_angle,
- number_focus=d_c_1.number_focus,
- take_picture=d_c_1.take_picture,
- turntable_position=d_c_1.turntable_position,
- turntable_angle=d_c_1.turntable_angle,
- shoe_upturn=d_c_1.shoe_upturn,
- pre_delay=d_c_1.pre_delay,
- after_delay=d_c_1.after_delay,
- led_switch=d_c_1.led_switch,
- is_wait=d_c_1.is_wait,
- )
- # 复制一个后,其他的数据的排序进行后移
- other_d_c = self.session.query(DeviceConfig).filter(
- DeviceConfig.mode_type == d_c_1.mode_type,
- DeviceConfig.action_index >= d_c_1.action_index + 1,
- DeviceConfig.delete_time.is_(None),
- )
- other_d_c.update(
- {
- DeviceConfig.action_index: DeviceConfig.action_index + 1,
- }
- )
- self.session.add(d_c_2)
- self.session.commit()
- def device_config_add(self, data: dict):
- f_data = (
- self.session.query(
- func.max(DeviceConfig.action_index).label("max_action_index")
- )
- .filter(
- DeviceConfig.mode_type == data["mode_type"],
- DeviceConfig.delete_time.is_(None),
- )
- .scalar()
- )
- if not f_data:
- data["action_index"] = 10
- else:
- data["action_index"] = f_data + 10
- d_c_1 = DeviceConfig(**data)
- self.session.add(d_c_1)
- self.session.commit()
- def device_config_change_action_index(self, up_config_id_1, down_config_id_2):
- d_c_1 = (
- self.session.query(DeviceConfig.action_index)
- .filter(DeviceConfig.id == up_config_id_1)
- .scalar()
- )
- d_c_2 = (
- self.session.query(DeviceConfig.action_index)
- .filter(DeviceConfig.id == down_config_id_2)
- .scalar()
- )
- if d_c_1 == d_c_2:
- d_c = self.session.query(DeviceConfig).get(up_config_id_1)
- d_c.update(
- {
- DeviceConfig.action_index: DeviceConfig.action_index - 1,
- }
- )
- else:
- d_c_update_1 = self.session.query(DeviceConfig).filter(
- DeviceConfig.id == up_config_id_1
- )
- d_c_update_2 = self.session.query(DeviceConfig).filter(
- DeviceConfig.id == down_config_id_2
- )
- d_c_update_1.update(
- {
- DeviceConfig.action_index: d_c_2,
- }
- )
- d_c_update_2.update(
- {
- DeviceConfig.action_index: d_c_1,
- }
- )
- self.session.commit()
- pass
- def device_config_update(self, data: dict):
- d_c = self.session.query(DeviceConfig).filter(DeviceConfig.id == data["id"])
- data.pop("id")
- d_c.update(data)
- self.session.commit()
- def device_config_config_list(self, mode_type, action_name=None):
- _q = self.session.query(DeviceConfig).filter(
- DeviceConfig.mode_type == mode_type, DeviceConfig.delete_time.is_(None)
- )
- if action_name:
- _q = _q.filter(DeviceConfig.action_name == action_name)
- results = _q.order_by(DeviceConfig.action_index.asc()).all()
- return [self.to_dict(row) for row in results]
- def to_dict(self, row):
- return {c.name: getattr(row, c.name, None) for c in row.__table__.columns}
- def device_config_detail(self, config_id):
- results = (
- self.session.query(DeviceConfig)
- .filter(DeviceConfig.id == config_id, DeviceConfig.delete_time.is_(None))
- .one()
- )
- return self.to_dict(results)
- def delete3MonthAgoRecord(self):
- """删除3个月以前得数据"""
- print("d_c_1")
- # 计算3个月前的日期
- three_months_ago = datetime.now() - timedelta(days=90)
- d_c_1 = (
- self.session.query(PhotoRecord)
- .filter(PhotoRecord.create_time < three_months_ago)
- .delete()
- )
- self.session.commit()
|