wushaodong il y a 4 ans
Parent
commit
0fb1e4b8bb

+ 3 - 3
apps/account/models.py

@@ -51,9 +51,9 @@ class UserManager(BaseUserManager):
         return user
 
 class User(AbstractBaseUser, PermissionsMixin):
-    ADMINSTRATOR = 1 #管理
-    TENANT = 2 #租户
-    CUSTOMER = 3 #游客
+    ADMINSTRATOR = 1 #管理
+    TENANT = 2 #检修人
+    CUSTOMER = 3 #报修人
 
     type = models.PositiveSmallIntegerField(verbose_name=u"类型", editable=False)
     username = models.CharField(verbose_name=u'帐号', max_length=30, unique=True, db_index=True)

+ 6 - 15
apps/admin/tenant/serializers.py

@@ -6,33 +6,24 @@ from utils.exceptions import CustomError
 from apps.account.models import User
 
 class TenantSerializer(serializers.ModelSerializer) :
-    create_user_name = serializers.CharField(source='create_user.username', read_only=True)
     create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
-    username = serializers.SerializerMethodField()
+    status_text = serializers.CharField(source='get_status_display', read_only=True)
 
     class Meta:
         model = Tenant
         fields = '__all__'
 
-    def get_username(self, obj):
-        names = Employee.objects.filter(tenant=obj, user__type=User.TENANT).values('name')
-        name = []
-        for i in names:
-            name.append(i.get('name'))
-        return ','.join(name)
-
     def create(self, validated_data):
-        validated_data['create_user'] = self.context['request'].user
-        if Tenant.is_exist(validated_data['name']):
-            raise CustomError(u'名称为[%s]的租户已存在' % validated_data['name'])
+        if Tenant.is_exist(validated_data['company_name']):
+            raise CustomError(u'名称为[%s]的租户已存在' % validated_data['company_name'])
         instance = super(TenantSerializer, self).create(validated_data)
         return instance
 
     def update(self, instance, validated_data):
         if instance.delete:
-            raise CustomError(u'租户[%s]已经被删除,禁止修改' % instance.name)
-        if Tenant.is_exist(validated_data['name'], instance.id):
-            raise CustomError(u'名称为[%s]的租户已存在' % validated_data['name'])
+            raise CustomError(u'租户[%s]已经被删除,禁止修改' % instance.company_name)
+        if Tenant.is_exist(validated_data['company_name'], instance.id):
+            raise CustomError(u'名称为[%s]的租户已存在' % validated_data['company_name'])
 
         instance = super(TenantSerializer, self).update(instance, validated_data)
         return instance

+ 1 - 1
apps/admin/tenant/views.py

@@ -22,7 +22,7 @@ class TenantViewSet(CustomModelViewSet):
         super(TenantViewSet, self).perform_create(serializer)
         instance = serializer.instance
         validated_data = serializer.validated_data
-        admin_log(self.request.user, BizLog.INSERT, u'添加租户[%s] id=%d' % (instance.name, instance.id), validated_data)
+        admin_log(self.request.user, BizLog.INSERT, u'添加租户[%s] id=%d' % (instance.company_name, instance.id), validated_data)
 
     def perform_update(self, serializer):
         super(TenantViewSet, self).perform_update(serializer)

+ 4 - 0
apps/admin/user/serializers.py

@@ -8,6 +8,10 @@ from apps.tenant.employee.models import Employee
 class UserSerializer(serializers.ModelSerializer):
     type = serializers.IntegerField(read_only=True)
     password = serializers.CharField(write_only=True, allow_blank=True)
+    active_text = serializers.SerializerMethodField()
+
+    def get_active_text(self, obj):
+        return obj.is_active and u'是' or u'否'
 
     class Meta:
         model = User

+ 1 - 1
apps/admin/user/views.py

@@ -17,7 +17,7 @@ User = get_user_model()
 
 class UserViewSet(CustomModelViewSet):
     permission_classes = [IsAdministratorUser, ]
-    queryset = User.objects.filter(is_active=True, type=User.ADMINSTRATOR)
+    queryset = User.objects.filter(type=User.ADMINSTRATOR)
     serializer_class = UserSerializer
 
     def filter_queryset(self, queryset):

+ 24 - 28
apps/tenant/employee/models.py

@@ -10,63 +10,58 @@ from utils.exceptions import CustomError
 from django.db import transaction
 
 class Employee(models.Model):
-    LEAVE_UNUSED = 1
-    WORKING = 2
-    DAY_OFF = 3
-    LEAVE_OFFICE = 4
+    ENABLE = 1
+    DISABLE = 2
     STATUS_CHOICES = (
-        (LEAVE_UNUSED, u'在职'),
-        (WORKING, u'工作中'),
-        (DAY_OFF, u'调休'),
-        (LEAVE_OFFICE, u'离职'),
+        (ENABLE, u'在用'),
+        (DISABLE, u'禁用'),
     )
