Browse Source

租户管理员

wushaodong 4 years ago
parent
commit
4a83f8e09a

+ 14 - 0
apps/admin/tenant/filters.py

@@ -0,0 +1,14 @@
+# coding=utf-8
+
+import django_filters
+from apps.tenant.models import Tenant
+
+
+class TenantFilter(django_filters.FilterSet):
+    company_no = django_filters.CharFilter(field_name='company_no', lookup_expr='icontains')
+    company_name = django_filters.CharFilter(field_name='company_name', lookup_expr='icontains')
+    name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')
+
+    class Meta:
+        model = Tenant
+        fields = '__all__'

+ 9 - 0
apps/admin/tenant/serializers.py

@@ -5,16 +5,25 @@ from apps.tenant.models import Tenant
 from apps.tenant.employee.models import Employee
 from utils.exceptions import CustomError
 from apps.account.models import User
+from apps.upload.models import Upload
 
 class TenantSerializer(serializers.ModelSerializer) :
     create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
     status_text = serializers.CharField(source='get_status_display', read_only=True)
     username = serializers.SerializerMethodField()
+    image = serializers.SerializerMethodField()
 
     class Meta:
         model = Tenant
         fields = '__all__'
 
+    def get_image(self, obj):
+        img = Upload.objects.filter(tenant=obj, type=Upload.COMPANY_IMAGE).first()
+        if img:
+            return img.get_path()
+        else:
+            return ''
+
     def get_username(self, obj):
         names = Employee.objects.filter(tenant=obj, user__type=User.SUPPER).values('name')
         name = []

+ 5 - 0
apps/admin/tenant/views.py

@@ -13,12 +13,17 @@ from utils.exceptions import CustomError
 from rest_framework.decorators import action
 from utils import response_ok, response_error
 from apps.account.models import User
+from .filters import TenantFilter
 
 class TenantViewSet(CustomModelViewSet):
     permission_classes = [IsAdministratorUser, ]
     queryset = Tenant.objects.all()
     serializer_class = TenantSerializer
 
+    def filter_queryset(self, queryset):
+        f = TenantFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
     def perform_create(self, serializer):
         super(TenantViewSet, self).perform_create(serializer)
         instance = serializer.instance

+ 4 - 1
apps/tenant/models.py

@@ -10,13 +10,16 @@ class Tenant(models.Model):
     company_no = models.CharField(max_length=10, verbose_name=u'单位编号', blank=True, null=True)
     company_name = models.CharField(max_length=200, verbose_name=u'单位名称')
     organ_code = models.CharField(max_length=200, verbose_name=u'组织代码')
-    # images = models.ForeignKey(Upload, verbose_name='营业执照图片',on_delete=models.PROTECT, blank=True)
+    # images = models.ForeignKey('Upload', verbose_name='营业执照图片',on_delete=models.PROTECT, blank=True)
     name = models.CharField(max_length=20, verbose_name=u'联系人名称')
     tel = models.CharField(max_length=20, verbose_name=u'联系人电话')
+    address = models.CharField(max_length=20, verbose_name=u'联系人电话')
     create_time = models.DateTimeField(verbose_name=u'申请时间', auto_now_add=True, editable=False)
     end_date = models.DateField(verbose_name=u'到期时间', editable=False, blank=True, null=True)
     status = models.PositiveSmallIntegerField(choices=settings.CHECK_STATE_CHOICES, verbose_name=u'审核状态',
                                               default=settings.DEFAULT)
+    user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"申请人", on_delete=models.PROTECT,
+                                    editable=False,  null=True)
     reject_reason = models.CharField(max_length=200, verbose_name=u'拒绝原因', blank=True, null=True)
     delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
 

+ 3 - 1
apps/upload/models.py

@@ -52,6 +52,7 @@ class UploadManager(models.Manager):
         path_map = {
             Upload.REPAIR_IMAGE: repair_image,
             Upload.INSPECTION_IMAGE: inspection_image,
+            Upload.COMPANY_IMAGE: company_image,
         }
 
         return path_map[type] + str(tenant_id) + str(user_id) + '/'
