217518e3 by 周伟奇

add statistics script

1 parent a9491aa6
...@@ -729,6 +729,7 @@ MVI_CLASSIFY = 29 ...@@ -729,6 +729,7 @@ MVI_CLASSIFY = 29
729 MVI_FIELD_ORDER = (('发票代码', '发票代码'), 729 MVI_FIELD_ORDER = (('发票代码', '发票代码'),
730 ('发票号码', '发票号码'), 730 ('发票号码', '发票号码'),
731 ('开票日期', '开票日期'), 731 ('开票日期', '开票日期'),
732 ('不含税价(逻辑计算)', '不含税价(逻辑计算)'),
732 ('不含税价', '不含税价'), 733 ('不含税价', '不含税价'),
733 ('发票类型', '发票联'), 734 ('发票类型', '发票联'),
734 ('购方名称', '购买方名称'), 735 ('购方名称', '购买方名称'),
......
1 import re
2 import os
3 import ast
4 import json
5 import datetime
6 from openpyxl import Workbook
7 from django.core.management import BaseCommand
8 from settings import conf
9 from common.mixins import LoggerMixin
10 from apps.doc import consts
11
12
13 class Command(BaseCommand, LoggerMixin):
14
15 def __init__(self):
16 super().__init__()
17 self.log_base = '[bs statistics]'
18
19 def add_arguments(self, parser):
20 parser.add_argument(
21 '--date',
22 default=datetime.date.today() - datetime.timedelta(days=1),
23 dest='date',
24 help='将要计算的日期,格式: 2018-01-01'
25 )
26
27 def handle(self, *args, **kwargs):
28 date = kwargs.get('date')
29 if isinstance(date, str):
30 if not re.match(r'\d{4}-\d{2}-\d{2}', date):
31 print('date format error')
32 return
33 date_str = date
34 else:
35 date_str = date.strftime('%Y-%m-%d')
36
37 excel_path = os.path.join(conf.LOG_DIR, 'bs_{0}.xlsx'.format(date_str))
38 log_path = os.path.join(conf.LOG_DIR, 'bs.log.{0}'.format(date_str))
39 if not os.path.exists(log_path):
40 print('log_path not exists')
41 return
42
43 wb = Workbook()
44 ws = wb.get_sheet_by_name('Sheet')
45 ws.title = date_str
46 ws.append(('版式', '数目'))
47
48 with open(log_path, 'r', encoding='utf-8') as fp:
49 for line in fp:
50 search_obj = re.search(r'(\d{1,2}):(\d+)', line)
51 classify = search_obj.group(1)
52 count = search_obj.group(2)
53 label = consts.CLASSIFY_LIST[int(classify)][0]
54 ws.append((label, int(count)))
55
56 wb.save(excel_path)
1 import json
2 import re 1 import re
2 import os
3 import ast 3 import ast
4 import datetime
4 from openpyxl import Workbook 5 from openpyxl import Workbook
5 from django.core.management import BaseCommand 6 from django.core.management import BaseCommand
7 from settings import conf
6 from common.mixins import LoggerMixin 8 from common.mixins import LoggerMixin
7 from apps.doc.models import HILDoc, AFCDoc 9 from apps.doc.models import HILDoc, AFCDoc
8 from apps.doc import consts 10 from apps.doc import consts
...@@ -50,8 +52,30 @@ class Command(BaseCommand, LoggerMixin): ...@@ -50,8 +52,30 @@ class Command(BaseCommand, LoggerMixin):
50 '备注')], 52 '备注')],
51 } 53 }
52 54
55 def add_arguments(self, parser):
56 parser.add_argument(
57 '--date',
58 default=datetime.date.today() - datetime.timedelta(days=1),
59 dest='date',
60 help='将要计算的日期,格式: 2018-01-01'
61 )
62
53 def handle(self, *args, **kwargs): 63 def handle(self, *args, **kwargs):
54 excel_path = '/bmw-ocr/data/license_res.xlsx' 64 date = kwargs.get('date')
65 if isinstance(date, str):
66 if not re.match(r'\d{4}-\d{2}-\d{2}', date):
67 print('date format error')
68 return
69 date_str = date
70 else:
71 date_str = date.strftime('%Y-%m-%d')
72
73 excel_path = os.path.join(conf.LOG_DIR, 'license_{0}.xlsx'.format(date_str))
74 log_path = os.path.join(conf.LOG_DIR, 'license.log.{0}'.format(date_str))
75 if not os.path.exists(log_path):
76 print('log_path not exists')
77 return
78
55 wb = Workbook() 79 wb = Workbook()
56 for classify, (_, name, _, _, _, _) in consts.LICENSE_ORDER: 80 for classify, (_, name, _, _, _, _) in consts.LICENSE_ORDER:
57 ws = wb.create_sheet(name) 81 ws = wb.create_sheet(name)
...@@ -60,7 +84,7 @@ class Command(BaseCommand, LoggerMixin): ...@@ -60,7 +84,7 @@ class Command(BaseCommand, LoggerMixin):
60 ws.append(header) 84 ws.append(header)
61 wb.remove(wb.get_sheet_by_name('Sheet')) 85 wb.remove(wb.get_sheet_by_name('Sheet'))
62 86
63 with open('/bmw-ocr/logs/license_bak.log', 'r', encoding='utf-8') as fp: 87 with open(log_path, 'r', encoding='utf-8') as fp:
64 for line in fp: 88 for line in fp:
65 search_obj = re.search(r'task=(.*) license_summary=(.*)', line) 89 search_obj = re.search(r'task=(.*) license_summary=(.*)', line)
66 task_str = search_obj.group(1) 90 task_str = search_obj.group(1)
......
...@@ -608,6 +608,19 @@ class BSWorkbook(Workbook): ...@@ -608,6 +608,19 @@ class BSWorkbook(Workbook):
608 if side_diff: 608 if side_diff:
609 key, field_order_yes, field_order_no = consts.FIELD_ORDER_MAP.get(classify) 609 key, field_order_yes, field_order_no = consts.FIELD_ORDER_MAP.get(classify)
610 field_order = field_order_yes if key in license_dict else field_order_no 610 field_order = field_order_yes if key in license_dict else field_order_no
611 if classify == consts.MVI_CLASSIFY:
612 price = ''
613 rate_str = license_dict.get('增值税税率')
614 price_total_str = license_dict.get('价税合计小写')
615 if rate_str is not None and price_total_str is not None:
616 try:
617 rate = int(rate_str)
618 price_total = float(price_total_str)
619 except Exception as e:
620 pass
621 else:
622 price = price_total*100/(rate+100)
623 license_dict['不含税价(逻辑计算)'] = price
611 for search_field, write_field in field_order: 624 for search_field, write_field in field_order:
612 field_value = license_dict.get(search_field, '') 625 field_value = license_dict.get(search_field, '')
613 if isinstance(field_value, list): 626 if isinstance(field_value, list):
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!