from common.mixins import GenericView from webargs.djangoparser import use_args, parser from webargs import fields, validate from apps.doc.views import CustomDecimal, CustomDate from common import response from apps.doc.mixins import PosHandler from common.tools.comparison import cp from common.mixins import LoggerMixin from rest_framework.permissions import IsAuthenticated from apps.account.authentication import OAuth2AuthenticationWithUser from apps.doc.models import NscInvoice import json from datetime import datetime import traceback params = { 'invoiceCode': fields.Str(required=True, validate=validate.Length(max=128)), 'invoiceNumber': fields.Str(required=True, validate=validate.Length(max=64)), 'issueDate': CustomDate(required=True), 'buyerName': fields.Str(required=True, validate=validate.Length(max=64)), "buyerId": fields.Str(required=True, validate=validate.Length(max=64)), 'vin': fields.Str(required=True, validate=validate.Length(max=128)), 'dealer': fields.Str(required=False, validate=validate.Length(max=64)), 'priceWithVat': CustomDecimal(required=True), 'priceNoVat': CustomDecimal(required=True), 'priceInCapitals': fields.Str(required=False), 'vat': CustomDecimal(required=True), 'vatRate': CustomDecimal(required=False), } input_args = { 'content': fields.Nested(params, required=True) } # pos 接口接收NSC 发票信息 class NSCInvoiceView(GenericView): permission_classes = [IsAuthenticated] authentication_classes = [OAuth2AuthenticationWithUser] @use_args(input_args, location='data') def post(self, request, args): # interface_report mpos to ocr try: content = args.get('content', {}) invoice_code = content.get('invoiceCode', '') invoice_number = content.get('invoiceNumber', '') issue_date = content.get('issueDate', None) buyer_name = content.get('buyerName', '') buyer_id = content.get('buyerId', 0) vin = content.get('vin', '') dealer = content.get('dealer', '') price_with_vat = content.get('priceWithVat', 0.0) price_no_vat = content.get('priceNoVat', 0.0) price_in_capitals = content.get('priceInCapitals', '') vat = content.get('vat', 0.0) vat_rate = content.get('vatRate', 0.0) NscInvoice.objects.create(vin=vin, content=json.dumps(content), create_time=datetime.now()) except Exception as e: LoggerMixin.running_log.info('[NSCInvoice save failed] [error={0}]'.format(traceback.format_exc())) return response.ok() file_param = { 'documentType': fields.Str(required=True, validate=validate.Length(max=20)), 'fileBase64': fields.Str(required=True), } de_mortgage_args = { 'customerName': fields.Str(required=True, validate=validate.Length(max=64)), 'applicationName': fields.Str(required=True, validate=validate.Length(max=64)), 'deMortgageDate': fields.Str(required=True), 'files': fields.List(fields.Nested(file_param)) } de_mortgage_comments = { 'customerName': '机动车所有人识别不一致', 'applicationName': '抵押权人姓名/名称识别不一致', 'deMortgageDate': '解除抵押日期不一致' } # 解除抵押识别处理 class DeMortgageView(GenericView): permission_classes = [IsAuthenticated] authentication_classes = [OAuth2AuthenticationWithUser] @use_args(de_mortgage_args, location='data') def post(self, request, args): # interface_report mpos to ocr files = args.get('files', []) customer_name = args.get('customerName', '') application_name = args.get('applicationName', '') de_mortgage_date = args.get('deMortgageDate') fields_input = { 'customerName': customer_name, 'applicationName': application_name, 'deMortgageDate': de_mortgage_date } de_mortgage_info = {'customer_name':'','applicationName':'','deMortgageDate':''} # 绿本必须分开ocr for file_obj in files: info = PosHandler.de_mortgage_ocr_process1(file_obj) if info.get('customerName') is not '': de_mortgage_info['customerName'] = info.get('customerName') if info.get('applicationName') is not '': de_mortgage_info['applicationName'] = info.get('applicationName') if info.get('deMortgageDate') is not '': de_mortgage_info['deMortgageDate'] = info.get('deMortgageDate') #de_mortgage_info.update(info) request_pass = True fields_result = [] for field_name, input_val in fields_input.items(): field_result = { "name": field_name, "input": input_val, "ocr": de_mortgage_info.get(field_name, ''), "field_is_pass": False, "comments": '' } result, _ = cp.common_compare(field_result['input'], field_result['ocr'], None) LoggerMixin.running_log.info( "[DeMortgageView common_compare] input: %s, ocr: %s, result:%s ", field_result['input'], field_result['ocr'], result) if result == cp.RESULT_Y: field_result['field_is_pass'] = True else: request_pass = False field_result['comments'] = de_mortgage_comments.get(field_name, '') fields_result.append(field_result) result = { "is_pass": request_pass, "fields": fields_result } return response.ok(data=result) class DeMortgageView1(GenericView): permission_classes = [IsAuthenticated] authentication_classes = [OAuth2AuthenticationWithUser] @use_args(de_mortgage_args, location='data') def post(self, request, args): # interface_report mpos to ocr files = args.get('files', []) customer_name = args.get('customerName', '') application_name = args.get('applicationName', '') de_mortgage_date = args.get('deMortgageDate') return response.ok(data=args)