@@ -59,6 +60,7 @@ class UploadManager(models.Manager):
 
 repair_image = "repair/"
 inspection_image = "inspection/"
+company_image = "company/"
 
 
 class Upload(models.Model):
@@ -97,6 +99,6 @@ class Upload(models.Model):
         DeleteFile(picture)
 
     def get_path(self):
-        return '%s%s%s' % (settings.SERVER_DOMAIN, settings.MEDIA_URL, self.picture)
+        return '%s%s' % (settings.SERVER_DOMAIN, self.picture)
 
 

+ 1 - 1
apps/wxapp/models.py

@@ -52,7 +52,7 @@ class CustomerWechat(models.Model):
         if not customer_wechat:
             raise CustomError(u'未找到相应的微信客户!')
 
-        pc = WXBizDataCrypt(customer_wechat.wechat_app.authorizer_appid, customer_wechat.session_key)
+        pc = WXBizDataCrypt(appid, customer_wechat.session_key)
         phon_data = pc.decrypt(phoneEncryptedData, phoneIv)
         tel = phon_data['purePhoneNumber']
 

+ 2 - 2
apps/wxapp/serializers.py

@@ -29,7 +29,7 @@ class WechatLoginSerializer(serializers.Serializer):
                 return {
                     'bind': 0,
                     'openid': customer_wechat.openid,
-                    'nick_name': customer_wechat.wechat_app.nick_name,
+                    'nick_name': settings.WEAPP['nick_name'],
                 }
 
             user = customer_wechat.customer.user
@@ -44,7 +44,7 @@ class WechatLoginSerializer(serializers.Serializer):
                 'user_id': user.id,
                 'token': jwt_encode_handler(payload),
                 'openid': customer_wechat.openid,
-                'nick_name': customer_wechat.wechat_app.nick_name or '',
+                'nick_name': settings.WEAPP['nick_name'],
                 'name': customer_wechat.customer.name or '',
                 'tel': customer_wechat.customer.tel or '',
                 'face': customer_wechat.customer.face,

+ 1 - 0
apps/wxapp/tenant/__init__.py

@@ -0,0 +1 @@
+# coding=utf-8

+ 26 - 0
apps/wxapp/tenant/serializers.py

@@ -0,0 +1,26 @@
+# coding=utf-8
+from django.conf import settings
+from rest_framework import serializers
+import datetime
+from apps.tenant.models import Tenant
+from utils.exceptions import CustomError
+from apps.upload.models import Upload
+
+class TenantSerializer(serializers.ModelSerializer):
+
+    class Meta:
+        model = Tenant
+        fields = '__all__'
+
+    def create(self, validated_data):
+        if Tenant.is_exist(validated_data['company_name']):
+            raise CustomError(u'名称为[%s]的租户已存在' % validated_data['company_name'])
+        user = self.context['request'].user
+        image = self.context['request'].data.get('image')
+        validated_data['user'] = self.context['request'].user
+        instance = super(TenantSerializer, self).create(validated_data)
+        instance.company_no = instance.get_no()
+        instance.end_date = (datetime.datetime.now() + datetime.timedelta(days=30)).strftime('%Y-%m-%d')
+        instance.save()
+        Upload.objects._addnew(instance, user, Upload.COMPANY_IMAGE, image)
+        return instance

+ 13 - 0
apps/wxapp/tenant/urls.py

@@ -0,0 +1,13 @@
+# coding=utf-8
+from django.conf.urls import url
+from rest_framework.routers import SimpleRouter
+
+from .views import *
+
+urlpatterns = [
+
+]
+
+router = SimpleRouter()
+router.register(r'', TenantViewSet)
+urlpatterns += router.urls

+ 17 - 0
apps/wxapp/tenant/views.py