-    EMPLOYEE = 1
-    VISITOR = 2
+
+    SUPPER = 1
+    ADMIN = 2
+    EMPLOYEE = 3
+    REPAIR = 4
     TYPE_CHOICES = (
-        (EMPLOYEE, u'职工'),
-        (VISITOR, u'游客')
+        (SUPPER, u'平台管理员'),
+        (ADMIN, u'管理者'),
+        (EMPLOYEE, u'检修人'),
+        (REPAIR, u'报修人'),
     )
     name = models.CharField(max_length=100, verbose_name=u"姓名")
     tel = models.CharField(max_length=50, verbose_name=u'电话')
     gender = models.PositiveSmallIntegerField(choices=settings.GENDER_CHOICES, verbose_name=u'性别', default=settings.MALE)
-    status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态',default=LEAVE_UNUSED)
+    status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态',default=ENABLE)
     user = models.OneToOneField(settings.AUTH_USER_MODEL, editable=False, related_name='employee',
-                                on_delete=models.PROTECT, verbose_name=u'职工', null=True)
+                                on_delete=models.PROTECT, verbose_name=u'账号', null=True)
     position = models.ForeignKey(Option, verbose_name=u'职位', on_delete=models.PROTECT, null=True)
-    department = models.ForeignKey(Department, verbose_name=u'部门', on_delete=models.PROTECT, null=True)
     create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"创建人", on_delete=models.PROTECT,
                                     editable=False, related_name='create_user',null=True)
     face = models.CharField(max_length=200, verbose_name=u'头像', null=True)
     baoxiu_count = models.IntegerField(verbose_name='报修次数', default=0)
-    forbid_baoxiu = models.BooleanField(verbose_name='是否禁用报修', default=False)
     tenant = models.ForeignKey(Tenant, verbose_name=u'租户', editable=False, on_delete=models.PROTECT,null=True)
-    type = models.PositiveSmallIntegerField(verbose_name=u'人员类型', choices=TYPE_CHOICES, default=VISITOR)
+    type = models.PositiveSmallIntegerField(verbose_name=u'人员类型', choices=TYPE_CHOICES, default=REPAIR)
 
     class Meta:
         db_table = "employee"
-        verbose_name = u"员工管理"
+        verbose_name = u"用户管理"
         ordering = ['-id']
         index_together = (
             'name',
             'tel',
         )
         default_permissions = ()
-        permissions = [
-            ('browse_employee', u'查看'),
-            ('add_employee', u'添加'),
-            ('delete_employee', u'删除'),
-        ]
 
     @staticmethod
     def create_admin(tenant, username, password):
-        user = User.objects.create_superuser_tenant(username, password)
+        # 租户添加管理者
+        user = User.objects.create_tenant(username, password)
         instance = Employee.objects.create(
             name=username,
             tel='',
             gender=settings.MALE,
             user=user,
             tenant=tenant,
-            type=Employee.EMPLOYEE,
+            type=Employee.ADMIN,
         )
         return instance
 
@@ -82,10 +77,11 @@ class Employee(models.Model):
         return instance
 
     @staticmethod
-    def getOrRegister(tenant, user):
-        customer = Employee.objects.filter(tenant=tenant, user=user).first()
+    def getOrRegister(user):
+        # 小程序登录后,自动注册报修人
+        customer = Employee.objects.filter(user=user).first()
         if customer:
             return customer
         with transaction.atomic():
-            customer = Employee.objects.create(user=user,type=Employee.VISITOR, tel=user.username, name=user.username, tenant=tenant)
+            customer = Employee.objects.create(user=user,type=Employee.REPAIR, tel=user.username, name=user.username)
         return customer

+ 20 - 9
apps/tenant/models.py

@@ -5,11 +5,22 @@ from django.db.models import Q
 from utils.exceptions import CustomError
 
 class Tenant(models.Model):
-    name = models.CharField(max_length=200, verbose_name=u'名称')
-    create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"创建人", on_delete=models.PROTECT,
-                                    editable=False)
-    create_time = models.DateTimeField(verbose_name=u'创建时间', auto_now_add=True, editable=False)
-    is_bind_app = models.BooleanField(verbose_name=u'是否绑定小程序', default=False, editable=False)
+    REPAIR_ORDER = 1
+    INSPECTION_ORDER = 2
+    ORDER_TYPE = (
+        (REPAIR_ORDER, '报修工单'),
+        (INSPECTION_ORDER, '巡检转报修工单')
+    )
+    company_no = models.CharField(max_length=10, verbose_name=u'单位编号')
+    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)
+    name = models.CharField(max_length=20, verbose_name=u'联系人名称')
+    tel = 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)
+    status = models.PositiveSmallIntegerField(choices=settings.CHECK_STATE_CHOICES, verbose_name=u'审核状态',
+                                                  default=REPAIR_ORDER)
     delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
 
     class Meta:
@@ -19,8 +30,8 @@ class Tenant(models.Model):
         default_permissions = ()
 
     @staticmethod
-    def is_exist(name, exclude_id=None):
-        rows = Tenant.objects.filter(delete=False, name=name)
+    def is_exist(company_name, exclude_id=None):
+        rows = Tenant.objects.filter(delete=False, company_name=company_name)
         if exclude_id:
             rows = rows.filter(~Q(id=exclude_id))
         return rows.count()
@@ -30,10 +41,10 @@ class Tenant(models.Model):
         try:
             id = int(id)
         except:
-            raise CustomError(u'无效的户id!')
+            raise CustomError(u'无效的户id!')
         tenant = Tenant.objects.filter(id=id,delete=False).first()
         if not tenant:
-            raise CustomError(u'未找到相应的户信息!')
+            raise CustomError(u'未找到相应的户信息!')
         return tenant
 
 

+ 2 - 0
apps/upload/models.py

@@ -64,9 +64,11 @@ inspection_image = "inspection/"
 class Upload(models.Model):
     REPAIR_IMAGE = 1
     INSPECTION_IMAGE = 2
+    COMPANY_IMAGE = 3
     TYPE_CHOICES = (
         (REPAIR_IMAGE, u'报修图片'),
         (INSPECTION_IMAGE, u'巡检图片'),
+        (COMPANY_IMAGE, u'营业执照图片'),
     )
     tenant = models.ForeignKey(Tenant, verbose_name=u'租户', on_delete=models.PROTECT)
     user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'操作人', on_delete=models.PROTECT)

+ 8 - 9
apps/wxapp/models.py

@@ -16,7 +16,7 @@ from utils.exceptions import CustomError
 from apps.tenant.employee.models import Employee
 
 class CustomerWechat(models.Model):
-    wechat_app = models.ForeignKey(WechatApplet, verbose_name=u'小程序', on_delete=models.PROTECT, editable=False)
+    # wechat_app = models.ForeignKey(WechatApplet, verbose_name=u'小程序', on_delete=models.PROTECT, editable=False)
     customer = models.ForeignKey(Employee, verbose_name=u'用户', on_delete=models.PROTECT, editable=False, null=True)
     openid = models.CharField(max_length=512, verbose_name=u"openid")
     session_key = models.CharField(max_length=512, verbose_name=u'session_key',null=True)
@@ -31,13 +31,13 @@ class CustomerWechat(models.Model):
 
     @staticmethod
     def login(code, appid):
-        wechat_applet = WechatApplet.getByAppid(appid)
-
-        res = WeChat.code2Session(appid, wechat_applet.secret, code)
-        instance = CustomerWechat.objects.filter(openid=res['openid'], wechat_app__authorizer_appid=appid).first()
+        # wechat_applet = WechatApplet.getByAppid(appid)
+        secret = settings.WEAPP['secret']
+        res = WeChat.code2Session(appid, secret, code)
+        instance = CustomerWechat.objects.filter(openid=res['openid']).first()
         if not instance:
             instance = CustomerWechat.objects.create(
-                wechat_app=wechat_applet,
+                # wechat_app=wechat_applet,
                 openid=res['openid'],
                 session_key=res['session_key']
             )
@@ -48,7 +48,7 @@ class CustomerWechat(models.Model):
 
     @staticmethod
     def bindWechat(appid, openid, phoneEncryptedData, phoneIv):
-        customer_wechat = CustomerWechat.objects.filter(openid=openid, wechat_app__authorizer_appid=appid).first()
+        customer_wechat = CustomerWechat.objects.filter(openid=openid).first()
         if not customer_wechat:
             raise CustomError(u'未找到相应的微信客户!')
 
@@ -66,10 +66,9 @@ class CustomerWechat(models.Model):
         if not user:
             user = User.objects.create_customer(tel, password='')
 
-        tenant = customer_wechat.wechat_app.tenant
         try:
             with transaction.atomic():
-                customer = Employee.getOrRegister(user=user, tenant=tenant)
+                customer = Employee.getOrRegister(user=user)
         except:
             raise CustomError(u'用户注册失败!')
         customer_wechat.customer = customer

+ 8 - 12
apps/wxapp/serializers.py

@@ -12,7 +12,7 @@ from apps.wxapp.models import CustomerWechat
 from apps.log.models import BizLog
 from apps.wxapp import customer_log
 from utils.exceptions import CustomError
-
+from apps.tenant.employee.models import Employee
 
 User = get_user_model()
 jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
