feat: certificate添加state字段及其处理
This commit is contained in:
parent
821b88eb90
commit
6cd55f8460
|
@ -71,5 +71,6 @@ class CertificateFilterSet(filters.FilterSet):
|
|||
'employee__name': ['exact', 'contains'],
|
||||
'employee__user': ['exact'],
|
||||
'employee__type': ['exact', 'in'],
|
||||
'type': ['exact']
|
||||
'type': ['exact'],
|
||||
"state": ['exact'],
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 3.2.12 on 2025-02-05 06:36
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('hrm', '0018_alter_attendance_unique_together'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='certificate',
|
||||
name='state',
|
||||
field=models.PositiveSmallIntegerField(choices=[(10, '有效'), (20, '即将过期'), (30, '已过期')], default=10, verbose_name='证书状态'),
|
||||
),
|
||||
]
|
|
@ -2,6 +2,8 @@ from django.db import models
|
|||
from apps.system.models import Post, User
|
||||
|
||||
from apps.utils.models import BaseModel, CommonADModel, CommonAModel, CommonBModel
|
||||
from django.utils import timezone
|
||||
from datetime import timedelta
|
||||
|
||||
|
||||
class Employee(CommonBModel):
|
||||
|
@ -157,6 +159,10 @@ class Certificate(CommonAModel):
|
|||
"""
|
||||
证书
|
||||
"""
|
||||
CERT_OK = 10
|
||||
CERT_EXPIRING = 20
|
||||
CERT_EXPIRED = 30
|
||||
|
||||
CERTIFICATE_TYPE_CHOICES = (
|
||||
(10, '特种作业证书'),
|
||||
(20, '特种设备操作证书'),
|
||||
|
@ -169,5 +175,18 @@ class Certificate(CommonAModel):
|
|||
type = models.PositiveSmallIntegerField('证书类型', default=10)
|
||||
issue_date = models.DateField('发证日期')
|
||||
expiration_date = models.DateField('有效期')
|
||||
state = models.PositiveSmallIntegerField('证书状态', default=CERT_OK, choices=((CERT_OK, '有效'), (CERT_EXPIRING, '即将过期'), (CERT_EXPIRED, '已过期')))
|
||||
review_date = models.DateField('下一次复审日期')
|
||||
file = models.TextField('文件地址', null=True, blank=True)
|
||||
|
||||
def get_state(self, need_update=False):
|
||||
now = timezone.now().date()
|
||||
new_state = self.CERT_EXPIRED
|
||||
if self.expiration_date - timedelta(days=30) <= now < self.expiration_date:
|
||||
new_state = self.CERT_EXPIRING
|
||||
elif now < self.expiration_date - timedelta(days=30):
|
||||
new_state = self.CERT_OK
|
||||
if need_update and new_state != self.state:
|
||||
self.state = new_state
|
||||
self.save(update_fields=['state'])
|
||||
return new_state
|
|
@ -7,7 +7,7 @@ from celery import shared_task
|
|||
from dateutil import tz
|
||||
from django.core.cache import cache
|
||||
|
||||
from apps.hrm.models import Employee
|
||||
from apps.hrm.models import Employee, Certificate
|
||||
from apps.hrm.services import HrmService
|
||||
from apps.third.dahua import dhClient
|
||||
from apps.third.tapis import dhapis
|
||||
|
@ -129,4 +129,10 @@ def delete_face_pkl(epId):
|
|||
def update_global_face():
|
||||
facedata = Employee.objects.filter(face_data__isnull=False,
|
||||
user__is_active=True).values_list('id', 'face_data')
|
||||
cache.set('global_face', list(facedata), timeout=None)
|
||||
cache.set('global_face', list(facedata), timeout=None)
|
||||
|
||||
@shared_task(base=CustomTask)
|
||||
def check_cert_state():
|
||||
cert_qs = Certificate.objects.filter(state=Certificate.CERT_OK)
|
||||
for cert in cert_qs:
|
||||
cert.get_state(need_update=True)
|
|
@ -382,3 +382,11 @@ class CertificateViewSet(CustomModelViewSet):
|
|||
serializer_class = CertificateSerializer
|
||||
filterset_class = CertificateFilterSet
|
||||
search_fields = ['name', 'number', 'employee__name']
|
||||
|
||||
def perform_create(self, serializer):
|
||||
ins: Certificate = serializer.save()
|
||||
ins.get_state(need_update=True)
|
||||
|
||||
def perform_update(self, serializer):
|
||||
ins: Certificate = serializer.save()
|
||||
ins.get_state(need_update=True)
|
Loading…
Reference in New Issue