feat:修改光芯人员导入功能

This commit is contained in:
TianyangZhang 2026-03-31 11:08:12 +08:00
parent 44c0787d12
commit a82405e451
1 changed files with 28 additions and 9 deletions

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