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']):
|
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}行,身份证号格式不正确')
|
raise ParseError(f'第{row_num}行,身份证号格式不正确')
|
||||||
|
|
||||||
# 查找或更新
|
# 查找或创建/补全
|
||||||
try:
|
try:
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
obj, created = Employee.objects.update_or_create(
|
# 优先按身份证号匹配,匹配不到再按姓名匹配
|
||||||
id_number=id_number,
|
existing = None
|
||||||
name=name,
|
if id_number:
|
||||||
defaults=data
|
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:
|
except Exception as e:
|
||||||
raise
|
raise
|
||||||
if created:
|
if created:
|
||||||
myLogger.info(f"✅ 第{row_num}行新增成功:{name}")
|
myLogger.info(f"✅ 第{row_num}行新增成功:{name}")
|
||||||
else:
|
|
||||||
myLogger.info(f"✅ 第{row_num}行更新成功:{name}")
|
|
||||||
|
|
||||||
success += 1
|
success += 1
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue