fix GCAP
Showing
4 changed files
with
86 additions
and
12 deletions
1 | -r github.txt | 1 | -r github.txt |
2 | 2 | ||
3 | aiohttp==3.6.2 | 3 | aiohttp==3.6.2 |
4 | appdirs==1.4.4 | ||
4 | async-timeout==3.0.1 | 5 | async-timeout==3.0.1 |
5 | attrs==19.3.0 | 6 | attrs==19.3.0 |
6 | certifi==2016.2.28 | 7 | cached-property==1.5.1 |
8 | certifi==2020.6.20 | ||
7 | chardet==3.0.4 | 9 | chardet==3.0.4 |
10 | defusedxml==0.6.0 | ||
8 | Django==2.1 | 11 | Django==2.1 |
9 | djangorestframework==3.9.0 | 12 | djangorestframework==3.9.0 |
10 | djangorestframework-jwt==1.11.0 | 13 | djangorestframework-jwt==1.11.0 |
11 | idna==2.9 | 14 | idna==2.9 |
12 | idna-ssl==1.1.0 | 15 | idna-ssl==1.1.0 |
16 | isodate==0.6.0 | ||
17 | lxml==4.5.1 | ||
13 | marshmallow==3.6.1 | 18 | marshmallow==3.6.1 |
14 | multidict==4.7.6 | 19 | multidict==4.7.6 |
15 | pdfminer3k==1.3.4 | 20 | pdfminer3k==1.3.4 |
... | @@ -20,9 +25,14 @@ PyMuPDF==1.17.0 | ... | @@ -20,9 +25,14 @@ PyMuPDF==1.17.0 |
20 | PyMySQL==0.9.3 | 25 | PyMySQL==0.9.3 |
21 | pytz==2020.1 | 26 | pytz==2020.1 |
22 | redis==3.4.1 | 27 | redis==3.4.1 |
28 | requests==2.24.0 | ||
29 | requests-toolbelt==0.9.1 | ||
23 | six==1.14.0 | 30 | six==1.14.0 |
24 | SQLAlchemy==0.9.10 | 31 | SQLAlchemy==0.9.10 |
25 | typing-extensions==3.7.4.2 | 32 | typing-extensions==3.7.4.2 |
33 | urllib3==1.25.9 | ||
26 | webargs==6.1.0 | 34 | webargs==6.1.0 |
35 | XlsxWriter==1.2.9 | ||
27 | xlwt==1.3.0 | 36 | xlwt==1.3.0 |
28 | yarl==1.4.2 | 37 | yarl==1.4.2 |
38 | zeep==3.4.0 | ... | ... |
... | @@ -71,10 +71,26 @@ class AFCDoc(models.Model): | ... | @@ -71,10 +71,26 @@ class AFCDoc(models.Model): |
71 | db_table = 'afc_doc' | 71 | db_table = 'afc_doc' |
72 | 72 | ||
73 | 73 | ||
74 | class GCAPRecords(models.Model): | ||
75 | id = models.AutoField(primary_key=True, verbose_name="id") | ||
76 | status = models.IntegerField(null=True, verbose_name='状态') | ||
77 | rating = models.IntegerField(null=True, verbose_name='排名') | ||
78 | application_id = models.CharField(max_length=128, verbose_name="申请id") | ||
79 | application_version = models.IntegerField(null=True, verbose_name='申请版本') | ||
80 | intermediate_decision = models.CharField(null=True, max_length=128, verbose_name="中间决策") | ||
81 | submit_datetime = models.DateTimeField(null=True, verbose_name='提交时间') | ||
82 | update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') | ||
83 | create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') | ||
84 | |||
85 | class Meta: | ||
86 | managed = False | ||
87 | situ_db_label = 'afc' | ||
88 | db_table = 'gcap_records' | ||
89 | |||
90 | |||
74 | class PriorityApplication(models.Model): | 91 | class PriorityApplication(models.Model): |
75 | id = models.AutoField(primary_key=True, verbose_name="id") | 92 | id = models.AutoField(primary_key=True, verbose_name="id") |
76 | application_id = models.CharField(max_length=64, verbose_name="申请id") # 联合索引 | 93 | application_id = models.CharField(max_length=64, verbose_name="申请id") # 联合索引 |
77 | business_type = models.CharField(max_length=64, verbose_name="业务类型") # 联合索引 | ||
78 | on_off = models.BooleanField(default=True, verbose_name="是否有效") # 联合索引 | 94 | on_off = models.BooleanField(default=True, verbose_name="是否有效") # 联合索引 |
79 | update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') | 95 | update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') |
80 | create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') | 96 | create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') | ... | ... |
... | @@ -7,3 +7,27 @@ class DocStatus(NamedEnum): | ... | @@ -7,3 +7,27 @@ class DocStatus(NamedEnum): |
7 | PROCESS_FAILED = (2, '识别失败') | 7 | PROCESS_FAILED = (2, '识别失败') |
8 | UPLOAD_FAILED = (3, '同步失败') | 8 | UPLOAD_FAILED = (3, '同步失败') |
9 | COMPLETE = (4, '已完成') | 9 | COMPLETE = (4, '已完成') |
10 | |||
11 | |||
12 | class DocScheme(NamedEnum): | ||
13 | ACCEPTANCE = (0, "Acceptance") | ||
14 | SETTLEMENT = (1, 'Settlement') | ||
15 | CONTRACT_MANAGEMENT = (2, 'Contract Management') | ||
16 | |||
17 | @classmethod | ||
18 | def get_value(cls, verbose_name, default=None, raise_on_missing=False): | ||
19 | val = super().get_value(verbose_name, default=None, raise_on_missing=False) | ||
20 | if val is None: | ||
21 | pass | ||
22 | return val | ||
23 | |||
24 | |||
25 | class BusinessType(NamedEnum): | ||
26 | AFC = (0, "CO00001") | ||
27 | HIL = (1, 'CO00002') | ||
28 | |||
29 | |||
30 | class DataSource(NamedEnum): | ||
31 | POS = (0, "POS") | ||
32 | EAPP = (1, 'EAPP') | ||
33 | ECONTRACT = (2, 'Econtract') | ... | ... |
... | @@ -12,7 +12,7 @@ from common import response | ... | @@ -12,7 +12,7 @@ from common import response |
12 | from common.mixins import GenericView | 12 | from common.mixins import GenericView |
13 | from common.tools.file_tools import file_write | 13 | from common.tools.file_tools import file_write |
14 | from common.redis_cache import redis_handler as rh | 14 | from common.redis_cache import redis_handler as rh |
15 | from .models import UploadDocRecords, DocStatus, HILDoc, AFCDoc, PriorityApplication | 15 | from .models import UploadDocRecords, DocStatus, HILDoc, AFCDoc, PriorityApplication, GCAPRecords |
16 | from .mixins import DocHandler | 16 | from .mixins import DocHandler |
17 | from . import consts | 17 | from . import consts |
18 | 18 | ||
... | @@ -70,10 +70,17 @@ upload_pdf_args = { | ... | @@ -70,10 +70,17 @@ upload_pdf_args = { |
70 | 'pdf_file': fields.Raw(required=True), | 70 | 'pdf_file': fields.Raw(required=True), |
71 | } | 71 | } |
72 | 72 | ||
73 | application_information = { | ||
74 | "SUBMIT_DATETIME": fields.DateTime(required=True), | ||
75 | "STATUS": fields.Int(required=True), | ||
76 | "RATING": fields.Int(required=True), | ||
77 | "APPLICATION_ID": fields.Str(required=True, validate=validate.Length(max=100)), | ||
78 | "APPLICATION_VERSION": fields.Int(required=True), | ||
79 | "INTERMEDIATE_DECISION": fields.Str(required=True, validate=validate.Length(max=100)), | ||
80 | } | ||
73 | 81 | ||
74 | priority_doc_args = { | 82 | priority_doc_args = { |
75 | 'applicationId': fields.Str(required=True, validate=validate.Length(max=64)), | 83 | 'APPLICATION_INFORMATION': fields.Nested(application_information, required=True) |
76 | 'businessType': fields.Str(required=True, validate=validate.OneOf(consts.BUSINESS_TYPE)), | ||
77 | } | 84 | } |
78 | 85 | ||
79 | 86 | ||
... | @@ -158,17 +165,34 @@ class PriorityDocView(GenericView): | ... | @@ -158,17 +165,34 @@ class PriorityDocView(GenericView): |
158 | # 优先级订单接口 | 165 | # 优先级订单接口 |
159 | @use_args(priority_doc_args, location='data') | 166 | @use_args(priority_doc_args, location='data') |
160 | def post(self, request, args): | 167 | def post(self, request, args): |
161 | application_id = args.get('applicationId') | 168 | application_info = args.get('APPLICATION_INFORMATION') |
162 | business_type = args.get('businessType') | 169 | application_id = application_info.get('APPLICATION_ID') |
170 | submit_datetime = application_info.get('SUBMIT_DATETIME') | ||
171 | submit_datetime = timezone.make_naive(submit_datetime, timezone.get_current_timezone()) | ||
172 | print(submit_datetime) | ||
173 | GCAPRecords.objects.create( | ||
174 | status=application_info.get('STATUS'), | ||
175 | rating=application_info.get('RATING'), | ||
176 | application_id=application_id, | ||
177 | application_version=application_info.get('APPLICATION_VERSION'), | ||
178 | intermediate_decision=application_info.get('INTERMEDIATE_DECISION'), | ||
179 | submit_datetime=submit_datetime, | ||
180 | ) | ||
163 | _, created = PriorityApplication.objects.update_or_create(application_id=application_id, | 181 | _, created = PriorityApplication.objects.update_or_create(application_id=application_id, |
164 | business_type=business_type, | ||
165 | defaults={'on_off': True}) | 182 | defaults={'on_off': True}) |
166 | if created: | 183 | if created: |
167 | doc_class, prefix = (HILDoc, consts.HIL_PREFIX) if business_type == consts.HIL_PREFIX \ | 184 | doc_ids = HILDoc.objects.filter(application_id=application_id, |
168 | else (AFCDoc, consts.AFC_PREFIX) | 185 | status=DocStatus.INIT.value).values_list('id', flat=True) |
169 | doc_ids = doc_class.objects.filter(application_id=application_id, | 186 | prefix = consts.HIL_PREFIX |
187 | if len(doc_ids) == 0: | ||
188 | doc_ids = AFCDoc.objects.filter(application_id=application_id, | ||
170 | status=DocStatus.INIT.value).values_list('id', flat=True) | 189 | status=DocStatus.INIT.value).values_list('id', flat=True) |
190 | prefix = consts.AFC_PREFIX | ||
171 | task_str_list = ['{0}_{1}'.format(prefix, doc_id) for doc_id in doc_ids] | 191 | task_str_list = ['{0}_{1}'.format(prefix, doc_id) for doc_id in doc_ids] |
192 | if not task_str_list: | ||
193 | self.running_log.info( | ||
194 | '[priority doc success] [args={0}] [task_str_list={1}]'.format(args, task_str_list)) | ||
195 | else: | ||
172 | enqueue_res = rh.enqueue(task_str_list, is_priority=True) | 196 | enqueue_res = rh.enqueue(task_str_list, is_priority=True) |
173 | self.running_log.info('[priority doc success] [args={0}] [task_str_list={1}] [enqueue_res={2}]'.format( | 197 | self.running_log.info('[priority doc success] [args={0}] [task_str_list={1}] [enqueue_res={2}]'.format( |
174 | args, task_str_list, enqueue_res)) | 198 | args, task_str_list, enqueue_res)) |
... | @@ -192,7 +216,7 @@ class DocView(GenericView, DocHandler): | ... | @@ -192,7 +216,7 @@ class DocView(GenericView, DocHandler): |
192 | create_time_end = args.get('create_time_end') | 216 | create_time_end = args.get('create_time_end') |
193 | 217 | ||
194 | status_query = Q(status=status) if status is not None else Q() | 218 | status_query = Q(status=status) if status is not None else Q() |
195 | application_id_query = Q(application_id=application_id) if application_id is not None else Q() | 219 | application_id_query = Q(application_id__contains=application_id) if application_id is not None else Q() |
196 | data_source_query = Q(data_source=data_source) if data_source is not None else Q() | 220 | data_source_query = Q(data_source=data_source) if data_source is not None else Q() |
197 | upload_finish_time_query = Q(upload_finish_time__gte=upload_time_start, | 221 | upload_finish_time_query = Q(upload_finish_time__gte=upload_time_start, |
198 | upload_finish_time__lt=upload_time_end + datetime.timedelta(days=1))\ | 222 | upload_finish_time__lt=upload_time_end + datetime.timedelta(days=1))\ | ... | ... |
-
Please register or sign in to post a comment