dda_daily.py 8.92 KB
import re
import os
import datetime
from openpyxl import Workbook
from django.core.management import BaseCommand
from common.mixins import LoggerMixin
from apps.doc.models import DDARecords
from settings import conf


class Command(BaseCommand, LoggerMixin):

    def __init__(self):
        super().__init__()
        self.sheet_info = [
            ('今日新建',
             ('Application No', 'DDA Found?', 'DDA Found Time', 'ID Found?', 'ID Found Time', 'BC Found?',
              'BC Found Time'),
             ('application_id', 'is_dda_found', 'is_id_found', 'is_bc_found', 'dda_found_time', 'id_found_time',
              'bc_found_time')),
            ('今日完成',
             ('Application No', 'DDA Found Time', 'ID Found Time', 'BC Found Time', 'Create Time'),
             ('application_id', 'dda_found_time', 'id_found_time', 'bc_found_time', 'create_time')),
            ('累计进行中',
             ('Application No', 'DDA Found?', 'DDA Found Time', 'ID Found?', 'ID Found Time', 'BC Found?',
              'BC Found Time', 'Create Time'),
             ('application_id', 'is_dda_found', 'is_id_found', 'is_bc_found', 'dda_found_time', 'id_found_time',
              'bc_found_time', 'create_time')),
        ]
        self.month_sheet_info = [
            ('本月新建',
             ('Application No', 'DDA Found?', 'DDA Found Time', 'ID Found?', 'ID Found Time', 'BC Found?',
              'BC Found Time'),
             ('application_id', 'is_dda_found', 'is_id_found', 'is_bc_found', 'dda_found_time', 'id_found_time',
              'bc_found_time')),
            ('本月完成',
             ('Application No', 'DDA Found Time', 'ID Found Time', 'BC Found Time', 'Create Time'),
             ('application_id', 'dda_found_time', 'id_found_time', 'bc_found_time', 'create_time')),
            ('累计进行中',
             ('Application No', 'DDA Found?', 'DDA Found Time', 'ID Found?', 'ID Found Time', 'BC Found?',
              'BC Found Time', 'Create Time'),
             ('application_id', 'is_dda_found', 'is_id_found', 'is_bc_found', 'dda_found_time', 'id_found_time',
              'bc_found_time', 'create_time')),
        ]
        self.dda_dir = os.path.join(conf.DATA_DIR, 'HIL', 'SF5-CL-S-1', 'DDA')
        self.excel_name_base = 'DDA_Data'
        # self.complete_dda_dir = os.path.join(self.dda_dir, 'complete')
        # self.wanting_dda_dir = os.path.join(self.dda_dir, 'wanting')
        # self.dda_img_prefix = '{0}_0'.format(consts.DDA_FIELD)
        # self.id_img_prefix = '{0}_0'.format(consts.IC_FIELD)
        # self.bc_img_prefix = '{0}_0'.format(consts.BC_FIELD)

    def add_arguments(self, parser):
        parser.add_argument(
            '--date',
            default=datetime.date.today() - datetime.timedelta(days=1),
            dest='date',
            help='将要计算的日期,格式: 2018-01-01'
        )

    def handle(self, *args, **kwargs):
        date = kwargs.get('date')
        if isinstance(date, str):
            if not re.match(r'\d{4}-\d{2}-\d{2}', date):
                print('date format error')
                return
            date_str = date
        else:
            date_str = date.strftime('%Y-%m-%d')

        target_date = datetime.datetime.strptime(date_str, '%Y-%m-%d')
        next_date = target_date + datetime.timedelta(days=1)
        do_month = True if next_date.day == 1 else False
        wanting_querysets = None

        excel_name = '{0}({1}).xlsx'.format(self.excel_name_base, date_str)
        excel_path = os.path.join(self.dda_dir, excel_name)

        wb = Workbook()
        for sheet_name, header, query_fields in self.sheet_info:
            ws = wb.create_sheet(sheet_name)
            ws.append(header)

            if sheet_name == '今日新建':
                querysets = DDARecords.objects.filter(create_time__gt=target_date,
                                                      create_time__lt=next_date).values(*query_fields)
                for queryset in querysets:
                    col_values = (
                        queryset.get('application_id', ''),
                        queryset.get('is_dda_found', 'False'),
                        queryset.get('dda_found_time', ''),
                        queryset.get('is_id_found', 'False'),
                        queryset.get('id_found_time', ''),
                        queryset.get('is_bc_found', 'False'),
                        queryset.get('bc_found_time', ''),
                    )
                    ws.append(col_values)
            elif sheet_name == '今日完成':
                querysets = DDARecords.objects.filter(update_time__gt=target_date,
                                                      update_time__lt=next_date,
                                                      all_found=True).values(*query_fields)
                for queryset in querysets:
                    col_values = (
                        queryset.get('application_id', ''),
                        queryset.get('dda_found_time', ''),
                        queryset.get('id_found_time', ''),
                        queryset.get('bc_found_time', ''),
                        queryset.get('create_time', ''),
                    )
                    ws.append(col_values)
            else:
                querysets = DDARecords.objects.filter(all_found=False).values(*query_fields)
                if do_month:
                    wanting_querysets = querysets

                for queryset in querysets:
                    col_values = (
                        queryset.get('application_id', ''),
                        queryset.get('is_dda_found', 'False'),
                        queryset.get('dda_found_time', ''),
                        queryset.get('is_id_found', 'False'),
                        queryset.get('id_found_time', ''),
                        queryset.get('is_bc_found', 'False'),
                        queryset.get('bc_found_time', ''),
                        queryset.get('create_time', ''),
                    )
                    ws.append(col_values)

        wb.remove(wb.get_sheet_by_name('Sheet'))
        wb.save(excel_path)

        if do_month:
            target_month = target_date.month
            target_year = target_date.year
            month_excel_name = '{0}({1}-{2}).xlsx'.format(self.excel_name_base, target_year, target_month)
            month_excel_path = os.path.join(self.dda_dir, month_excel_name)

            month_wb = Workbook()
            for sheet_name, header, query_fields in self.month_sheet_info:
                ws = month_wb.create_sheet(sheet_name)
                ws.append(header)

                if sheet_name == '本月新建':
                    querysets = DDARecords.objects.filter(create_time__year=target_year,
                                                          create_time__month=target_month).values(*query_fields)
                    for queryset in querysets:
                        col_values = (
                            queryset.get('application_id', ''),
                            queryset.get('is_dda_found', 'False'),
                            queryset.get('dda_found_time', ''),
                            queryset.get('is_id_found', 'False'),
                            queryset.get('id_found_time', ''),
                            queryset.get('is_bc_found', 'False'),
                            queryset.get('bc_found_time', ''),
                        )
                        ws.append(col_values)
                elif sheet_name == '本月完成':
                    querysets = DDARecords.objects.filter(update_time__year=target_year,
                                                          update_time__month=target_month,
                                                          all_found=True).values(*query_fields)
                    for queryset in querysets:
                        col_values = (
                            queryset.get('application_id', ''),
                            queryset.get('dda_found_time', ''),
                            queryset.get('id_found_time', ''),
                            queryset.get('bc_found_time', ''),
                            queryset.get('create_time', ''),
                        )
                        ws.append(col_values)
                else:
                    for queryset in wanting_querysets:
                        col_values = (
                            queryset.get('application_id', ''),
                            queryset.get('is_dda_found', 'False'),
                            queryset.get('dda_found_time', ''),
                            queryset.get('is_id_found', 'False'),
                            queryset.get('id_found_time', ''),
                            queryset.get('is_bc_found', 'False'),
                            queryset.get('bc_found_time', ''),
                            queryset.get('create_time', ''),
                        )
                        ws.append(col_values)

            month_wb.remove(month_wb.get_sheet_by_name('Sheet'))
            month_wb.save(month_excel_path)