Merge branch 'master' of http://gitea.xxhhcty.xyz:8080/zcdsj/factory
This commit is contained in:
commit
a111f493e1
|
|
@ -39,7 +39,7 @@ class HrmService:
|
|||
Returns:
|
||||
_type_: _description_
|
||||
"""
|
||||
if not settings.DAHUA_ENABLED: # 如果大华没启用, 直接返回
|
||||
if not getattr(settings, 'DAHUA_ENABLED', False): # 如果大华没启用, 直接返回
|
||||
return
|
||||
dh_id = ep.third_info.get('dh_id', None)
|
||||
dh_photo = ep.third_info.get('dh_photo', None)
|
||||
|
|
|
|||
|
|
@ -387,20 +387,39 @@ class EmployeeViewSet(CustomModelViewSet):
|
|||
if not re.match(r'^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$', data['id_number']):
|
||||
raise ParseError(f'第{row_num}行,身份证号格式不正确')
|
||||
|
||||
# 查找或更新
|
||||
# 查找或创建/补全
|
||||
try:
|
||||
with transaction.atomic():
|
||||
obj, created = Employee.objects.update_or_create(
|
||||
id_number=id_number,
|
||||
name=name,
|
||||
defaults=data
|
||||
)
|
||||
# 优先按身份证号匹配,匹配不到再按姓名匹配
|
||||
existing = None
|
||||
if id_number:
|
||||
existing = Employee.objects.filter(id_number=id_number).first()
|
||||
if not existing and name:
|
||||
existing = Employee.objects.filter(name=name, id_number__isnull=True).first() or \
|
||||
Employee.objects.filter(name=name, id_number='').first()
|
||||
if existing:
|
||||
# 只用 Excel 非空值填补数据库中为空的字段
|
||||
updated_fields = []
|
||||
for field_name, value in data.items():
|
||||
if value in [None, '']:
|
||||
continue
|
||||
current_value = getattr(existing, field_name, None)
|
||||
if current_value in [None, '']:
|
||||
setattr(existing, field_name, value)
|
||||
updated_fields.append(field_name)
|
||||
if updated_fields:
|
||||
existing.save(update_fields=updated_fields + ['update_time'])
|
||||
myLogger.info(f"✅ 第{row_num}行补全成功:{name},更新字段:{updated_fields}")
|
||||
else:
|
||||
myLogger.info(f"⏭️ 第{row_num}行无需补全:{name}")
|
||||
created = False
|
||||
else:
|
||||
Employee.objects.create(id_number=id_number, name=name, **data)
|
||||
created = True
|
||||
except Exception as e:
|
||||
raise
|
||||
raise
|
||||
if created:
|
||||
myLogger.info(f"✅ 第{row_num}行新增成功:{name}")
|
||||
else:
|
||||
myLogger.info(f"✅ 第{row_num}行更新成功:{name}")
|
||||
|
||||
success += 1
|
||||
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ class RemployeeCreateSerializer(CustomModelSerializer):
|
|||
if Remployee.objects.filter(id_number=validated_data['id_number'], rparty=validated_data['rparty']).exists():
|
||||
raise ValidationError('该成员已存在')
|
||||
with transaction.atomic():
|
||||
if settings.DAHUA_ENABLED:
|
||||
if getattr(settings, 'DAHUA_ENABLED', False):
|
||||
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo'])
|
||||
return super().create(validated_data)
|
||||
|
||||
|
|
@ -161,7 +161,7 @@ class RemployeeUpdateSerializer(CustomModelSerializer):
|
|||
|
||||
def update(self, instance, validated_data):
|
||||
with transaction.atomic():
|
||||
if settings.DAHUA_ENABLED:
|
||||
if getattr(settings, 'DAHUA_ENABLED', False):
|
||||
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo'])
|
||||
return super().update(instance, validated_data)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue