feat:修改光芯人员导入功能
This commit is contained in:
parent
44c0787d12
commit
a82405e451
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue