WechatComplaintService.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import requests
  2. from django.core.paginator import Paginator
  3. from django.db import transaction
  4. from DCbackend.utils.common import success, fail, pageData
  5. from backend.Form.WechatComplaintForm import WechatComplaintForm
  6. from backend.models import WechatComplaint
  7. #微信模块相关方法
  8. class WechatComplaintService:
  9. @staticmethod
  10. @transaction.atomic
  11. def insertComplaint(request):
  12. try:
  13. name = request.POST.get("name")
  14. if not name:
  15. return fail("姓名为空")
  16. phone = request.POST.get("phone")
  17. if not phone:
  18. return fail("手机号为空")
  19. form = WechatComplaintForm(request.POST)
  20. if form.is_valid():
  21. complaint = form.save()
  22. # 发送 HTTP 请求
  23. email_url = "http://120.46.190.49:9998/apis/SMS/email"
  24. params = {
  25. "email": "qlithyw@shqlsy.com",
  26. # "email": "786912717@qq.com",
  27. "title": "新投诉通知",
  28. "content": f"""
  29. <html>
  30. <body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
  31. <h2 style="color: #1a5f7a;">新投诉详情</h2>
  32. <table style="border-collapse: collapse; width: 100%;">
  33. <tr>
  34. <td style="padding: 10px; border: 1px solid #ddd;"><strong>姓名:</strong></td>
  35. <td style="padding: 10px; border: 1px solid #ddd;">{name}</td>
  36. </tr>
  37. <tr>
  38. <td style="padding: 10px; border: 1px solid #ddd;"><strong>电话:</strong></td>
  39. <td style="padding: 10px; border: 1px solid #ddd;">{phone}</td>
  40. </tr>
  41. <tr>
  42. <td style="padding: 10px; border: 1px solid #ddd;"><strong>公司名称:</strong></td>
  43. <td style="padding: 10px; border: 1px solid #ddd;">{complaint.corporate_name}</td>
  44. </tr>
  45. </table>
  46. <h3 style="color: #1a5f7a; margin-top: 20px;">投诉内容:</h3>
  47. <p style="background-color: #f9f9f9; padding: 15px; border-left: 5px solid #1a5f7a;">
  48. {complaint.content}
  49. </p>
  50. <p style="color: #d9534f; font-weight: bold; margin-top: 20px;">请及时处理!</p>
  51. </body>
  52. </html>
  53. """
  54. }
  55. try:
  56. response = requests.get(email_url, params=params)
  57. response.raise_for_status()
  58. except requests.RequestException as e:
  59. print(f"发送邮件通知失败: {str(e)}")
  60. return success("感谢您的宝贵建议")
  61. else:
  62. return fail("表单验证失败")
  63. except Exception as e:
  64. return fail(f'保存失败: {str(e)}')
  65. @staticmethod
  66. @transaction.atomic
  67. def deleteComplaint(request):
  68. id = request.POST.get("id")
  69. if not id:
  70. return fail("id为空")
  71. WechatComplaint.objects.filter(id=id).update(status = 4)
  72. return success("删除成功")
  73. @staticmethod
  74. def getComplaintList(request):
  75. page = request.POST.get("page")
  76. pageSize = request.POST.get("pageSize")
  77. if page is None:
  78. page = 1
  79. if pageSize is None:
  80. pageSize = 10
  81. where = {}
  82. paginator = Paginator(WechatComplaint.objects.filter(**where).exclude(status=4).order_by("-create_time"), pageSize) # 每页显示10条数据
  83. page_obj = paginator.get_page(page)
  84. dataList = []
  85. for item in page_obj:
  86. info = WechatComplaintService.getDetail(item)
  87. dataList.append(info)
  88. return success(pageData(page, pageSize, paginator.num_pages, paginator.count, dataList))
  89. @staticmethod
  90. def getDetail(item: WechatComplaint):
  91. return {
  92. "id": item.id,
  93. 'name': item.name,
  94. 'phone': item.phone,
  95. 'corporateName': item.corporate_name,
  96. 'content': item.content,
  97. 'status': item.status,
  98. 'create_time': item.create_time
  99. }
  100. @staticmethod
  101. def getComplaintInfo(request):
  102. id = request.POST.get("id")
  103. if not id:
  104. return fail("id为空")
  105. complaint = WechatComplaint.objects.filter(id=id).first()
  106. if complaint:
  107. info = WechatComplaintService.getDetail(complaint)
  108. return success(info)
  109. else:
  110. return fail("未找到相关投诉")
  111. @staticmethod
  112. @transaction.atomic
  113. def updateComplaint(request):
  114. id = request.POST.get("id")
  115. if not id:
  116. return fail("id为空")
  117. complaint = WechatComplaint.objects.filter(id=id).first()
  118. if complaint:
  119. complaint.name = request.POST.get("name")
  120. complaint.phone = request.POST.get("phone")
  121. complaint.status = request.POST.get("status")
  122. complaint.corporate_name = request.POST.get("corporate_name")
  123. complaint.content = request.POST.get("content")
  124. complaint.save()
  125. return success("修改成功")
  126. else:
  127. return fail("修改失败")