views.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. # coding=utf-8
  2. import json
  3. from django.db import transaction
  4. from rest_framework.views import APIView
  5. from rest_framework.decorators import action
  6. from utils.custom_modelviewset import CustomModelViewSet
  7. from utils.permission import isLogin
  8. from utils import response_ok
  9. from apps.log.models import BizLog
  10. # from apps.admin import admin_log
  11. from .serializers import WechatAppletSerializer, MsgTemplateSerializer
  12. from apps.WechatApplet.filters import WechatAppletFilter, MsgTemplateFilter
  13. from apps.WechatApplet.models import WechatApplet, MessageTemplate
  14. from apps.WechatTp.models import WechatTp
  15. from django.contrib.auth import get_user_model
  16. User = get_user_model()
  17. from apps.account.models import CustomerWechat
  18. class TemplateListViewSet(APIView):
  19. permission_classes = [isLogin, ]
  20. def get(self, request):
  21. tp = WechatTp.getDefault()
  22. ret = tp.getTemplateList()
  23. return response_ok(ret)
  24. class DraftTemplateListViewSet(APIView):
  25. permission_classes = [isLogin, ]
  26. def get(self, request):
  27. tp = WechatTp.getDefault()
  28. ret = tp.getDraftTemplateList()
  29. return response_ok(ret)
  30. class DictListView(APIView):
  31. permission_classes = [isLogin, ]
  32. def get(self, request):
  33. data = {
  34. 'temp_types': [],
  35. 'wechat_apps': [],
  36. }
  37. for type in MessageTemplate.TYPE_CHOICE:
  38. item = {
  39. 'id': type[0],
  40. 'name': type[1],
  41. }
  42. data['temp_types'].append(item)
  43. rows = WechatApplet.objects.filter(is_authorize=True)
  44. for row in rows:
  45. item = {
  46. 'id': row.id,
  47. 'name': row.nick_name,
  48. }
  49. data['wechat_apps'].append(item)
  50. return response_ok(data)
  51. class WxMsgTempView(APIView):
  52. def get(self, request):
  53. appid = request.GET.get('appid')
  54. data = []
  55. if request.user and request.user.is_authenticated:
  56. wechat = CustomerWechat.objects.filter(customer=request.user, wechat_app__authorizer_appid=appid).first()
  57. if not wechat:
  58. return response_ok(data)
  59. rows = MessageTemplate.objects.filter(wechat_app=wechat.wechat_app)
  60. if request.user.type == User.EMPLOYEE:
  61. rows = rows.filter(type__in=[MessageTemplate.CREATE_ORDER, MessageTemplate.PAY_ORDER])
  62. elif request.user.type == User.AGENT:
  63. rows = rows.filter(
  64. type__in=[MessageTemplate.CONFIRM_ORDER, MessageTemplate.DELIVER, MessageTemplate.CREATE_ORDER])
  65. else:
  66. rows = rows.filter(type=MessageTemplate.CREATE_ORDER)
  67. rows = rows.values_list('template', flat=True)
  68. return response_ok(rows)
  69. return response_ok(data)
  70. class WechatAppletViewSet(CustomModelViewSet):
  71. permission_classes = [isLogin, ]
  72. queryset = WechatApplet.objects.filter(is_admin=False)
  73. serializer_class = WechatAppletSerializer
  74. def filter_queryset(self, queryset):
  75. f = WechatAppletFilter(self.request.GET, queryset=queryset)
  76. return f.qs
  77. @action(methods=['post'], detail=True)
  78. def upload_code(self, request, pk):
  79. # 上传代码
  80. template_id = request.POST.get('template_id')
  81. user_version = request.POST.get('user_version')
  82. user_desc = request.POST.get('user_desc')
  83. app = WechatApplet.getById(pk)
  84. with transaction.atomic():
  85. app.uploadCode(template_id, user_version, user_desc)
  86. BizLog.objects.addnew(self.request.user, BizLog.INSERT, u'小程序上传审核代码,id=%d' % app.id, request.POST.dict())
  87. return response_ok()
  88. @action(methods=['post'], detail=False)
  89. def batch_upload_code(self, request):
  90. # 批量上传代码
  91. template_id = request.POST.get('template_id')
  92. user_version = request.POST.get('user_version')
  93. user_desc = request.POST.get('user_desc')
  94. app_ids = json.loads(request.POST.get('ids'))
  95. apps = WechatApplet.objects.filter(id__in=app_ids)
  96. for app in apps:
  97. try:
  98. with transaction.atomic():
  99. app.uploadCode(template_id, user_version, user_desc)
  100. except:
  101. pass
  102. # admin_log(request.user, BizLog.INSERT, u'小程序批量上传审核代码', request.POST.dict())
  103. return response_ok()
  104. @action(methods=['post'], detail=False)
  105. def add_to_temp(self, request):
  106. # 上传草稿箱模板到标准模板
  107. draft_id = request.POST.get('draft_id')
  108. tp = WechatTp.getDefault()
  109. tp.addToemplate(draft_id)
  110. with transaction.atomic():
  111. BizLog.objects.addnew(self.request.user, BizLog.INSERT, u'小程序上传草稿到标准模板,draft_id=%s' % draft_id)
  112. return response_ok()
  113. @action(methods=['post'], detail=False)
  114. def refresh_audit_status(self, request):
  115. # 查询最新一次提交代码的审核状态 多选更新 审核状态
  116. app_ids = json.loads(request.POST.get('ids'))
  117. for app_id in app_ids:
  118. app = WechatApplet.getById(app_id)
  119. app.refreshAuditStatus()
  120. return response_ok()
  121. @action(methods=['post'], detail=True)
  122. def set_secret(self, request, pk):
  123. secret = request.POST.get('secret')
  124. app = WechatApplet.getById(pk)
  125. with transaction.atomic():
  126. app.secret = secret
  127. app.save()
  128. # admin_log(request.user, BizLog.INSERT, u'设置小程序秘钥, id=%d' % app.id, secret)
  129. return response_ok()
  130. @action(methods=['post'], detail=True)
  131. def set_merchant(self, request, pk):
  132. agent_num = request.POST.get('agent_num')
  133. agent_key = request.POST.get('agent_key')
  134. app = WechatApplet.getById(pk)
  135. with transaction.atomic():
  136. app.agent_num = agent_num
  137. app.agent_key = agent_key
  138. app.save()
  139. # admin_log(request.user, BizLog.INSERT, u'设置小程序商户号和商户秘钥, id=%d' % app.id)
  140. return response_ok()
  141. @action(methods=['post'], detail=False)
  142. def add_plugin(self, request):
  143. app_ids = json.loads(request.POST.get('ids'))
  144. for app_id in app_ids:
  145. apps = WechatApplet.getById(app_id)
  146. apps.addPlugin()
  147. return response_ok()
  148. @action(methods=['post'], detail=False)
  149. def release(self, request):
  150. app_ids = json.loads(request.POST.get('ids'))
  151. for app_id in app_ids:
  152. app = WechatApplet.getById(app_id)
  153. app.releaseApplet()
  154. return response_ok()
  155. @action(methods=['post'], detail=True)
  156. def upload_cert(self, request, pk):
  157. file = request.FILES.get('file', None)
  158. app = WechatApplet.getById(pk)
  159. with transaction.atomic():
  160. app.upload_cert_file(file)
  161. # admin_log(request.user, BizLog.INSERT, u'设置小程序企业支付api证书, id=%d' % app.id)
  162. return response_ok()
  163. class MsgTemplateViewSet(CustomModelViewSet):
  164. permission_classes = [isLogin, ]
  165. queryset = MessageTemplate.objects.filter()
  166. serializer_class = MsgTemplateSerializer
  167. def filter_queryset(self, queryset):
  168. f = MsgTemplateFilter(self.request.GET, queryset=queryset)
  169. return f.qs
  170. def perform_create(self, serializer):
  171. super(MsgTemplateViewSet, self).perform_create(serializer)
  172. instance = serializer.instance
  173. validated_data = serializer.validated_data
  174. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  175. u'添加模板[%s],id=%d' % (instance.wechat_app.principal_name, instance.id), validated_data)
  176. def perform_update(self, serializer):
  177. super(MsgTemplateViewSet, self).perform_update(serializer)
  178. instance = serializer.instance
  179. validated_data = serializer.validated_data
  180. BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
  181. u'修改模板[%s],id=%d' % (instance.wechat_app.principal_name, instance.id), validated_data)
  182. def destroy(self, request, *args, **kwargs):
  183. instance = self.get_object()
  184. BizLog.objects.addnew(self.request.user, BizLog.DELETE,
  185. u'删除模板[%s],id=%d' % (instance.wechat_app.principal_name, instance.id))
  186. super(MsgTemplateViewSet, self).perform_destroy(instance)
  187. return response_ok()