a2fbe7b9 by 周伟奇

fix GCAP

1 parent b8034b9f
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,20 +165,37 @@ class PriorityDocView(GenericView): ...@@ -158,20 +165,37 @@ 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
170 status=DocStatus.INIT.value).values_list('id', flat=True) 187 if len(doc_ids) == 0:
188 doc_ids = AFCDoc.objects.filter(application_id=application_id,
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]
172 enqueue_res = rh.enqueue(task_str_list, is_priority=True) 192 if not task_str_list:
173 self.running_log.info('[priority doc success] [args={0}] [task_str_list={1}] [enqueue_res={2}]'.format( 193 self.running_log.info(
174 args, task_str_list, enqueue_res)) 194 '[priority doc success] [args={0}] [task_str_list={1}]'.format(args, task_str_list))
195 else:
196 enqueue_res = rh.enqueue(task_str_list, is_priority=True)
197 self.running_log.info('[priority doc success] [args={0}] [task_str_list={1}] [enqueue_res={2}]'.format(
198 args, task_str_list, enqueue_res))
175 return response.ok() 199 return response.ok()
176 200
177 201
...@@ -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))\
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!