@@ -0,0 +1,17 @@
+# coding=utf-8
+from django.conf import settings
+from utils.custom_modelviewset import CustomModelViewSet
+from apps.log.models import BizLog
+from apps.tenant.models import Tenant
+from .serializers import TenantSerializer
+
+
+class TenantViewSet(CustomModelViewSet):
+    queryset = Tenant.objects.all()
+    serializer_class = TenantSerializer
+
+    def perform_create(self, serializer):
+        super(TenantViewSet, self).perform_create(serializer)
+        instance = serializer.instance
+        validated_data = serializer.validated_data
+        BizLog.objects.addnew(instance, self.request.user, BizLog.INSERT, u'申请租户[%s] id=%d' % (instance.company_name, instance.id), validated_data)

+ 1 - 0
apps/wxapp/urls.py

@@ -19,4 +19,5 @@ urlpatterns = [
 
     url(r'^repair_order/', include('apps.wxapp.repair_order.urls')),
     url(r'^inspection_order/', include('apps.wxapp.inspection_order.urls')),
+    url(r'^tenant/', include('apps.wxapp.tenant.urls')),
 ]

+ 4 - 3
ly_baoxiu_admin/settings.py

@@ -228,7 +228,7 @@ UIS_URL = '/'
 UIS_ROOT = os.path.join(BASE_DIR, "uis/")
 
 # SERVER_DOMAIN = 'https://baoxiu360.top'
-SERVER_DOMAIN = 'http://192.168.2.45:8888'
+SERVER_DOMAIN = 'http://192.168.2.45:8887'
 
 JWT_AUTH = {
     'JWT_EXPIRATION_DELTA': datetime.timedelta(days=30),
@@ -267,8 +267,9 @@ REST_FRAMEWORK = {
 }
 
 WEAPP = {
-    'appid': 'wx5cb18209cd4c239b', # 联强报销小程序
-    'secret': 'b896288439ceafb947d0dbfd946ceb25',
+    'nick_name': '燎原云报修', # 燎原云报修小程序
+    'appid': 'wx0a4ed500a98c0507',
+    'secret': '0700bb3a58cd09505e78d7c7d1781042',
     'message_template': 'V-b3rOtf47SbxsIoN1o2IdAL7cNjfrCnrlD6m-XEeYs',
 }
 

+ 5 - 4
uis/zzlyadmin/tenant/index.html

@@ -63,7 +63,7 @@
                         <div style="float:right;">
                             <form class="layui-form" lay-filter="query-form-element">
                                 <div class="seach_items">
-                                    <input type="text" name="company" autocomplete="off" class="layui-input"
+                                    <input type="text" name="company_name" autocomplete="off" class="layui-input"
                                            placeholder="单位名称"/>
                                 </div>
                                 <div class="seach_items">
@@ -71,7 +71,7 @@
                                            placeholder="联系人姓名"/>
                                 </div>
                                 <div class="seach_items">
-                                    <input type="text" name="name" autocomplete="off" class="layui-input"
+                                    <input type="text" name="tel" autocomplete="off" class="layui-input"
                                            placeholder="联系人电话"/>
                                 </div>
                                 <div class="seach_items">
@@ -136,11 +136,12 @@
                 {field: 'company_no', title: '单位编号', width: 100}
                 , {field: 'company_name', title: '单位名称', width: 200}
                 , {field: 'organ_code', title: '组织代码', width: 150}
-                , {field: 'name', title: '联系人姓名', width: 100}
+                , {field: 'name', title: '联系人姓名', width: 120}
                 , {field: 'tel', title: '联系人电话', width: 120}
+                , {field: 'address', title: '联系人地址', width: 200}
                 , {field: 'end_date', title: '租户到期日期', width: 120}
                 , {field: 'create_time', title: '申请时间', width: 160}
-                , {field: 'status_text', title: '审核状态', width: 120}
+                , {field: 'status_text', title: '审核状态', width: 100}
                 , {field: 'username', title: '管理员账号', width: 200}
                 , {field: 'renew_time', title: '续费时间', width: 160}
                 , {field: 'renew_amount', title: '续费金额', width: 120}