def init_in_test(slug, task_id=None): import time try: begin = datetime.datetime.now() now = get_now_time_with_timezone() logging.info('开始初始化任务 {0: %Y-%m-%d %H:%M:%S}'.format(begin)) site = session.query(Site).filter(Site.slug == slug).first() if site: task = Task() task.task_id = task_id task.belong_id = site.id task.name = '初始化任务: {0}'.format(site.name) task.create_time = now task.original_create_time = now task.modify_time = now session.add(task) try: session.commit() except Exception as e: logging.exception( 'ERROR in commit session site {0} reason {1}'.format( slug, e)) session.rollback() init_st = add_timezone_to_naive_time( datetime.datetime(2016, 12, 15)) init_et = add_timezone_to_naive_time(datetime.datetime.now()) total_days = (init_et - init_st).days times = total_days / 7 detla = datetime.timedelta(days=7) count = 0.0 et = init_st while 1: st = et et = et + detla count += 1 percent = round(count / times, 2) * 100 update_init_progress(task_id, percent, '任务执行中') time.sleep(0.5) if st > init_et: break end = datetime.datetime.now() msg = '结束初始化任务 {0: %Y-%m-%d %H:%M:%S} 共计耗时 {1} 分钟'.format( end, (end - begin).seconds / 60.0) update_init_progress(task_id, 100, msg, TaskStatus.finish) except Exception as e: logging.exception('ERROR in init all site {0} reason {1}'.format( slug, e)) session.rollback() update_init_progress(task_id, 0, e.message, TaskStatus.error)
def handle_request(self): context = {} # context['fuel_type'] = int(self.request.GET.get('fuel_type')) context['compare'] = int(self.request.GET.get('compare', 0)) context['target'] = self.request.GET.get('target', 'month') context['year'] = int(self.request.GET.get('year', 0)) now = datetime.datetime.now() if context['target'] == 'month': context['start_time'] = add_timezone_to_naive_time( datetime.datetime(context['year'], 1, 1)) context['end_time'] = add_timezone_to_naive_time( datetime.datetime(context['year'], 12, 31)) context['last_start_time'] = add_timezone_to_naive_time( datetime.datetime(context['year'] - 1, 1, 1)) context['last_end_time'] = add_timezone_to_naive_time( datetime.datetime(context['year'] - 1, 12, 31)) else: context['start_time'] = add_timezone_to_naive_time( datetime.datetime(2000, 1, 1)) context['end_time'] = add_timezone_to_naive_time( datetime.datetime(now.year, 12, 31)) context['last_start_time'] = add_timezone_to_naive_time( datetime.datetime(2000, 1, 1)) context['last_end_time'] = add_timezone_to_naive_time( datetime.datetime(now.year, 12, 31)) return context
def get_tank_temperature(site): site = get_site_by_slug(site) ib_session = init_interbase_connect(site.fuel_server) for tank_id in range(1, 10): # sql = 'SELECT FDT.TEMPERATURE,FDT.READ_TIME, FT.TANK_ID, FT.TANK_NAME FROM FUEL_DAY_TEMPERATURE FDT, FUEL_TANKS FT WHERE FT.TANK_ID = {0} ORDER BY FDT.READ_TIME DESC'.format( sql = 'SELECT TEMPERATURE, READ_TIME FROM FUEL_DAY_TEMPERATURE where TANK_ID = {0} order by READ_TIME DESC'.format( tank_id) ib_session.execute(sql) res = ib_session.fetchone() if not res: logging.info( '{0}:no temperature result for site {1} tank {2}'.format( 'get_tank_temperature', site.name, tank_id)) break tank = get_tank_by_tank_id(tank_id, site.id) tank.temperature = res[0] tank.original_create_time = add_timezone_to_naive_time(res[1]) logging.info( 'INFO read temperature for site {0} tank {1} success'.format( site.name, tank_id)) try: session.commit() except Exception as e: logging.exception('ERROR in commit session site {0} reason {1}'.format( site.name, e)) session.rollback() update_site_status(site, '油库温度更新成功')
def get_day_stage_time(): from api.models import InventoryRecord ir = InventoryRecord.objects.filter(original_create_time__hour__in=(15, 16, 17)).order_by( '-original_create_time').all() if ir.exists(): ir = ir[0] return ir.original_create_time now = datetime.datetime.now() return add_timezone_to_naive_time(datetime.datetime(now.year, now.month, now.day, 23, 59, 59))
def get_tank_value(site): site = get_site_by_slug(site) ib_session = init_interbase_connect(site.fuel_server) for tank_id in range(1, 10): sql = 'SELECT SHIFT_CONTROL_ID ,TANK_ID ,WATER_STICK ,CLOSE_QTY ,WATER_VOLUME ,TRANS_DATE FROM FUEL_TANK_READING WHERE TANK_ID = {0} ORDER BY TRANS_DATE DESC'.format( tank_id) ib_session.execute(sql) res = ib_session.fetchone() if not res: logging.info('{0}:no value result for site {1} tank {2}'.format( 'get_tank_value', site.name, tank_id)) break tank = get_tank_by_tank_id(tank_id, site.id) tank.current = res[3] if res[3] else 0 tank.original_create_time = add_timezone_to_naive_time(res[-1]) logging.info('INFO read value for site {0} tank {1} success'.format( site.name, tank_id)) try: session.commit() except Exception as e: logging.exception('ERROR in commit session site {0} reason {1}'.format( site.name, e)) session.rollback() update_site_status(site, '油库读数更新成功')
class DateTimeHandleMixin(object): now = datetime.datetime.now() yesterday = now - datetime.timedelta(days=1) st_format = {'day': add_timezone_to_naive_time(datetime.datetime(now.year, now.month, now.day)), 'stage': add_timezone_to_naive_time(datetime.datetime(now.year, now.month, now.day)), 'yesterday': add_timezone_to_naive_time( datetime.datetime(yesterday.year, yesterday.month, yesterday.day)), 'week': add_timezone_to_naive_time(now - datetime.timedelta(days=now.weekday())), 'last_week': add_timezone_to_naive_time(now - datetime.timedelta(days=now.weekday() + 7)), 'month': add_timezone_to_naive_time(datetime.datetime(now.year, now.month, day=1)), 'year': add_timezone_to_naive_time(datetime.datetime(now.year, 1, 1)), 'last_year': add_timezone_to_naive_time(datetime.datetime(now.year - 1, 1, 1))} et_format = {'day': add_timezone_to_naive_time(datetime.datetime(now.year, now.month, now.day, 23, 59, 59)), 'yesterday': add_timezone_to_naive_time( datetime.datetime(yesterday.year, yesterday.month, yesterday.day, 23, 59, 59)), 'week': add_timezone_to_naive_time(now + datetime.timedelta(days=6 - now.weekday())), 'last_week': add_timezone_to_naive_time(now - datetime.timedelta(days=now.weekday() + 1)), 'month': add_timezone_to_naive_time( datetime.datetime(now.year, now.month, calendar.monthrange(now.year, now.month)[1], 23, 59, 59)), 'year': add_timezone_to_naive_time(datetime.datetime(now.year, 12, 31, 23, 59, 59)), 'last_year': add_timezone_to_naive_time(datetime.datetime(now.year - 1, 12, 31, 23, 59, 59))} @staticmethod def replace_time_to_end(time_obj): return time_obj.replace(hour=23, minute=59, second=59) @staticmethod def replace_time_to_start(time_obj): return time_obj.replace(hour=0, minute=0, second=0) @staticmethod def get_day_stage_time(): from api.models import InventoryRecord ir = InventoryRecord.objects.filter(original_create_time__hour__in=(15, 16, 17)).order_by( '-original_create_time').all() if ir.exists(): ir = ir[0] return ir.original_create_time now = datetime.datetime.now() return add_timezone_to_naive_time(datetime.datetime(now.year, now.month, now.day, 23, 59, 59)) def get_date_period(self, fmt='day', compare=False): st = self.request.GET.get('start_time') et = self.request.GET.get('end_time') if fmt == 'stage': st = self.replace_time_to_start(self.st_format.get('day')) et = self.replace_time_to_end(self.et_format.get('stage')) elif not (st or et): st = self.replace_time_to_start(self.st_format.get(fmt)) et = self.replace_time_to_end(self.et_format.get(fmt)) else: st = string_to_datetime(st) et = string_to_datetime(et) if compare: st, et = self.get_date_period_by_time(st, fmt) return st, et def get_date_period_by_time(self, time_obj, fmt='day'): from dateutil.relativedelta import relativedelta now = time_obj yesterday = now - datetime.timedelta(days=1) last_mon = now - relativedelta(months=1) st_format = {'day': add_timezone_to_naive_time(datetime.datetime(now.year, now.month, now.day)), 'yesterday': add_timezone_to_naive_time( datetime.datetime(yesterday.year, yesterday.month, yesterday.day)), 'week': add_timezone_to_naive_time(now - datetime.timedelta(days=now.weekday())), 'last_week': add_timezone_to_naive_time(now - datetime.timedelta(days=now.weekday() + 7)), 'month': add_timezone_to_naive_time(datetime.datetime(now.year, now.month, day=1)), 'last_month': add_timezone_to_naive_time(datetime.datetime(last_mon.year, last_mon.month, 1)), 'year': add_timezone_to_naive_time(datetime.datetime(now.year, 1, 1)), 'last_year': add_timezone_to_naive_time(datetime.datetime(now.year - 1, 1, 1))} et_format = {'day': add_timezone_to_naive_time(datetime.datetime(now.year, now.month, now.day, 23, 59, 59)), 'yesterday': add_timezone_to_naive_time( datetime.datetime(yesterday.year, yesterday.month, yesterday.day, 23, 59, 59)), 'week': add_timezone_to_naive_time(now + datetime.timedelta(days=6 - now.weekday())), 'last_week': add_timezone_to_naive_time(now - datetime.timedelta(days=now.weekday() + 1)), 'month': add_timezone_to_naive_time( datetime.datetime(now.year, now.month, calendar.monthrange(now.year, now.month)[1], 23, 59, 59)), 'last_month': add_timezone_to_naive_time( datetime.datetime(now.year, now.month, 1, 23, 59, 59) - datetime.timedelta(days=1)), 'year': add_timezone_to_naive_time(datetime.datetime(now.year, 12, 31, 23, 59, 59)), 'last_year': add_timezone_to_naive_time(datetime.datetime(now.year - 1, 12, 31, 23, 59, 59))} self.now = time_obj st = self.replace_time_to_start(st_format.get(fmt)) et = self.replace_time_to_end(et_format.get(fmt)) return st, et
def get_date_period_by_time(self, time_obj, fmt='day'): from dateutil.relativedelta import relativedelta now = time_obj yesterday = now - datetime.timedelta(days=1) last_mon = now - relativedelta(months=1) st_format = {'day': add_timezone_to_naive_time(datetime.datetime(now.year, now.month, now.day)), 'yesterday': add_timezone_to_naive_time( datetime.datetime(yesterday.year, yesterday.month, yesterday.day)), 'week': add_timezone_to_naive_time(now - datetime.timedelta(days=now.weekday())), 'last_week': add_timezone_to_naive_time(now - datetime.timedelta(days=now.weekday() + 7)), 'month': add_timezone_to_naive_time(datetime.datetime(now.year, now.month, day=1)), 'last_month': add_timezone_to_naive_time(datetime.datetime(last_mon.year, last_mon.month, 1)), 'year': add_timezone_to_naive_time(datetime.datetime(now.year, 1, 1)), 'last_year': add_timezone_to_naive_time(datetime.datetime(now.year - 1, 1, 1))} et_format = {'day': add_timezone_to_naive_time(datetime.datetime(now.year, now.month, now.day, 23, 59, 59)), 'yesterday': add_timezone_to_naive_time( datetime.datetime(yesterday.year, yesterday.month, yesterday.day, 23, 59, 59)), 'week': add_timezone_to_naive_time(now + datetime.timedelta(days=6 - now.weekday())), 'last_week': add_timezone_to_naive_time(now - datetime.timedelta(days=now.weekday() + 1)), 'month': add_timezone_to_naive_time( datetime.datetime(now.year, now.month, calendar.monthrange(now.year, now.month)[1], 23, 59, 59)), 'last_month': add_timezone_to_naive_time( datetime.datetime(now.year, now.month, 1, 23, 59, 59) - datetime.timedelta(days=1)), 'year': add_timezone_to_naive_time(datetime.datetime(now.year, 12, 31, 23, 59, 59)), 'last_year': add_timezone_to_naive_time(datetime.datetime(now.year - 1, 12, 31, 23, 59, 59))} self.now = time_obj st = self.replace_time_to_start(st_format.get(fmt)) et = self.replace_time_to_end(et_format.get(fmt)) return st, et
def get_store_order(site, start_time=None, end_time=None): if not start_time: start_time = datetime.datetime.now() - datetime.timedelta(hours=3) end_time = start_time + datetime.timedelta(days=1) st = datetime_to_string(start_time) et = datetime_to_string(end_time) site = get_site_by_slug(site) ib_session = init_interbase_connect(site.fuel_server) sql = '''SELECT TILL.SALEDATE, POSBATCH.POS_ID, TILL.TILLNUM, TILL.SHIFT, TILL.TIMECLOSE, ITEM.DEPT, ITEM.BARCODE, ITEM.FULLDESCRIPTION AS ITEMNAME, UNITSIZE.UNITNAME, TILLITEM.STDPRICE PRICE, (TILLITEM.TOTAL) AS TOTAL, (TILLITEM.QTY * TILLITEM.WEIGHT) AS QTY, (TILLITEM.QTY * TILLITEM.WEIGHT * TILLITEM.STDPRICE) AS CALC_TOTAL FROM DAYBATCH DAYBATCH , POSBATCH, TILLITEM,TILL, ITEM ,UNITSIZE WHERE ( TILLITEM.STATUSTYPE NOT IN ( 26 )) AND ( TILL.STATUSTYPE NOT IN ( 26 )) AND (DAYBATCH.DAY_BATCH_DATE BETWEEN '{0}' AND '{1}') AND ( TILLITEM.TILLNUM = TILL.TILLNUM) AND ( TILLITEM.POS_BATCH_ID = TILL.POS_BATCH_ID) AND ( TILL.POS_BATCH_ID = POSBATCH.POS_BATCH_ID) AND ( POSBATCH.DAY_BATCH_ID = DAYBATCH.DAY_BATCH_ID) AND ( TILLITEM.PLU = ITEM.ITEMID ) AND ( UNITSIZE.UNITID = ITEM.BASEUNIT) AND ( TILL.STATUSTYPE IN (1,2,3,4,15)) AND ( TILLITEM.STATUSTYPE IN (1,2,3,4,15)) ORDER BY TILL.TIMECLOSE DESC'''.format(st, et) ib_session.execute(sql) orders = ib_session.fetchall() nums = 0 for order in orders: sale_date, pos_id, till_id, shift, original_create_time, dept, barcode, name, unit, price, total, amount, _ = order dept_str = unicode(dept) if dept_str.startswith('1001'): continue name = get_clean_data(name) barcode = get_clean_data(barcode) unique_str = generate_hash( unicode(till_id), datetime_to_string(original_create_time, '%Y-%m-%d %H:%M:%S'), unicode(price), unicode(amount), unicode(barcode), unicode(total), unicode(site.id)) res = get_goods_order_by_hash(unique_str) if res: continue create_goods_order(till_id=till_id, original_create_time=original_create_time, classification_id=dept, price=price, total=total, amount=amount, barcode=barcode, hash=unique_str, name=name, belong_id=site.id, super_cls_id=int(dept_str[:4])) nums += 1 gi = get_goods_inventory_by_barcode(barcode, site) if gi: gi.last_sell_time = add_timezone_to_naive_time( original_create_time) try: session.commit() except Exception as e: logging.exception( 'ERROR in commit session site {0} reason {1}'.format( site.name, e)) session.rollback() logging.info( '=============create store order {0} site {1}=============='.format( nums, site.name)) # get_goods_order_payment(site) update_site_status(site, '商品订单更新')