| @@ -13,7 +13,24 @@ from utils.tencentcloud.ess import (create_document, create_flow, create_scheme_ | ||
| 13 | 13 | test_upload_document_files, upload_document_files) | 
| 14 | 14 |  | 
| 15 | 15 |  | 
| 16 | -# @logit(res=True) | |
| 16 | +@logit(res=True) | |
| 17 | +def get_contribtion_contract_status_api(request): | |
| 18 | +    user_id = request.POST.get('user_id', '') | |
| 19 | +    lensman_id = request.POST.get('lensman_id', '') | |
| 20 | +    activity_id = request.POST.get('activity_id', '') | |
| 21 | +    contribtuon_id = request.POST.get('contribtuon_id', '') | |
| 22 | + | |
| 23 | + try: | |
| 24 | + contract = LensmanContributionContractInfo.objects.get(user_id=user_id, activity_id=activity_id, contribtuon_id=contribtuon_id) | |
| 25 | + except LensmanContributionContractInfo.DoesNotExist: | |
| 26 | + return response(404, 'Contract Not Found', '合同不存在') | |
| 27 | + | |
| 28 | +    return response(200, data={ | |
| 29 | + 'contract_status': contract.contract_status, | |
| 30 | + }) | |
| 31 | + | |
| 32 | + | |
| 33 | +@logit(res=True) | |
| 17 | 34 | def get_contribtion_contract_api(request): | 
| 18 | 35 |      user_id = request.POST.get('user_id', '') | 
| 19 | 36 |      lensman_id = request.POST.get('lensman_id', '') | 
| @@ -42,7 +59,6 @@ def get_contribtion_contract_api(request): | ||
| 42 | 59 | scheme_url = get_contribtion_contract_sign_mppath(lensman, flow_id) | 
| 43 | 60 |  | 
| 44 | 61 |      return response(200, data={ | 
| 45 | - 'contract': contract.mpdata, | |
| 46 | 62 | 'scheme_url': scheme_url | 
| 47 | 63 | }) | 
| 48 | 64 |  | 
| @@ -62,9 +78,8 @@ def upload_contribution_images(contribution_id): | ||
| 62 | 78 | file_type = 'png' | 
| 63 | 79 | # upload_files_result = upload_document_files(files, file_type=file_type) | 
| 64 | 80 | upload_files_result = test_upload_document_files(files, file_type=file_type) | 
| 65 | - file_ids = upload_files_result.FileIds | |
| 66 | 81 |  | 
| 67 | - return file_ids | |
| 82 | + return upload_files_result.FileIds | |
| 68 | 83 |  | 
| 69 | 84 |  | 
| 70 | 85 | def create_contribution_contract_flow(lensman): | 
| @@ -83,9 +98,8 @@ def create_contribution_contract_flow(lensman): | ||
| 83 | 98 | "ApproverIdCardNumber": lensman.identity_card_number, | 
| 84 | 99 | }] | 
| 85 | 100 | create_flow_result = create_flow(flow_name=FlowName, flow_type=FlowType, approvers=Approvers) | 
| 86 | - flow_id = create_flow_result.FlowId | |
| 87 | 101 |  | 
| 88 | - return flow_id | |
| 102 | + return create_flow_result.FlowId | |
| 89 | 103 |  | 
| 90 | 104 |  | 
| 91 | 105 | def create_contribution_contract_document(lensman, contribution_id, file_ids, FlowId): | 
| @@ -122,18 +136,16 @@ def start_contribution_contract_flow(FlowId): | ||
| 122 | 136 | # 发起签署流程 https://qian.tencent.com/developers/companyApis/startFlows/StartFlow | 
| 123 | 137 |  | 
| 124 | 138 | start_flow_result = start_flow(flow_id=FlowId) | 
| 125 | - flow_status = start_flow_result.Status | |
| 126 | 139 |  | 
| 127 | - return flow_status | |
| 140 | + return start_flow_result.Status | |
| 128 | 141 |  | 
| 129 | 142 |  | 
| 130 | 143 | def get_contribtion_contract_sign_mppath(lensman, FlowId): | 
| 131 | 144 | # 获取签署链接 https://qian.tencent.com/developers/companyApis/startFlows/CreateSchemeUrl | 
| 132 | 145 |  | 
| 133 | 146 | create_scheme_url_result = create_scheme_url(flow_id=FlowId, name=lensman.identity_card_name, mobile=lensman.phone, card_type='ID_CARD', card_number=lensman.identity_card_number) | 
| 134 | - scheme_url = create_scheme_url_result.SchemeUrl | |
| 135 | 147 |  | 
| 136 | - return scheme_url | |
| 148 | + return create_scheme_url_result.SchemeUrl | |
| 137 | 149 |  | 
| 138 | 150 |  | 
| 139 | 151 | @logit(res=True) | 
| @@ -5,6 +5,8 @@ from api.lensman import contract_admin_views, contract_mp_views, activity_admin_ | ||
| 5 | 5 |  | 
| 6 | 6 | urlpatterns = [ | 
| 7 | 7 | url(r'^mp/lensman/contribution/contract/get$', contract_mp_views.get_contribtion_contract_api, name='get_contribtion_contract_api'), | 
| 8 | + url(r'^mp/lensman/contribution/contract/status/get$', contract_mp_views.get_contribtion_contract_status_api, name='get_contribtion_contract_status_api'), | |
| 9 | + | |
| 8 | 10 | url(r'^mp/ess/callback$', contract_mp_views.ess_callback, name='ess_callback'), | 
| 9 | 11 | ] | 
| 10 | 12 |  | 
| @@ -0,0 +1,43 @@ | ||
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | + | |
| 3 | +# Generated by Django 3.2.8 on 2024-08-14 10:21 | |
| 4 | + | |
| 5 | +from django.db import migrations, models | |
| 6 | + | |
| 7 | + | |
| 8 | +class Migration(migrations.Migration): | |
| 9 | + | |
| 10 | + dependencies = [ | |
| 11 | +        ('contract', '0001_initial'), | |
| 12 | + ] | |
| 13 | + | |
| 14 | + operations = [ | |
| 15 | + migrations.RemoveField( | |
| 16 | + model_name='lensmancontributioncontractinfo', | |
| 17 | + name='approve_status', | |
| 18 | + ), | |
| 19 | + migrations.RemoveField( | |
| 20 | + model_name='lensmancontributioncontractinfo', | |
| 21 | + name='contract_status', | |
| 22 | + ), | |
| 23 | + migrations.AddField( | |
| 24 | + model_name='lensmancontributioncontractinfo', | |
| 25 | + name='tencent_approve_status', | |
| 26 | + field=models.IntegerField(choices=[(2, '待签署'), (7, '待签署'), (3, '已签署'), (4, '拒绝'), (5, '过期没人处理'), (6, '流程已撤回'), (8, '合同待填写'), (9, '流程已终止'), (10, '填写完成'), (15, '解除协议(已解除)'), (15, '已转他人处理')], db_index=True, default=-1, help_text='腾讯电子签签署人签署状态', verbose_name='tencent_approve_status'), | |
| 27 | + ), | |
| 28 | + migrations.AddField( | |
| 29 | + model_name='lensmancontributioncontractinfo', | |
| 30 | + name='tencent_contract_status', | |
| 31 | + field=models.IntegerField(choices=[(1, '合同创建'), (2, '合同签署中'), (3, '合同拒签'), (4, '合同签署完成'), (5, '合同流签(合同过期)'), (6, '合同撤回'), (8, '合同待填写'), (21, '解除协议(已解除)'), (16, '合同已失效')], db_index=True, default=-1, help_text='腾讯电子签合同签署状态', verbose_name='tencent_contract_status'), | |
| 32 | + ), | |
| 33 | + migrations.AlterField( | |
| 34 | + model_name='lensmancontributioncontractinfo', | |
| 35 | + name='document_id', | |
| 36 | + field=models.CharField(blank=True, help_text='腾讯电子签文档ID', max_length=128, null=True, verbose_name='document_id'), | |
| 37 | + ), | |
| 38 | + migrations.AlterField( | |
| 39 | + model_name='lensmancontributioncontractinfo', | |
| 40 | + name='flow_id', | |
| 41 | + field=models.CharField(blank=True, help_text='腾讯电子签流程ID', max_length=128, null=True, verbose_name='flow_id'), | |
| 42 | + ), | |
| 43 | + ] | 
| @@ -52,12 +52,12 @@ class LensmanContributionContractInfo(BaseModelMixin): | ||
| 52 | 52 | contract_file = models.FileField(_(u'contract_file'), upload_to=upload_path, blank=True, null=True, help_text=u'图片') | 
| 53 | 53 |  | 
| 54 | 54 | # 电子签参数 | 
| 55 | - flow_id = models.CharField(_(u'flow_id'), max_length=128, blank=True, null=True, help_text=u'电子签流程ID') | |
| 55 | + flow_id = models.CharField(_(u'flow_id'), max_length=128, blank=True, null=True, help_text=u'腾讯电子签流程ID') | |
| 56 | 56 | # 后续需用同样的FlowId再次调用发起签署流程,合同才能进入签署环节 | 
| 57 | - document_id = models.CharField(_(u'document_id'), max_length=128, blank=True, null=True, help_text=u'电子签文档ID') | |
| 57 | + document_id = models.CharField(_(u'document_id'), max_length=128, blank=True, null=True, help_text=u'腾讯电子签文档ID') | |
| 58 | 58 |  | 
| 59 | - contract_status = models.IntegerField(_(u'contract_status'), choices=CONTRACT_STATUS_TUPLE, default=1, help_text=u'合同签署状态', db_index=True) | |
| 60 | - approve_status = models.IntegerField(_(u'approve_status'), choices=APPROVE_STATUS_TYPE, default=2, help_text=u'签署人签署状态', db_index=True) | |
| 59 | + tencent_contract_status = models.IntegerField(_(u'tencent_contract_status'), choices=CONTRACT_STATUS_TUPLE, default=-1, help_text=u'腾讯电子签合同签署状态', db_index=True) | |
| 60 | + tencent_approve_status = models.IntegerField(_(u'tencent_approve_status'), choices=APPROVE_STATUS_TYPE, default=-1, help_text=u'腾讯电子签签署人签署状态', db_index=True) | |
| 61 | 61 |  | 
| 62 | 62 | class Meta: | 
| 63 | 63 | verbose_name = _(u'摄影师投稿合同信息') | 
| @@ -69,7 +69,13 @@ class LensmanContributionContractInfo(BaseModelMixin): | ||
| 69 | 69 | @property | 
| 70 | 70 | def contract_file_url(self): | 
| 71 | 71 | return qiniu_file_url(self.contract_file.name, bucket='tamron') | 
| 72 | - | |
| 72 | + | |
| 73 | + @property | |
| 74 | + def contract_status(self): | |
| 75 | + if(self.tencent_approve_status == 3 and self.tencent_contract_status == 4): | |
| 76 | + return 1 | |
| 77 | + else: | |
| 78 | + return 0 | |
| 73 | 79 | @property | 
| 74 | 80 | def data(self): | 
| 75 | 81 |          return { | 
| @@ -79,6 +85,7 @@ class LensmanContributionContractInfo(BaseModelMixin): | ||
| 79 | 85 | 'contribution_id': self.contribution_id, | 
| 80 | 86 | 'contract_content_fields': json.loads(self.contract_content_fields) if self.contract_content_fields else '', | 
| 81 | 87 | 'contract_file_url': self.contract_file_url, | 
| 88 | + 'contract_status': self.contract_status, | |
| 82 | 89 | 'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M:%S'), | 
| 83 | 90 | 'updated_at': tc.local_string(utc_dt=self.updated_at, format='%Y-%m-%d %H:%M:%S') | 
| 84 | 91 | } |