views.py 7.2 KB

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