commit
242df77176
@ -241,6 +241,7 @@ BAD_THRESHOLD = 0.75
|
|||||||
NEED_REVIEW = 1.0
|
NEED_REVIEW = 1.0
|
||||||
|
|
||||||
SUB_FOR_BILLING = ["all", "seao"]
|
SUB_FOR_BILLING = ["all", "seao"]
|
||||||
|
FIELD = ["imei_number", "purchase_date", "retailername", "sold_to_party", "invoice_no"]
|
||||||
|
|
||||||
CACHES = {
|
CACHES = {
|
||||||
'default': {
|
'default': {
|
||||||
|
@ -284,6 +284,7 @@ class AccuracyViewSet(viewsets.ViewSet):
|
|||||||
|
|
||||||
return JsonResponse(status=status.HTTP_200_OK, data={"report_id": report_id})
|
return JsonResponse(status=status.HTTP_200_OK, data={"report_id": report_id})
|
||||||
|
|
||||||
|
# Redundant, will be removed by 19 March 2024
|
||||||
@extend_schema(
|
@extend_schema(
|
||||||
parameters=[
|
parameters=[
|
||||||
OpenApiParameter(
|
OpenApiParameter(
|
||||||
@ -417,6 +418,9 @@ class AccuracyViewSet(viewsets.ViewSet):
|
|||||||
acc[key] = report.combined_accuracy.get(key, 0) if report.combined_accuracy else max([fb, rv])
|
acc[key] = report.combined_accuracy.get(key, 0) if report.combined_accuracy else max([fb, rv])
|
||||||
else:
|
else:
|
||||||
acc[key] = None
|
acc[key] = None
|
||||||
|
processing_time = report.average_OCR_time.get("avg", None) if report.average_OCR_time else None
|
||||||
|
if processing_time and processing_time == 0:
|
||||||
|
processing_time = None
|
||||||
data.append({
|
data.append({
|
||||||
"ID": report.id,
|
"ID": report.id,
|
||||||
"Created Date": report.created_at,
|
"Created Date": report.created_at,
|
||||||
@ -429,7 +433,7 @@ class AccuracyViewSet(viewsets.ViewSet):
|
|||||||
"IMEI Acc": acc["imei_number"],
|
"IMEI Acc": acc["imei_number"],
|
||||||
"Avg. Accuracy": acc["avg"],
|
"Avg. Accuracy": acc["avg"],
|
||||||
"Avg. Client Request Time": report.average_client_time.get("avg", 0) if report.average_client_time else 0,
|
"Avg. Client Request Time": report.average_client_time.get("avg", 0) if report.average_client_time else 0,
|
||||||
"Avg. OCR Processing Time": report.average_OCR_time.get("avg", 0) if report.average_OCR_time else 0,
|
"Avg. OCR Processing Time": processing_time,
|
||||||
"report_id": report.report_id,
|
"report_id": report.report_id,
|
||||||
"Subsidiary": map_subsidiary_short_to_long(report.subsidiary),
|
"Subsidiary": map_subsidiary_short_to_long(report.subsidiary),
|
||||||
})
|
})
|
||||||
@ -544,7 +548,7 @@ class AccuracyViewSet(viewsets.ViewSet):
|
|||||||
for key in keys:
|
for key in keys:
|
||||||
if report_fine_data[i][key]:
|
if report_fine_data[i][key]:
|
||||||
for x_key in report_fine_data[i][key].keys():
|
for x_key in report_fine_data[i][key].keys():
|
||||||
report_fine_data[i][key][x_key] = report_fine_data[i][key][x_key]*100
|
report_fine_data[i][key][x_key] = report_fine_data[i][key][x_key]*100 if report_fine_data[i][key][x_key] is not None else None
|
||||||
overview_filename = _subsidiary + "_" + duration + ".xlsx"
|
overview_filename = _subsidiary + "_" + duration + ".xlsx"
|
||||||
data_workbook = dict2xlsx(report_fine_data, _type='report')
|
data_workbook = dict2xlsx(report_fine_data, _type='report')
|
||||||
|
|
||||||
|
@ -125,6 +125,8 @@ def make_a_report(report_id, query_set):
|
|||||||
report.average_OCR_time = {"invoice": time_cost["invoice"](), "imei": time_cost["imei"](),
|
report.average_OCR_time = {"invoice": time_cost["invoice"](), "imei": time_cost["imei"](),
|
||||||
"invoice_count": time_cost["invoice"].count, "imei_count": time_cost["imei"].count}
|
"invoice_count": time_cost["invoice"].count, "imei_count": time_cost["imei"].count}
|
||||||
|
|
||||||
|
report.average_OCR_time["invoice"] = 0 if report.average_OCR_time["invoice"] is None else report.average_OCR_time["invoice"]
|
||||||
|
report.average_OCR_time["imei"] = 0 if report.average_OCR_time["imei"] is None else report.average_OCR_time["imei"]
|
||||||
report.average_OCR_time["avg"] = (report.average_OCR_time["invoice"]*report.average_OCR_time["invoice_count"] + report.average_OCR_time["imei"]*report.average_OCR_time["imei_count"])/(report.average_OCR_time["imei_count"] + report.average_OCR_time["invoice_count"]) if (report.average_OCR_time["imei_count"] + report.average_OCR_time["invoice_count"]) > 0 else None
|
report.average_OCR_time["avg"] = (report.average_OCR_time["invoice"]*report.average_OCR_time["invoice_count"] + report.average_OCR_time["imei"]*report.average_OCR_time["imei_count"])/(report.average_OCR_time["imei_count"] + report.average_OCR_time["invoice_count"]) if (report.average_OCR_time["imei_count"] + report.average_OCR_time["invoice_count"]) > 0 else None
|
||||||
|
|
||||||
report.number_imei_transaction = transaction_att.get("imei", 0)
|
report.number_imei_transaction = transaction_att.get("imei", 0)
|
||||||
@ -271,6 +273,8 @@ def create_accuracy_report(report_id, **kwargs):
|
|||||||
report.average_OCR_time = {"invoice": time_cost["invoice"](), "imei": time_cost["imei"](),
|
report.average_OCR_time = {"invoice": time_cost["invoice"](), "imei": time_cost["imei"](),
|
||||||
"invoice_count": time_cost["invoice"].count, "imei_count": time_cost["imei"].count}
|
"invoice_count": time_cost["invoice"].count, "imei_count": time_cost["imei"].count}
|
||||||
|
|
||||||
|
report.average_OCR_time["invoice"] = 0 if report.average_OCR_time["invoice"] is None else report.average_OCR_time["invoice"]
|
||||||
|
report.average_OCR_time["imei"] = 0 if report.average_OCR_time["imei"] is None else report.average_OCR_time["imei"]
|
||||||
report.average_OCR_time["avg"] = (report.average_OCR_time["invoice"]*report.average_OCR_time["invoice_count"] + report.average_OCR_time["imei"]*report.average_OCR_time["imei_count"])/(
|
report.average_OCR_time["avg"] = (report.average_OCR_time["invoice"]*report.average_OCR_time["invoice_count"] + report.average_OCR_time["imei"]*report.average_OCR_time["imei_count"])/(
|
||||||
report.average_OCR_time["imei_count"] + report.average_OCR_time["invoice_count"]) if (report.average_OCR_time["imei_count"] + report.average_OCR_time["invoice_count"]) > 0 else None
|
report.average_OCR_time["imei_count"] + report.average_OCR_time["invoice_count"]) if (report.average_OCR_time["imei_count"] + report.average_OCR_time["invoice_count"]) > 0 else None
|
||||||
report.number_imei_transaction = transaction_att.get("imei", 0)
|
report.number_imei_transaction = transaction_att.get("imei", 0)
|
||||||
|
@ -101,8 +101,8 @@ class Command(BaseCommand):
|
|||||||
request.is_reviewed = False
|
request.is_reviewed = False
|
||||||
request.save()
|
request.save()
|
||||||
image.predict_result = _predict_result
|
image.predict_result = _predict_result
|
||||||
image.feedback_result = _feedback_result
|
# image.feedback_result = _feedback_result
|
||||||
image.reviewed_result = _reviewed_result
|
# image.reviewed_result = _reviewed_result
|
||||||
image.save()
|
image.save()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.stdout.write(self.style.ERROR(f"Request: {request.request_id} failed with {e}"))
|
self.stdout.write(self.style.ERROR(f"Request: {request.request_id} failed with {e}"))
|
||||||
|
@ -0,0 +1,73 @@
|
|||||||
|
# myapp/management/commands/mycustomcommand.py
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from tqdm import tqdm
|
||||||
|
from fwd_api.models import SubscriptionRequestFile, SubscriptionRequest
|
||||||
|
from fwd_api.exception.exceptions import InvalidException
|
||||||
|
from fwd_api.utils.accuracy import predict_result_to_ready
|
||||||
|
import traceback
|
||||||
|
import copy
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = 'Move predict result to image level'
|
||||||
|
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
# Add your command-line arguments here
|
||||||
|
parser.add_argument('start', type=str, help='start date, sample: 2023-01-02T00:00:00+0700')
|
||||||
|
parser.add_argument('end', type=str, help='end date, sample: 2023-01-03T00:00:00+0700')
|
||||||
|
|
||||||
|
def process_request(self, request):
|
||||||
|
if len(request.request_id.split(".")[0].split("_")) < 2:
|
||||||
|
return
|
||||||
|
images = SubscriptionRequestFile.objects.filter(request=request)
|
||||||
|
time_cost = {"imei": [], "invoice": [], "all": []}
|
||||||
|
if request.ai_inference_profile is None:
|
||||||
|
time_cost["imei"] = [-1 for _ in range(len(images))]
|
||||||
|
time_cost["invoice"] = [-1]
|
||||||
|
time_cost["all"] = [-1]
|
||||||
|
else:
|
||||||
|
for k, v in request.ai_inference_profile.items():
|
||||||
|
time_cost[k.split("_")[0]].append(v["inference"][1][0] - v["inference"][0] + (v["postprocess"][1]-v["postprocess"][0]))
|
||||||
|
for i, image in enumerate(images):
|
||||||
|
try:
|
||||||
|
image.index_in_request = int(image.file_name.split(".")[0].split("_")[-1]) if len(image.file_name.split(".")[0].split("_")) > 4 else 0
|
||||||
|
image.doc_type = image.file_name.split(".")[0].split("_")[1] if len(image.file_name.split(".")[0].split("_")) > 4 else "all"
|
||||||
|
image.processing_time = time_cost[image.doc_type][image.index_in_request]
|
||||||
|
if not request.predict_result:
|
||||||
|
self.stdout.write(self.style.WARNING(f"Key predict_result not found in {request.request_id}"))
|
||||||
|
return
|
||||||
|
if request.predict_result.get("status", 200) != 200:
|
||||||
|
self.stdout.write(self.style.WARNING(f"Failed request: {request.request_id}"))
|
||||||
|
return
|
||||||
|
_predict_result = copy.deepcopy(predict_result_to_ready(request.predict_result))
|
||||||
|
|
||||||
|
if image.doc_type == "invoice":
|
||||||
|
_predict_result["imei_number"] = []
|
||||||
|
else:
|
||||||
|
_predict_result = {"retailername": None, "sold_to_party": None, "purchase_date": [], "imei_number": [_predict_result["imei_number"][image.index_in_request]]}
|
||||||
|
image.predict_result = _predict_result
|
||||||
|
image.save()
|
||||||
|
except Exception as e:
|
||||||
|
self.stdout.write(self.style.ERROR(f"Request: {request.request_id} failed with {e}"))
|
||||||
|
print(traceback.format_exc())
|
||||||
|
continue
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
start = options['start']
|
||||||
|
end = options['end']
|
||||||
|
|
||||||
|
if start or end:
|
||||||
|
try:
|
||||||
|
start_date = timezone.datetime.strptime(start, '%Y-%m-%dT%H:%M:%S%z')
|
||||||
|
end_date = timezone.datetime.strptime(end, '%Y-%m-%dT%H:%M:%S%z')
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[INFO]: start: {start}")
|
||||||
|
print(f"[INFO]: end: {end}")
|
||||||
|
raise InvalidException(excArgs="Date format")
|
||||||
|
subcription_iter = SubscriptionRequest.objects.filter(created_at__range=(start_date, end_date))
|
||||||
|
else:
|
||||||
|
subcription_iter = SubscriptionRequest.objects.all()
|
||||||
|
|
||||||
|
for request in tqdm(subcription_iter.iterator()):
|
||||||
|
self.process_request(request)
|
||||||
|
self.stdout.write(self.style.SUCCESS('Sample Django management command executed successfully!'))
|
@ -41,7 +41,8 @@ class ReportAccumulateByRequest:
|
|||||||
'imei': IterAvg(),
|
'imei': IterAvg(),
|
||||||
'purchase_date': IterAvg(),
|
'purchase_date': IterAvg(),
|
||||||
'retailer_name': IterAvg(),
|
'retailer_name': IterAvg(),
|
||||||
'sold_to_party': IterAvg()
|
'sold_to_party': IterAvg(),
|
||||||
|
'invoice_no': IterAvg(),
|
||||||
},
|
},
|
||||||
'average_processing_time': {
|
'average_processing_time': {
|
||||||
'imei': IterAvg(),
|
'imei': IterAvg(),
|
||||||
@ -57,13 +58,15 @@ class ReportAccumulateByRequest:
|
|||||||
'imei_number': IterAvg(),
|
'imei_number': IterAvg(),
|
||||||
'purchase_date': IterAvg(),
|
'purchase_date': IterAvg(),
|
||||||
'retailername': IterAvg(),
|
'retailername': IterAvg(),
|
||||||
'sold_to_party': IterAvg()
|
'sold_to_party': IterAvg(),
|
||||||
|
'invoice_no': IterAvg()
|
||||||
},
|
},
|
||||||
'reviewed_accuracy': {
|
'reviewed_accuracy': {
|
||||||
'imei_number': IterAvg(),
|
'imei_number': IterAvg(),
|
||||||
'purchase_date': IterAvg(),
|
'purchase_date': IterAvg(),
|
||||||
'retailername': IterAvg(),
|
'retailername': IterAvg(),
|
||||||
'sold_to_party': IterAvg()
|
'sold_to_party': IterAvg(),
|
||||||
|
'invoice_no': IterAvg()
|
||||||
},
|
},
|
||||||
'num_request': 0,
|
'num_request': 0,
|
||||||
"review_progress": []
|
"review_progress": []
|
||||||
@ -81,10 +84,11 @@ class ReportAccumulateByRequest:
|
|||||||
'bad_percent': 0
|
'bad_percent': 0
|
||||||
},
|
},
|
||||||
'average_accuracy_rate': {
|
'average_accuracy_rate': {
|
||||||
'imei': IterAvg(),
|
'imei_number': IterAvg(),
|
||||||
'purchase_date': IterAvg(),
|
'purchase_date': IterAvg(),
|
||||||
'retailer_name': IterAvg(),
|
'retailer_name': IterAvg(),
|
||||||
'sold_to_party': IterAvg()
|
'sold_to_party': IterAvg(),
|
||||||
|
'invoice_no': IterAvg()
|
||||||
},
|
},
|
||||||
'average_processing_time': {
|
'average_processing_time': {
|
||||||
'imei': IterAvg(),
|
'imei': IterAvg(),
|
||||||
@ -100,13 +104,15 @@ class ReportAccumulateByRequest:
|
|||||||
'imei_number': IterAvg(),
|
'imei_number': IterAvg(),
|
||||||
'purchase_date': IterAvg(),
|
'purchase_date': IterAvg(),
|
||||||
'retailername': IterAvg(),
|
'retailername': IterAvg(),
|
||||||
'sold_to_party': IterAvg()
|
'sold_to_party': IterAvg(),
|
||||||
|
'invoice_no': IterAvg()
|
||||||
},
|
},
|
||||||
'reviewed_accuracy': {
|
'reviewed_accuracy': {
|
||||||
'imei_number': IterAvg(),
|
'imei_number': IterAvg(),
|
||||||
'purchase_date': IterAvg(),
|
'purchase_date': IterAvg(),
|
||||||
'retailername': IterAvg(),
|
'retailername': IterAvg(),
|
||||||
'sold_to_party': IterAvg()
|
'sold_to_party': IterAvg(),
|
||||||
|
'invoice_no': IterAvg()
|
||||||
},
|
},
|
||||||
"report_files": [],
|
"report_files": [],
|
||||||
"num_request": 0,
|
"num_request": 0,
|
||||||
@ -127,20 +133,12 @@ class ReportAccumulateByRequest:
|
|||||||
total["num_imei"] += 1 if doc_type == "imei" else 0
|
total["num_imei"] += 1 if doc_type == "imei" else 0
|
||||||
total["num_invoice"] += 1 if doc_type == "invoice" else 0
|
total["num_invoice"] += 1 if doc_type == "invoice" else 0
|
||||||
|
|
||||||
|
for key in settings.FIELD:
|
||||||
if sum([len(report_file.reviewed_accuracy[x]) for x in report_file.reviewed_accuracy.keys() if "_count" not in x]) > 0 :
|
if sum([len(report_file.reviewed_accuracy[x]) for x in report_file.reviewed_accuracy.keys() if "_count" not in x]) > 0 :
|
||||||
total["average_accuracy_rate"]["imei"].add(report_file.reviewed_accuracy.get("imei_number", []))
|
total["average_accuracy_rate"][key].add(report_file.reviewed_accuracy.get(key, []))
|
||||||
total["average_accuracy_rate"]["purchase_date"].add(report_file.reviewed_accuracy.get("purchase_date", []))
|
|
||||||
total["average_accuracy_rate"]["retailer_name"].add(report_file.reviewed_accuracy.get("retailername", []))
|
|
||||||
total["average_accuracy_rate"]["sold_to_party"].add(report_file.reviewed_accuracy.get("sold_to_party", []))
|
|
||||||
elif sum([len(report_file.feedback_accuracy[x]) for x in report_file.feedback_accuracy.keys() if "_count" not in x]) > 0:
|
elif sum([len(report_file.feedback_accuracy[x]) for x in report_file.feedback_accuracy.keys() if "_count" not in x]) > 0:
|
||||||
total["average_accuracy_rate"]["imei"].add(report_file.feedback_accuracy.get("imei_number", []))
|
total["average_accuracy_rate"][key].add(report_file.feedback_accuracy.get(key, []))
|
||||||
total["average_accuracy_rate"]["purchase_date"].add(report_file.feedback_accuracy.get("purchase_date", []))
|
|
||||||
total["average_accuracy_rate"]["retailer_name"].add(report_file.feedback_accuracy.get("retailername", []))
|
|
||||||
total["average_accuracy_rate"]["sold_to_party"].add(report_file.feedback_accuracy.get("sold_to_party", []))
|
|
||||||
|
|
||||||
for key in ["imei_number", "purchase_date", "retailername", "sold_to_party"]:
|
|
||||||
total["feedback_accuracy"][key].add(report_file.feedback_accuracy.get(key, []))
|
total["feedback_accuracy"][key].add(report_file.feedback_accuracy.get(key, []))
|
||||||
for key in ["imei_number", "purchase_date", "retailername", "sold_to_party"]:
|
|
||||||
total["reviewed_accuracy"][key].add(report_file.reviewed_accuracy.get(key, []))
|
total["reviewed_accuracy"][key].add(report_file.reviewed_accuracy.get(key, []))
|
||||||
|
|
||||||
if not total["average_processing_time"].get(report_file.doc_type, None):
|
if not total["average_processing_time"].get(report_file.doc_type, None):
|
||||||
@ -174,20 +172,12 @@ class ReportAccumulateByRequest:
|
|||||||
day_data["num_invoice"] += 1 if doc_type == "invoice" else 0
|
day_data["num_invoice"] += 1 if doc_type == "invoice" else 0
|
||||||
day_data["report_files"].append(report_file)
|
day_data["report_files"].append(report_file)
|
||||||
|
|
||||||
|
for key in settings.FIELD:
|
||||||
if sum([len(report_file.reviewed_accuracy[x]) for x in report_file.reviewed_accuracy.keys() if "_count" not in x]) > 0:
|
if sum([len(report_file.reviewed_accuracy[x]) for x in report_file.reviewed_accuracy.keys() if "_count" not in x]) > 0:
|
||||||
day_data["average_accuracy_rate"]["imei"].add(report_file.reviewed_accuracy.get("imei_number", []))
|
day_data["average_accuracy_rate"][key].add(report_file.reviewed_accuracy.get(key, []))
|
||||||
day_data["average_accuracy_rate"]["purchase_date"].add(report_file.reviewed_accuracy.get("purchase_date", []))
|
|
||||||
day_data["average_accuracy_rate"]["retailer_name"].add(report_file.reviewed_accuracy.get("retailername", []))
|
|
||||||
day_data["average_accuracy_rate"]["sold_to_party"].add(report_file.reviewed_accuracy.get("sold_to_party", []))
|
|
||||||
elif sum([len(report_file.feedback_accuracy[x]) for x in report_file.feedback_accuracy.keys() if "_count" not in x]) > 0:
|
elif sum([len(report_file.feedback_accuracy[x]) for x in report_file.feedback_accuracy.keys() if "_count" not in x]) > 0:
|
||||||
day_data["average_accuracy_rate"]["imei"].add(report_file.feedback_accuracy.get("imei_number", []))
|
day_data["average_accuracy_rate"][key].add(report_file.feedback_accuracy.get(key, []))
|
||||||
day_data["average_accuracy_rate"]["purchase_date"].add(report_file.feedback_accuracy.get("purchase_date", []))
|
|
||||||
day_data["average_accuracy_rate"]["retailer_name"].add(report_file.feedback_accuracy.get("retailername", []))
|
|
||||||
day_data["average_accuracy_rate"]["sold_to_party"].add(report_file.feedback_accuracy.get("sold_to_party", []))
|
|
||||||
|
|
||||||
for key in ["imei_number", "purchase_date", "retailername", "sold_to_party"]:
|
|
||||||
day_data["feedback_accuracy"][key].add(report_file.feedback_accuracy.get(key, []))
|
day_data["feedback_accuracy"][key].add(report_file.feedback_accuracy.get(key, []))
|
||||||
for key in ["imei_number", "purchase_date", "retailername", "sold_to_party"]:
|
|
||||||
day_data["reviewed_accuracy"][key].add(report_file.reviewed_accuracy.get(key, []))
|
day_data["reviewed_accuracy"][key].add(report_file.reviewed_accuracy.get(key, []))
|
||||||
|
|
||||||
if not day_data["average_processing_time"].get(report_file.doc_type, None):
|
if not day_data["average_processing_time"].get(report_file.doc_type, None):
|
||||||
@ -264,7 +254,7 @@ class ReportAccumulateByRequest:
|
|||||||
"reviewed_accuracy": {}}
|
"reviewed_accuracy": {}}
|
||||||
for acc_type in ["feedback_accuracy", "reviewed_accuracy"]:
|
for acc_type in ["feedback_accuracy", "reviewed_accuracy"]:
|
||||||
avg_acc = IterAvg()
|
avg_acc = IterAvg()
|
||||||
for key in ["imei_number", "purchase_date", "retailername", "sold_to_party"]:
|
for key in settings.FIELD:
|
||||||
acumulated_acc[acc_type][key] = self.data[month][1][day][acc_type][key]()
|
acumulated_acc[acc_type][key] = self.data[month][1][day][acc_type][key]()
|
||||||
acumulated_acc[acc_type][key+"_count"] = self.data[month][1][day][acc_type][key].count
|
acumulated_acc[acc_type][key+"_count"] = self.data[month][1][day][acc_type][key].count
|
||||||
avg_acc.add_avg(acumulated_acc[acc_type][key], acumulated_acc[acc_type][key+"_count"])
|
avg_acc.add_avg(acumulated_acc[acc_type][key], acumulated_acc[acc_type][key+"_count"])
|
||||||
@ -308,21 +298,13 @@ class ReportAccumulateByRequest:
|
|||||||
for day in _data[month][1].keys():
|
for day in _data[month][1].keys():
|
||||||
num_transaction_imei += _data[month][1][day]["usage"].get("imei", 0)
|
num_transaction_imei += _data[month][1][day]["usage"].get("imei", 0)
|
||||||
num_transaction_invoice += _data[month][1][day]["usage"].get("invoice", 0)
|
num_transaction_invoice += _data[month][1][day]["usage"].get("invoice", 0)
|
||||||
_data[month][1][day]["average_accuracy_rate"]["imei"] = _data[month][1][day]["average_accuracy_rate"]["imei"]()
|
|
||||||
_data[month][1][day]["average_accuracy_rate"]["purchase_date"] = _data[month][1][day]["average_accuracy_rate"]["purchase_date"]()
|
|
||||||
_data[month][1][day]["average_accuracy_rate"]["retailer_name"] = _data[month][1][day]["average_accuracy_rate"]["retailer_name"]()
|
|
||||||
_data[month][1][day]["average_accuracy_rate"]["sold_to_party"] = _data[month][1][day]["average_accuracy_rate"]["sold_to_party"]()
|
|
||||||
for key in _data[month][1][day]["average_processing_time"].keys():
|
for key in _data[month][1][day]["average_processing_time"].keys():
|
||||||
_data[month][1][day]["average_processing_time"][key] = _data[month][1][day]["average_processing_time"][key]()
|
_data[month][1][day]["average_processing_time"][key] = _data[month][1][day]["average_processing_time"][key]()
|
||||||
|
|
||||||
_data[month][1][day]["feedback_accuracy"]["imei_number"] = _data[month][1][day]["feedback_accuracy"]["imei_number"]()
|
for key in settings.FIELD:
|
||||||
_data[month][1][day]["feedback_accuracy"]["purchase_date"] = _data[month][1][day]["feedback_accuracy"]["purchase_date"]()
|
_data[month][1][day]["average_accuracy_rate"][key] = _data[month][1][day]["average_accuracy_rate"][key]()
|
||||||
_data[month][1][day]["feedback_accuracy"]["retailername"] = _data[month][1][day]["feedback_accuracy"]["retailername"]()
|
for accuracy_type in ["feedback_accuracy", key]:
|
||||||
_data[month][1][day]["feedback_accuracy"]["sold_to_party"] = _data[month][1][day]["feedback_accuracy"]["sold_to_party"]()
|
_data[month][1][day][accuracy_type]["imei_number"] = _data[month][1][day]["feedback_accuracy"]["imei_number"]()
|
||||||
_data[month][1][day]["reviewed_accuracy"]["imei_number"] = _data[month][1][day]["reviewed_accuracy"]["imei_number"]()
|
|
||||||
_data[month][1][day]["reviewed_accuracy"]["purchase_date"] = _data[month][1][day]["reviewed_accuracy"]["purchase_date"]()
|
|
||||||
_data[month][1][day]["reviewed_accuracy"]["retailername"] = _data[month][1][day]["reviewed_accuracy"]["retailername"]()
|
|
||||||
_data[month][1][day]["reviewed_accuracy"]["sold_to_party"] = _data[month][1][day]["reviewed_accuracy"]["sold_to_party"]()
|
|
||||||
_data[month][1][day]["review_progress"] = _data[month][1][day]["review_progress"].count(1)/(_data[month][1][day]["review_progress"].count(0)+ _data[month][1][day]["review_progress"].count(1)) if (_data[month][1][day]["review_progress"].count(0)+ _data[month][1][day]["review_progress"].count(1)) >0 else 0
|
_data[month][1][day]["review_progress"] = _data[month][1][day]["review_progress"].count(1)/(_data[month][1][day]["review_progress"].count(0)+ _data[month][1][day]["review_progress"].count(1)) if (_data[month][1][day]["review_progress"].count(0)+ _data[month][1][day]["review_progress"].count(1)) >0 else 0
|
||||||
_data[month][1][day].pop("report_files")
|
_data[month][1][day].pop("report_files")
|
||||||
|
|
||||||
@ -332,23 +314,13 @@ class ReportAccumulateByRequest:
|
|||||||
_data[month][0]["usage"]["imei"] = num_transaction_imei
|
_data[month][0]["usage"]["imei"] = num_transaction_imei
|
||||||
_data[month][0]["usage"]["invoice"] = num_transaction_invoice
|
_data[month][0]["usage"]["invoice"] = num_transaction_invoice
|
||||||
_data[month][0]["usage"]["total_images"] = num_transaction_invoice + num_transaction_imei
|
_data[month][0]["usage"]["total_images"] = num_transaction_invoice + num_transaction_imei
|
||||||
_data[month][0]["average_accuracy_rate"]["imei"] = _data[month][0]["average_accuracy_rate"]["imei"]()
|
|
||||||
_data[month][0]["average_accuracy_rate"]["purchase_date"] = _data[month][0]["average_accuracy_rate"]["purchase_date"]()
|
|
||||||
_data[month][0]["average_accuracy_rate"]["retailer_name"] = _data[month][0]["average_accuracy_rate"]["retailer_name"]()
|
|
||||||
_data[month][0]["average_accuracy_rate"]["sold_to_party"] = _data[month][0]["average_accuracy_rate"]["sold_to_party"]()
|
|
||||||
for key in _data[month][0]["average_processing_time"].keys():
|
for key in _data[month][0]["average_processing_time"].keys():
|
||||||
_data[month][0]["average_processing_time"][key] = _data[month][0]["average_processing_time"][key]()
|
_data[month][0]["average_processing_time"][key] = _data[month][0]["average_processing_time"][key]()
|
||||||
|
for key in settings.FIELD:
|
||||||
_data[month][0]["feedback_accuracy"]["imei_number"] = _data[month][0]["feedback_accuracy"]["imei_number"]()
|
_data[month][0]["average_accuracy_rate"][key] = _data[month][0]["average_accuracy_rate"][key]()
|
||||||
_data[month][0]["feedback_accuracy"]["purchase_date"] = _data[month][0]["feedback_accuracy"]["purchase_date"]()
|
for accuracy_type in ["feedback_accuracy", key]:
|
||||||
_data[month][0]["feedback_accuracy"]["retailername"] = _data[month][0]["feedback_accuracy"]["retailername"]()
|
_data[month][0][accuracy_type][key] = _data[month][0][accuracy_type][key]()
|
||||||
_data[month][0]["feedback_accuracy"]["sold_to_party"] = _data[month][0]["feedback_accuracy"]["sold_to_party"]()
|
|
||||||
_data[month][0]["reviewed_accuracy"]["imei_number"] = _data[month][0]["reviewed_accuracy"]["imei_number"]()
|
|
||||||
_data[month][0]["reviewed_accuracy"]["purchase_date"] = _data[month][0]["reviewed_accuracy"]["purchase_date"]()
|
|
||||||
_data[month][0]["reviewed_accuracy"]["retailername"] = _data[month][0]["reviewed_accuracy"]["retailername"]()
|
|
||||||
_data[month][0]["reviewed_accuracy"]["sold_to_party"] = _data[month][0]["reviewed_accuracy"]["sold_to_party"]()
|
|
||||||
_data[month][0]["review_progress"] = _data[month][0]["review_progress"].count(1)/(_data[month][0]["review_progress"].count(0)+ _data[month][0]["review_progress"].count(1)) if (_data[month][0]["review_progress"].count(0)+ _data[month][0]["review_progress"].count(1)) >0 else 0
|
_data[month][0]["review_progress"] = _data[month][0]["review_progress"].count(1)/(_data[month][0]["review_progress"].count(0)+ _data[month][0]["review_progress"].count(1)) if (_data[month][0]["review_progress"].count(0)+ _data[month][0]["review_progress"].count(1)) >0 else 0
|
||||||
|
|
||||||
return _data
|
return _data
|
||||||
|
|
||||||
class MonthReportAccumulate:
|
class MonthReportAccumulate:
|
||||||
@ -553,6 +525,7 @@ def first_of_list(the_list):
|
|||||||
def extract_report_detail_list(report_detail_list, lower=False, in_percent=True):
|
def extract_report_detail_list(report_detail_list, lower=False, in_percent=True):
|
||||||
data = []
|
data = []
|
||||||
for report_file in report_detail_list:
|
for report_file in report_detail_list:
|
||||||
|
# FIXME: #79 Fill None with value
|
||||||
data.append({
|
data.append({
|
||||||
"Subs": report_file.subsidiary,
|
"Subs": report_file.subsidiary,
|
||||||
"Request ID": report_file.correspond_request_id,
|
"Request ID": report_file.correspond_request_id,
|
||||||
@ -560,12 +533,19 @@ def extract_report_detail_list(report_detail_list, lower=False, in_percent=True)
|
|||||||
"Image type": report_file.doc_type,
|
"Image type": report_file.doc_type,
|
||||||
"IMEI_user submitted": first_of_list(report_file.feedback_result.get("imei_number", [None])),
|
"IMEI_user submitted": first_of_list(report_file.feedback_result.get("imei_number", [None])),
|
||||||
"IMEI_OCR retrieved": first_of_list(report_file.predict_result.get("imei_number", [None])),
|
"IMEI_OCR retrieved": first_of_list(report_file.predict_result.get("imei_number", [None])),
|
||||||
|
"IMEI Revised": None,
|
||||||
"IMEI1 Accuracy": first_of_list(report_file.feedback_accuracy.get("imei_number", [None])),
|
"IMEI1 Accuracy": first_of_list(report_file.feedback_accuracy.get("imei_number", [None])),
|
||||||
|
"Invoice_Number_User": None,
|
||||||
|
"Invoice_Number_OCR": None,
|
||||||
|
"Invoice_Number Revised": None,
|
||||||
|
"Invoice_Number_Accuracy": None,
|
||||||
"Invoice_Purchase Date_Consumer": report_file.feedback_result.get("purchase_date", None),
|
"Invoice_Purchase Date_Consumer": report_file.feedback_result.get("purchase_date", None),
|
||||||
"Invoice_Purchase Date_OCR": report_file.predict_result.get("purchase_date", []),
|
"Invoice_Purchase Date_OCR": report_file.predict_result.get("purchase_date", []),
|
||||||
|
"Invoice_Purchase Date Revised": None,
|
||||||
"Invoice_Purchase Date Accuracy": first_of_list(report_file.feedback_accuracy.get("purchase_date", [None])),
|
"Invoice_Purchase Date Accuracy": first_of_list(report_file.feedback_accuracy.get("purchase_date", [None])),
|
||||||
"Invoice_Retailer_Consumer": report_file.feedback_result.get("retailername", None),
|
"Invoice_Retailer_Consumer": report_file.feedback_result.get("retailername", None),
|
||||||
"Invoice_Retailer_OCR": report_file.predict_result.get("retailername", None),
|
"Invoice_Retailer_OCR": report_file.predict_result.get("retailername", None),
|
||||||
|
"Invoice_Purchase Date Revised": None,
|
||||||
"Invoice_Retailer Accuracy": first_of_list(report_file.feedback_accuracy.get("retailername", [None])),
|
"Invoice_Retailer Accuracy": first_of_list(report_file.feedback_accuracy.get("retailername", [None])),
|
||||||
"OCR Image Accuracy": report_file.acc,
|
"OCR Image Accuracy": report_file.acc,
|
||||||
"OCR Image Speed (seconds)": report_file.time_cost,
|
"OCR Image Speed (seconds)": report_file.time_cost,
|
||||||
@ -848,6 +828,12 @@ def create_billing_data(subscription_requests):
|
|||||||
return billing_data
|
return billing_data
|
||||||
|
|
||||||
def calculate_a_request(report, request):
|
def calculate_a_request(report, request):
|
||||||
|
def review_status_map(input):
|
||||||
|
review_status = {-1: "Not Required",
|
||||||
|
0: "No",
|
||||||
|
1: "Yes"}
|
||||||
|
return review_status.get(input, "N/A")
|
||||||
|
|
||||||
request_att = {"acc": {"feedback": {"imei_number": [],
|
request_att = {"acc": {"feedback": {"imei_number": [],
|
||||||
"purchase_date": [],
|
"purchase_date": [],
|
||||||
"retailername": [],
|
"retailername": [],
|
||||||
@ -905,8 +891,8 @@ def calculate_a_request(report, request):
|
|||||||
if len(att["normalized_data"]["reviewed"].get("purchase_date", [])) > 0:
|
if len(att["normalized_data"]["reviewed"].get("purchase_date", [])) > 0:
|
||||||
image.predict_result["purchase_date"] = [att["normalized_data"]["reviewed"]["purchase_date"][i][0] for i in range(len(att["normalized_data"]["reviewed"]["purchase_date"]))]
|
image.predict_result["purchase_date"] = [att["normalized_data"]["reviewed"]["purchase_date"][i][0] for i in range(len(att["normalized_data"]["reviewed"]["purchase_date"]))]
|
||||||
image.reviewed_result["purchase_date"] = att["normalized_data"]["reviewed"]["purchase_date"][rv_max_indexes["purchase_date"]][1]
|
image.reviewed_result["purchase_date"] = att["normalized_data"]["reviewed"]["purchase_date"][rv_max_indexes["purchase_date"]][1]
|
||||||
if request.is_reviewed:
|
# if request.is_reviewed:
|
||||||
att["is_reviewed"] = 1
|
# att["is_reviewed"] = 1
|
||||||
request_att["is_reviewed"].append(att["is_reviewed"])
|
request_att["is_reviewed"].append(att["is_reviewed"])
|
||||||
new_report_file = ReportFile(report=report,
|
new_report_file = ReportFile(report=report,
|
||||||
subsidiary=_sub,
|
subsidiary=_sub,
|
||||||
@ -920,7 +906,7 @@ def calculate_a_request(report, request):
|
|||||||
reviewed_accuracy=att["acc"]["reviewed"],
|
reviewed_accuracy=att["acc"]["reviewed"],
|
||||||
acc=att["avg_acc"],
|
acc=att["avg_acc"],
|
||||||
is_bad_image=att["is_bad_image"],
|
is_bad_image=att["is_bad_image"],
|
||||||
is_reviewed= "Yes" if request.is_reviewed else "No",
|
is_reviewed= review_status_map(att["is_reviewed"]),
|
||||||
time_cost=image.processing_time,
|
time_cost=image.processing_time,
|
||||||
bad_image_reason=image.reason,
|
bad_image_reason=image.reason,
|
||||||
counter_measures=image.counter_measures,
|
counter_measures=image.counter_measures,
|
||||||
@ -1014,6 +1000,10 @@ def calculate_subcription_file(subcription_request_file):
|
|||||||
avg_acc = avg_reviewed
|
avg_acc = avg_reviewed
|
||||||
att["is_reviewed"] = 1
|
att["is_reviewed"] = 1
|
||||||
|
|
||||||
|
# Little trick to overcome issue caused by misleading manually review process
|
||||||
|
if subcription_request_file.reason or subcription_request_file.counter_measures:
|
||||||
|
att["is_reviewed"] = 1
|
||||||
|
|
||||||
att["avg_acc"] = avg_acc
|
att["avg_acc"] = avg_acc
|
||||||
if avg_acc < settings.BAD_THRESHOLD:
|
if avg_acc < settings.BAD_THRESHOLD:
|
||||||
att["is_bad_image"] = True
|
att["is_bad_image"] = True
|
||||||
|
Loading…
Reference in New Issue
Block a user