d69bd3a3 by 王聪

Merge remote-tracking branch 'origin/feature/fsm-full' into feature/uat-tmp

# Conflicts:
#	src/apps/doc/models.py
2 parents c19efa71 ba27a782
......@@ -2467,3 +2467,26 @@ MPOS_MAP = {
}
FOLDER_WSC_CLASSIFY = 199
FSM_BEFORE_ACTIVITED_STATUS = {
"APSVD": "Saved",
"APEAE": "E-app Editing",
"APADA": "Awaiting Dealer Action",
"APAPR": "Acceptance Processing",
"APPSB": "Pre-submit Processed",
"APSBT": "Submitted",
"APAPP": "Approved",
"APHOC": "Held Offer-Docs",
"APHOD": "Held Offer-Data",
"APINI": "Initiated",
"APSEP": "Settlement Processing"
}
FSM_ACTIVITED_STATUS = {
"APADF": "Activated-Document Follow up",
"APASC": "Activated-Awaiting Settlement Check",
"APIPN": "Activated-Invoice Passed-Non PT",
"APIPP": "Activated-Invoice Passed-PT Doc Required",
"APARD": "Activated-Review done",
}
\ No newline at end of file
......
......@@ -329,9 +329,11 @@ class AFCOCRResult(models.Model):
hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2")
hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3")
qrs_ocr = models.TextField(null=True, verbose_name="AFC合同确认书")
fsm_wep_ocr = models.TextField(null=True, verbose_name="FSM-WEP")
fsm_msi_ocr = models.TextField(null=True, verbose_name="FSM-MSI")
fsm_sc_ocr = models.TextField(null=True, verbose_name="FSM-SC")
fsm_wep_ocr = models.TextField(null=True, verbose_name="延长保修合同")
fsm_msi_ocr = models.TextField(null=True, verbose_name="长悦保养合同")
fsm_sc_ocr = models.TextField(null=True, verbose_name="汽车销售合同")
fsm_activited = models.IntegerField(null=False, default=0, verbose_name="fsm激活状态 1:激活")
update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......@@ -368,9 +370,11 @@ class HILOCRResult(models.Model):
hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2")
hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3")
qrs_ocr = models.TextField(null=True, verbose_name="AFC合同确认书")
fsm_wep_ocr = models.TextField(null=True, verbose_name="FSM-WEP")
fsm_msi_ocr = models.TextField(null=True, verbose_name="FSM-MSI")
fsm_sc_ocr = models.TextField(null=True, verbose_name="FSM-SC")
fsm_wep_ocr = models.TextField(null=True, verbose_name="延长保修合同")
fsm_msi_ocr = models.TextField(null=True, verbose_name="长悦保养合同")
fsm_sc_ocr = models.TextField(null=True, verbose_name="汽车销售合同")
fsm_activited = models.IntegerField(null=False, default=0, verbose_name="fsm激活状态 1:激活")
update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......@@ -406,9 +410,11 @@ class AFCSEOCRResult(models.Model):
hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2")
hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3")
qrs_ocr = models.TextField(null=True, verbose_name="AFC合同确认书")
fsm_wep_ocr = models.TextField(null=True, verbose_name="FSM-WEP")
fsm_msi_ocr = models.TextField(null=True, verbose_name="FSM-MSI")
fsm_sc_ocr = models.TextField(null=True, verbose_name="FSM-SC")
fsm_wep_ocr = models.TextField(null=True, verbose_name="延长保修合同")
fsm_msi_ocr = models.TextField(null=True, verbose_name="长悦保养合同")
fsm_sc_ocr = models.TextField(null=True, verbose_name="汽车销售合同")
fsm_activited = models.IntegerField(null=False, default=0, verbose_name="fsm激活状态 1:激活")
update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......@@ -445,9 +451,10 @@ class HILSEOCRResult(models.Model):
hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2")
hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3")
qrs_ocr = models.TextField(null=True, verbose_name="AFC合同确认书")
fsm_wep_ocr = models.TextField(null=True, verbose_name="FSM-WEP")
fsm_msi_ocr = models.TextField(null=True, verbose_name="FSM-MSI")
fsm_sc_ocr = models.TextField(null=True, verbose_name="FSM-SC")
fsm_wep_ocr = models.TextField(null=True, verbose_name="延长保修合同")
fsm_msi_ocr = models.TextField(null=True, verbose_name="长悦保养合同")
fsm_sc_ocr = models.TextField(null=True, verbose_name="汽车销售合同")
fsm_activited = models.IntegerField(null=False, default=0, verbose_name="fsm激活状态 1:激活")
update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......@@ -1054,3 +1061,17 @@ class AFCCompareReportNew(models.Model):
managed = False
db_table = 'afc_compare_report_new'
situ_db_label = 'afc'
class NscInvoice(models.Model):
id = models.AutoField(primary_key=True, verbose_name="id") # 主键
vin = models.CharField(max_length=64, verbose_name="车架号") # 索引
content = models.TextField(null=True, verbose_name="nsc发票信息")
create_time = models.DateTimeField(verbose_name='创建时间')
class Meta:
managed = False
db_table = 'nsc_invoice'
situ_db_label = 'hil'
......
......@@ -48,12 +48,16 @@ from .models import (
MposReport,
GenericOCRReport,
InterfaceReport,
HILOCRResult,
HILSEOCRResult,
AFCOCRResult,
AFCSEOCRResult
)
from .named_enum import ErrorType, AutoResult, WholeResult, RPAResult, SystemName
from .named_enum import ErrorType, AutoResult, WholeResult, RPAResult, SystemName, RequestTeam
from .mixins import DocHandler, MPOSHandler, PreSEHandler
from . import consts
from apps.account.authentication import OAuth2AuthenticationWithUser
from celery_compare.tasks import compare
from celery_compare.tasks import compare, fsm_compare
import time
class CustomDate(fields.Date):
......@@ -563,6 +567,8 @@ class UploadDocView(GenericView, DocHandler):
document = args.get('document')
business_type = document.get('businessType')
application_id = application_data.get('applicationId')
# 包含FSM 激活状态
application_status = application_data.get('applicationStatus', '')
document_scheme = document.get('documentScheme')
data_source = document.get('dataSource')
document_name = document.get('documentName', '')
......@@ -570,7 +576,25 @@ class UploadDocView(GenericView, DocHandler):
data_source = self.fix_data_source(data_source)
document_scheme = self.fix_scheme(document_scheme)
# fsm激活状态, 更新ocr_result 表fsm状态
if consts.FSM_ACTIVITED_STATUS.get(application_status):
ocr_result_obj = None
if business_type == consts.HIL_PREFIX:
if document_scheme == RequestTeam.ACCEPTANCE[1]:
ocr_result_obj = HILOCRResult.objects.filter(application_id=application_id).first()
elif document_scheme == RequestTeam.SETTLEMENT[1]:
ocr_result_obj = HILSEOCRResult.objects.filter(application_id=application_id).first()
elif business_type == consts.AFC_PREFIX:
if document_scheme == RequestTeam.ACCEPTANCE[1]:
ocr_result_obj = AFCOCRResult.objects.filter(application_id=application_id).first()
elif document_scheme == RequestTeam.SETTLEMENT[1]:
ocr_result_obj = AFCSEOCRResult.objects.filter(application_id=application_id).first()
if ocr_result_obj:
ocr_result_obj.fsmActivited = 1
ocr_result_obj.save()
if data_source == consts.DATA_SOURCE_LIST[1]:
if document_name.endswith('-证书.pdf') or document_name.endswith('-证书'):
self.running_log.info('[doc upload success] [eapp license skip] [args={0}]'.format(args))
......@@ -1372,8 +1396,16 @@ class SECMSView(GenericView):
content=content_str,
)
# 触发比对
compare.apply_async((application_id, business_type, None, None, False, True),
# 检查是否fsm流程(SE)
fsm_contract = cms_info.get('fsmContract', False)
fsm_best_price = cms_info.get('fsmBestPrice', False)
if fsm_contract:
fsm_compare.apply_async((application_id, business_type, None, None, False, True),
queue='queue_compare')
else:
# 触发比对
compare.apply_async((application_id, business_type, None, None, False, True),
queue='queue_compare')
try:
......
......@@ -7,6 +7,9 @@ import traceback
import numpy as np
from datetime import datetime, timedelta
from collections import OrderedDict
import requests
from . import app
from settings import conf
from apps.doc.models import (
......@@ -3266,6 +3269,29 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
@app.task
def fsm_compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True, is_cms=False):
compare_log.info('{0} [receive fsm task] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] [is_ca={5}] '
'[is_cms={6}]'.format(log_base, application_entity, application_id, uniq_seq, ocr_res_id,
is_ca, is_cms))
# 调用java fsm 比对流程接口(http)
# 调用Java fsm 比对流程接口, fsm 是se流程, ca可以暂时忽略
url = conf.FSM_URL
body = {
'applicationId': application_id,
'businessType': application_entity,
'ocrResId': ocr_res_id,
'isCa': is_ca,
'isCms': is_cms
}
try:
resp = requests.post(url, data=body)
compare_log.info(resp.text)
except Exception as e:
compare_log.error("fsm full request to java error, url:{0}, param:{1}, errorMsg:{2}".format(
url, json.dumps(body), traceback.format_exc()))
@app.task
def compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True, is_cms=False):
# POS: application_id, application_entity, uniq_seq, None
# OCR: application_id, business_type(application_entity), None, ocr_res_id
......
......@@ -8,6 +8,9 @@ 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
params = {
'invoiceCode': fields.Str(required=True, validate=validate.Length(max=128)),
......@@ -29,7 +32,7 @@ input_args = {
}
# poss 接口接收NSC 发票信息
# pos 接口接收NSC 发票信息
class NSCInvoiceView(GenericView):
permission_classes = [IsAuthenticated]
authentication_classes = [OAuth2AuthenticationWithUser]
......@@ -50,6 +53,7 @@ class NSCInvoiceView(GenericView):
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())
return response.ok()
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!