views.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. # coding=utf-8
  2. from django.conf import settings
  3. import datetime
  4. import traceback
  5. from django.utils import timezone
  6. from utils.custom_modelviewset import CustomModelViewSet
  7. from utils.permission import IsAdministratorUser
  8. from apps.tenant.models import Tenant
  9. from apps.tenant.employee.models import Employee
  10. from apps.admin import admin_log
  11. from apps.log.models import BizLog
  12. from .serializers import TenantSerializer
  13. from django.db import transaction
  14. from utils import response_ok
  15. from utils.exceptions import CustomError
  16. from rest_framework.decorators import action
  17. from utils import response_ok, response_error
  18. from apps.account.models import User
  19. from .filters import TenantFilter
  20. from apps.tenant.option.models import Option
  21. from apps.tenant.notices.models import Notices, NoticesToUser
  22. from apps.WechatApplet.models import WechatApplet
  23. from apps.tenant.config.models import Config
  24. class TenantViewSet(CustomModelViewSet):
  25. permission_classes = [IsAdministratorUser, ]
  26. queryset = Tenant.objects.all()
  27. serializer_class = TenantSerializer
  28. def filter_queryset(self, queryset):
  29. f = TenantFilter(self.request.GET, queryset=queryset)
  30. return f.qs
  31. def perform_create(self, serializer):
  32. super(TenantViewSet, self).perform_create(serializer)
  33. instance = serializer.instance
  34. validated_data = serializer.validated_data
  35. admin_log(self.request.user, BizLog.INSERT, u'添加企业[%s] id=%d' % (instance.company_name, instance.id), validated_data)
  36. def perform_update(self, serializer):
  37. super(TenantViewSet, self).perform_update(serializer)
  38. instance = serializer.instance
  39. validated_data = serializer.validated_data
  40. admin_log(self.request.user, BizLog.INSERT, u'修改企业[%s] id=%d' % (instance.name, instance.id), validated_data)
  41. @action(methods=['post'], detail=True)
  42. def super_tenant(self, request, pk):
  43. name = request.POST.get('name')
  44. username = request.POST.get('username')
  45. password = request.POST.get('password')
  46. try:
  47. with transaction.atomic():
  48. tenant = Tenant.objects.filter(pk=pk).first()
  49. if not tenant:
  50. raise CustomError('当前企业无效,请刷新!')
  51. user = User.objects.filter(username=username).first()
  52. if user:
  53. user.type = User.SUPER
  54. user.save()
  55. Employee.objects.filter(user=user).update(tenant=tenant, type=Employee.SUPER)
  56. else:
  57. user = Employee.create_super_admin(tenant, name, username, password)
  58. option_data1 = {
  59. 'tenant': tenant,
  60. 'type': 1,
  61. 'name': u'桌椅、板凳',
  62. 'create_user': user,
  63. }
  64. option_data2 = {
  65. 'tenant': tenant,
  66. 'type': 2,
  67. 'name': u'设备老化',
  68. 'create_user': user,
  69. }
  70. Option.objects.create(**option_data1)
  71. Option.objects.create(**option_data2)
  72. notice_data = {
  73. 'title':'企业入驻审核通知,请点击查看!',
  74. 'content':'''您的企业入驻审核已通过,请牢记一下内容:
  75. 企业名称:{0}<br>
  76. 企业编号:{1}<br>
  77. 超级管理员账号:{2}<br>
  78. 超级管理员密码:{3}<br>
  79. 电脑端管理系统网址:https://baoxiu.zzliaoyuan.com/
  80. '''.format(tenant.company_name,tenant.company_no,username,password),
  81. 'create_user':request.user,
  82. 'tenant':tenant,
  83. 'type':Notices.MESSAGE,
  84. 'range':Notices.ADMIN,
  85. 'end_time':(timezone.now() + datetime.timedelta(days=10)).strftime('%Y-%m-%d'),
  86. }
  87. notice = Notices.objects.create(**notice_data)
  88. NoticesToUser.objects.create(notice=notice,user=user)
  89. admin_log(request.user, BizLog.INSERT, u'企业[%s]添加超级账号[%s]' % (tenant.company_name,username))
  90. return response_ok()
  91. except CustomError as e:
  92. return response_error(e.get_error_msg())
  93. except Exception as e:
  94. return response_error(str(e))
  95. @action(methods=['post'], detail=True)
  96. def check(self, request, pk):
  97. # 审核
  98. status = request.POST.get('status')
  99. reject_reason = request.POST.get('reason')
  100. try:
  101. with transaction.atomic():
  102. instance = Tenant.getById(pk)
  103. # 审核
  104. if instance.status > settings.DEFAULT:
  105. raise CustomError('当前企业已审核!')
  106. instance.status = status
  107. instance.reject_reason = reject_reason
  108. if int(status) == settings.PASS:
  109. days = Config.getIntValue(Config.FREE_DAYS)
  110. instance.end_date = (datetime.datetime.now() + datetime.timedelta(days=days)).strftime('%Y-%m-%d')
  111. instance.save()
  112. if not instance.wxapp_img:
  113. applet = WechatApplet.objects.filter(authorizer_appid=settings.WEAPP['appid']).first()
  114. filename = applet.getWXAppCode(instance.company_no)
  115. instance.wxapp_img = "{0}{1}".format(settings.MEDIA_URL, filename)
  116. instance.save()
  117. BizLog.objects.addnew(None, request.user, BizLog.INSERT, u'审核企业[%s]状态为[%s],id=%d' % (instance.company_name, status, instance.id))
  118. except CustomError as e:
  119. return response_error(e.get_error_msg())
  120. except Exception as e:
  121. return response_error(str(e))
  122. return response_ok('审核完成!')