No Description

contract_mp_views.py 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. # -*- coding: utf-8 -*-
  2. import json
  3. from django.conf import settings
  4. from django_logit import logit
  5. from django_response import response
  6. from TimeConvert import TimeConvert as tc
  7. from account.models import LensmanInfo
  8. from apps.contract.models import LensmanContributionContractInfo
  9. from apps.lensman.activity.models import LensmanContributionActivityIncomeExpensesInfo
  10. from member.models import MemberActivityContributionInfo
  11. from utils.tencentcloud.ess import (create_document, create_flow, create_scheme_url, start_flow,
  12. test_upload_document_files, upload_document_files)
  13. @logit(res=True)
  14. def get_contribtion_contract_status_api(request):
  15. user_id = request.POST.get('user_id', '')
  16. lensman_id = request.POST.get('lensman_id', '')
  17. activity_id = request.POST.get('activity_id', '')
  18. contribtuon_id = request.POST.get('contribtuon_id', '')
  19. try:
  20. contract = LensmanContributionContractInfo.objects.get(user_id=user_id, activity_id=activity_id, contribtuon_id=contribtuon_id)
  21. except LensmanContributionContractInfo.DoesNotExist:
  22. return response(404, 'Contract Not Found', '合同不存在')
  23. return response(200, data={
  24. 'contract_status': contract.contract_status,
  25. })
  26. @logit(res=True)
  27. def get_contribtion_contract_api(request):
  28. user_id = request.POST.get('user_id', '')
  29. lensman_id = request.POST.get('lensman_id', '')
  30. activity_id = request.POST.get('activity_id', '')
  31. contribution_id = request.POST.get('contribution_id', '')
  32. lensman = LensmanInfo.objects.get(lensman_id=lensman_id)
  33. contract, _ = LensmanContributionContractInfo.objects.update_or_create(
  34. user_id=user_id, lensman_id=lensman_id, activity_id=activity_id, contribution_id=contribution_id)
  35. file_ids = upload_contribution_images(contribution_id)
  36. flow_id = create_contribution_contract_flow(lensman)
  37. contract.flow_id = flow_id
  38. contract.save()
  39. document_id, fields = create_contribution_contract_document(lensman, contribution_id, file_ids, flow_id)
  40. contract.contract_content_fields = fields
  41. contract.document_id = document_id
  42. contract.save()
  43. # 发起签署流程
  44. flow_status = start_contribution_contract_flow(flow_id)
  45. scheme_url = get_contribtion_contract_sign_mppath(lensman, flow_id)
  46. return response(200, data={
  47. 'scheme_url': scheme_url
  48. })
  49. def upload_contribution_images(contribution_id):
  50. # 上传MemberActivityContributionInfo图片 https://qian.tencent.com/developers/companyApis/templatesAndFiles/UploadFiles
  51. contribtuon = MemberActivityContributionInfo.objects.get(contribution_id=contribution_id)
  52. # TODO: 从 MemberActivityContributionInfo 生成 files 对象
  53. files = [
  54. {
  55. "FileBody": "文件base64编码,不含逗号前字符,即data:image/png;base64,",
  56. "FileName": "test.png"
  57. }
  58. ]
  59. file_type = 'png'
  60. # upload_files_result = upload_document_files(files, file_type=file_type)
  61. upload_files_result = test_upload_document_files(files, file_type=file_type)
  62. return upload_files_result.FileIds
  63. def create_contribution_contract_flow(lensman):
  64. # 创建签署流程 https://qian.tencent.com/developers/companyApis/startFlows/CreateFlow
  65. # 创建签署流程参数 Operator
  66. FlowName = lensman.identity_card_name + u"的投稿合同" + tc.local_string(format='%Y%m%d')
  67. FlowType = u"活动投稿授权书"
  68. Approvers = [{
  69. "ApproverType": 1,
  70. "Required": True,
  71. "NotifyType": None,
  72. "ApproverMobile": lensman.phone,
  73. "ApproverName": lensman.identity_card_name,
  74. "ApproverIdCardType": "ID_CARD",
  75. "ApproverIdCardNumber": lensman.identity_card_number,
  76. }]
  77. create_flow_result = create_flow(flow_name=FlowName, flow_type=FlowType, approvers=Approvers)
  78. return create_flow_result.FlowId
  79. def create_contribution_contract_document(lensman, contribution_id, file_ids, FlowId):
  80. # 创建电子签文档 https://qian.tencent.com/developers/companyApis/startFlows/CreateDocument
  81. income = LensmanContributionActivityIncomeExpensesInfo.objects.get(contribution_id=contribution_id, lensman_id=lensman.lensman_id)
  82. FormFields = [{
  83. "ComponentId": "ComponentId_0",
  84. "ComponentValue": lensman.identity_card_name
  85. }, {
  86. "ComponentId": "ComponentId_1",
  87. "ComponentValue": lensman.identity_card_number,
  88. }, {
  89. "ComponentId": "ComponentId_2",
  90. "ComponentValue": str(income.amount),
  91. }, {
  92. "ComponentId": "ComponentId_3",
  93. "ComponentValue": "零",
  94. }]
  95. for i, file_id in enumerate(file_ids):
  96. FormFields.append({
  97. "ComponentId": "ComponentId_" + str(37 + i),
  98. "ComponentValue": file_id,
  99. })
  100. create_document_result = create_document(flow_id=FlowId, form_fields=FormFields)
  101. document_id = create_document_result.DocumentId
  102. return document_id, FormFields
  103. def start_contribution_contract_flow(FlowId):
  104. # 发起签署流程 https://qian.tencent.com/developers/companyApis/startFlows/StartFlow
  105. start_flow_result = start_flow(flow_id=FlowId)
  106. return start_flow_result.Status
  107. def get_contribtion_contract_sign_mppath(lensman, FlowId):
  108. # 获取签署链接 https://qian.tencent.com/developers/companyApis/startFlows/CreateSchemeUrl
  109. 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)
  110. return create_scheme_url_result.SchemeUrl
  111. @logit(res=True)
  112. def ess_callback(request):
  113. return response()