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:
|
Returns:
|
||||||
_type_: _description_
|
_type_: _description_
|
||||||
"""
|
"""
|
||||||
if not settings.DAHUA_ENABLED: # 如果大华没启用, 直接返回
|
if not getattr(settings, 'DAHUA_ENABLED', False): # 如果大华没启用, 直接返回
|
||||||
return
|
return
|
||||||
dh_id = ep.third_info.get('dh_id', None)
|
dh_id = ep.third_info.get('dh_id', None)
|
||||||
dh_photo = ep.third_info.get('dh_photo', 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']):
|
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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ class RemployeeCreateSerializer(CustomModelSerializer):
|
||||||
if Remployee.objects.filter(id_number=validated_data['id_number'], rparty=validated_data['rparty']).exists():
|
if Remployee.objects.filter(id_number=validated_data['id_number'], rparty=validated_data['rparty']).exists():
|
||||||
raise ValidationError('该成员已存在')
|
raise ValidationError('该成员已存在')
|
||||||
with transaction.atomic():
|
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'])
|
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo'])
|
||||||
return super().create(validated_data)
|
return super().create(validated_data)
|
||||||
|
|
||||||
|
|
@ -161,7 +161,7 @@ class RemployeeUpdateSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
with transaction.atomic():
|
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'])
|
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo'])
|
||||||
return super().update(instance, validated_data)
|
return super().update(instance, validated_data)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue