Esempio n. 1
0
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)
Esempio n. 2
0
    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
Esempio n. 3
0
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, '油库温度更新成功')
Esempio n. 4
0
 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))
Esempio n. 5
0
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, '油库读数更新成功')
Esempio n. 6
0
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
Esempio n. 7
0
 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
Esempio n. 8
0
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, '商品订单更新')