This commit is contained in:
caoqianming 2026-04-14 14:16:18 +08:00
commit a111f493e1
3 changed files with 31 additions and 12 deletions

View File

@ -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)

View File

@ -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

View File

@ -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)