83 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
| from django.db import models
 | |
| from apps.am.models import Area
 | |
| import uuid
 | |
| from apps.hrm.models import Employee
 | |
| from apps.utils.models import BaseModel
 | |
| 
 | |
| # Create your models here.
 | |
| 
 | |
| 
 | |
| class TDevice(BaseModel):
 | |
|     """
 | |
|     三方设备补充信息
 | |
|     """
 | |
|     DEVICE_BLG = 10
 | |
|     DEVICE_IBEACON = 20
 | |
|     DEVICE_BLT = 30
 | |
|     DEVICE_AOA = 40
 | |
|     DEVICE_SPEAKER = 50
 | |
|     DEVICE_VCHANNEL = 60
 | |
|     DEVICE_DCHANNEL = 70
 | |
|     DEVICE_PANEL = 80
 | |
| 
 | |
|     DEVICE_CHOICE = (
 | |
|         (DEVICE_BLG, '定位基站'),
 | |
|         (DEVICE_IBEACON, '定位信标'),
 | |
|         (DEVICE_BLT, '定位标签'),
 | |
|         (DEVICE_AOA, 'aoa引擎'),
 | |
|         (DEVICE_SPEAKER, '喇叭'),
 | |
|         (DEVICE_VCHANNEL, '视频通道'),
 | |
|         (DEVICE_DCHANNEL, '闸机通道'),
 | |
|         (DEVICE_PANEL, '面板机')
 | |
|     )
 | |
|     type = models.PositiveSmallIntegerField('设备类型', choices=DEVICE_CHOICE)
 | |
|     code = models.CharField('设备唯一标识', max_length=50, db_index=True, unique=True)
 | |
|     name = models.CharField('名称', max_length=50, null=True, blank=True)
 | |
|     location = models.JSONField('位置信息', default=dict,
 | |
|                                 null=False, blank=True)
 | |
|     area = models.ForeignKey(Area, on_delete=models.SET_NULL,
 | |
|                              verbose_name='所在区', null=True, blank=True)
 | |
|     areas = models.ManyToManyField(Area, verbose_name='覆盖区',
 | |
|                                    related_name='tareas', blank=True)
 | |
|     obj_cate = models.CharField('绑定对象', max_length=20, help_text='people/...', null=True, blank=True)
 | |
|     employee = models.OneToOneField(Employee, verbose_name='当前绑定人员', on_delete=models.SET_NULL,
 | |
|                                     null=True, blank=True)
 | |
|     is_clock = models.BooleanField('是否打卡设备', default=False)
 | |
|     access_list = models.JSONField('自动下发人员类型', default=list,
 | |
|                                    null=False, blank=True, help_text='employee/remployee/visitor')
 | |
|     third_info = models.JSONField('三方信息', default=dict,
 | |
|                                   null=False, blank=True)
 | |
| 
 | |
| 
 | |
| class BltBind(BaseModel):
 | |
|     """标签绑定/解绑记录
 | |
|     """
 | |
|     BLT_BIND = 10
 | |
|     BLT_UNBIND = 20
 | |
|     BIND_TYPE_CHOICES = (
 | |
|         (10, '绑定'),
 | |
|         (20, '解绑')
 | |
|     )
 | |
|     type = models.PositiveSmallIntegerField('绑定类型', default=10, help_text='10(绑定)/20(解绑)',
 | |
|                                             choices=BIND_TYPE_CHOICES)
 | |
|     obj_cate = models.CharField('绑定对象', max_length=20, help_text='people/...', null=True, blank=True)
 | |
|     blt = models.ForeignKey(TDevice, verbose_name='关联标签', on_delete=models.CASCADE)
 | |
|     employee = models.ForeignKey(Employee, verbose_name='关联人员', on_delete=models.CASCADE, null=True, blank=True)
 | |
| 
 | |
| 
 | |
| class Tlog(BaseModel):
 | |
|     """第三方请求与处理日志
 | |
|     """
 | |
|     id = models.UUIDField(primary_key=True, default=uuid.uuid4)
 | |
|     target = models.CharField('请求目标', max_length=20)
 | |
|     result = models.CharField('请求结果', max_length=20)
 | |
|     path = models.CharField(max_length=400, help_text="请求地址")
 | |
|     requested_at = models.DateTimeField()
 | |
|     response_ms = models.PositiveIntegerField(default=0)
 | |
|     response = models.JSONField(null=True, blank=True)
 | |
|     method = models.CharField(max_length=10)
 | |
|     url = models.TextField(null=True, blank=True)
 | |
|     errors = models.TextField(null=True, blank=True)
 | |
|     params = models.JSONField(null=True, blank=True)
 | |
|     body = models.JSONField(null=True, blank=True)
 |