|
# -*- coding: utf-8 -*-
from django.conf import settings
from django_logit import logit
from django_response import response
from TimeConvert import TimeConvert as tc
from account.models import LensmanInfo
from apps.contract.models import LensmanContributionContractInfo
from apps.lensman.activity.models import LensmanContributionActivityIncomeExpensesInfo
from member.models import MemberActivityContributionInfo
from utils.tencentcloud.ess import (create_document, create_flow, create_scheme_url, start_flow,
test_upload_document_files, upload_document_files)
# @logit(res=True)
def get_contribtion_contract_api(request):
user_id = request.POST.get('user_id', '')
lensman_id = request.POST.get('lensman_id', '')
activity_id = request.POST.get('activity_id', '')
contribution_id = request.POST.get('contribution_id', '')
lensman = LensmanInfo.objects.get(lensman_id=lensman_id)
contract, _ = LensmanContributionContractInfo.objects.update_or_create(
user_id=user_id, lensman_id=lensman_id, activity_id=activity_id, contribution_id=contribution_id)
file_ids = upload_contribution_images(contribution_id)
flow_id = create_contribution_contract_flow(lensman)
contract.flow_id = flow_id
contract.save()
document_id, fields = create_contribution_contract_document(lensman, contribution_id, file_ids, flow_id)
contract.contract_content_fields = fields
contract.document_id = document_id
contract.save()
# 发起签署流程
flow_status = start_contribution_contract_flow(flow_id)
scheme_url = get_contribtion_contract_sign_mppath(lensman, flow_id)
return response(200, data={
'contract': contract.mpdata,
'scheme_url': scheme_url
})
def upload_contribution_images(contribution_id):
# 上传MemberActivityContributionInfo图片 https://qian.tencent.com/developers/companyApis/templatesAndFiles/UploadFiles
contribtuon = MemberActivityContributionInfo.objects.get(contribution_id=contribution_id)
# TODO: 从 MemberActivityContributionInfo 生成 files 对象
files = [
{
"FileBody": "文件base64编码,不含逗号前字符,即data:image/png;base64,",
"FileName": "test.png"
}
]
file_type = 'png'
# upload_files_result = upload_document_files(files, file_type=file_type)
upload_files_result = test_upload_document_files(files, file_type=file_type)
file_ids = upload_files_result.FileIds
return file_ids
def create_contribution_contract_flow(lensman):
# 创建签署流程 https://qian.tencent.com/developers/companyApis/startFlows/CreateFlow
# 创建签署流程参数 Operator
FlowName = lensman.identity_card_name + u"的投稿合同" + tc.local_string(format='%Y%m%d')
FlowType = u"活动投稿授权书"
Approvers = [{
"ApproverType": 1,
"Required": True,
"NotifyType": None,
"ApproverMobile": lensman.phone,
"ApproverName": lensman.identity_card_name,
"ApproverIdCardType": "ID_CARD",
"ApproverIdCardNumber": lensman.identity_card_number,
}]
create_flow_result = create_flow(flow_name=FlowName, flow_type=FlowType, approvers=Approvers)
flow_id = create_flow_result.FlowId
return flow_id
def create_contribution_contract_document(lensman, contribution_id, file_ids, FlowId):
# 创建电子签文档 https://qian.tencent.com/developers/companyApis/startFlows/CreateDocument
income = LensmanContributionActivityIncomeExpensesInfo.objects.get(contribution_id=contribution_id, lensman_id=lensman.lensman_id)
FormFields = [{
"ComponentId": "ComponentId_0",
"ComponentValue": lensman.identity_card_name
}, {
"ComponentId": "ComponentId_1",
"ComponentValue": lensman.identity_card_number,
}, {
"ComponentId": "ComponentId_2",
"ComponentValue": str(income.amount),
}, {
"ComponentId": "ComponentId_3",
"ComponentValue": "零",
}]
for i, file_id in enumerate(file_ids):
FormFields.append({
"ComponentId": "ComponentId_" + str(37 + i),
"ComponentValue": file_id,
})
create_document_result = create_document(flow_id=FlowId, form_fields=FormFields)
document_id = create_document_result.DocumentId
return document_id, FormFields
def start_contribution_contract_flow(FlowId):
# 发起签署流程 https://qian.tencent.com/developers/companyApis/startFlows/StartFlow
start_flow_result = start_flow(flow_id=FlowId)
flow_status = start_flow_result.Status
return flow_status
def get_contribtion_contract_sign_mppath(lensman, FlowId):
# 获取签署链接 https://qian.tencent.com/developers/companyApis/startFlows/CreateSchemeUrl
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)
scheme_url = create_scheme_url_result.SchemeUrl
return scheme_url
@logit(res=True)
def ess_callback(request):
return response()
|