@@ -20,8 +20,8 @@ jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
 
 class WechatLoginSerializer(serializers.Serializer):
     def validate(self, attrs):
-        code = self.initial_data.get('code')
-        appid = self.initial_data.get('appid')
+        code = self.initial_data.get('code') # 用户code
+        appid = self.initial_data.get('appid') # 小程序appid
 
         if code and appid:
             customer_wechat = CustomerWechat.login(code, appid)
@@ -30,7 +30,6 @@ class WechatLoginSerializer(serializers.Serializer):
                     'bind': 0,
                     'openid': customer_wechat.openid,
                     'nick_name': customer_wechat.wechat_app.nick_name,
-                    'permission':[],
                 }
 
             user = customer_wechat.customer.user
@@ -40,7 +39,6 @@ class WechatLoginSerializer(serializers.Serializer):
 
             payload = jwt_payload_handler(user)
             customer_log(customer_wechat.customer, BizLog.INSERT, u'用户微信登录,username=%s' % user.username)
-            wechat_applet = WechatApplet.objects.filter(tenant=user.employee.tenant).first()
             return {
                 'bind': 1,
                 'user_id': user.id,
@@ -52,10 +50,9 @@ class WechatLoginSerializer(serializers.Serializer):
                 'face': customer_wechat.customer.face,
                 'gender': customer_wechat.customer.gender or 0,
                 'position': customer_wechat.customer.position and customer_wechat.customer.position.name or '',
-                'user_type': customer_wechat.customer.type,  # 用户类别,1为员工,2为游客
-                'forbid_baoxiu': customer_wechat.customer.forbid_baoxiu,  # 禁用报修,
-                'permission': list(user.get_all_permissions()),
-                'emplate_id': wechat_applet.getMsgTemplateId()
+                'user_type': customer_wechat.customer.type,  # 用户类别,1为平台管理员,2为管理者,3检修人,4报修人
+                'forbid_baoxiu': 'true' and customer_wechat.customer.status == Employee.DISABLE or 'false',  # 是否禁用报修,
+                'emplate_id': settings.WEAPP['message_template'],
             }
 
         else:
@@ -83,9 +80,8 @@ class WechatBindSerializer(serializers.Serializer):
                 'face': customer.face,
                 'gender': customer.gender or 0,
                 'position': customer.position and customer.position.name or '',
-                'user_type': customer.type,
-                'forbid_baoxiu': customer.forbid_baoxiu,
-                'permission': list(user.get_all_permissions())
+                'user_type': customer.type,  # 用户类别,1为平台管理员,2为管理者,3检修人,4报修人
+                'forbid_baoxiu': 'true' and customer.status == Employee.DISABLE or 'false',  # 是否禁用报修,
             }
 
         else:

+ 2 - 2
apps/wxapp/views.py

@@ -51,7 +51,7 @@ class SetUserInfoView(APIView):
         encryptedData = request.POST.get('encryptedData')
         iv = request.POST.get('iv')
 
-        customer_wechat = CustomerWechat.objects.filter(openid=openid, wechat_app__authorizer_appid=appid).first()
+        customer_wechat = CustomerWechat.objects.filter(openid=openid).first()
         if not customer_wechat:
             raise CustomError(u'未找到相应的微信客户!')
 
@@ -61,7 +61,7 @@ class SetUserInfoView(APIView):
         if not customer_wechat.customer:
             customer_wechat.customer = employee
             customer_wechat.save()
-        pc = WXBizDataCrypt(customer_wechat.wechat_app.authorizer_appid, customer_wechat.session_key)
+        pc = WXBizDataCrypt(appid, customer_wechat.session_key)
         result = pc.decrypt(encryptedData, iv)
         with transaction.atomic():
             if employee.name == employee.tel:

+ 6 - 0
ly_baoxiu_admin/settings.py

@@ -266,6 +266,12 @@ REST_FRAMEWORK = {
     'NON_FIELD_ERRORS_KEY': "error",  # 序列化器错误KEY名称
 }
 
+WEAPP = {
+    'appid': 'wx5cb18209cd4c239b', # 联强报销小程序
+    'secret': 'b896288439ceafb947d0dbfd946ceb25',
+    'message_template': 'V-b3rOtf47SbxsIoN1o2IdAL7cNjfrCnrlD6m-XEeYs',
+}
+
 # 导入本地设置
 try:
     from ly_baoxiu_admin.local_settings import *

+ 1 - 0
uis/zzlyadmin/user/index.html

@@ -75,6 +75,7 @@
       ,cols: [[
         {field:'username', title:'账号',width: 100}
        ,{field:'date_joined', title:'注册时间',width: 200}
+       ,{field:'active_text', title:'是否在用',width: 100}
         ,{width:140, align:'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}
       ]]
       ,page: true