refactor(gerp): form_service 通用增删改落库点下沉 gvsdsdk FormServiceBase

This commit is contained in:
TermiNexus committed 2026-08-07 23:04:21 +08:00
1 parent 187aebe811
commit 5405286734
2 files changed
+28 -6

No files matched your search

+6 -6
View File
@@ -1268,7 +1268,7 @@ class FormService(FormServiceBase):
raw_password = create_data.pop('UserPassword')
obj = model(**create_data)
obj.SetPassword(raw_password)
obj.save()
self._SaveObject(obj)
elif table_name == 'Order':
# 订单走 OrderManager 状态机保护(自动单号 + 强制 PENDING + 事务)
from gvsdsdk.order.manager import OrderManager, OrderError
@@ -1295,7 +1295,7 @@ class FormService(FormServiceBase):
except OrderError as _e:
return {'error': str(_e), 'field': 'OrderTitle'}
else:
obj = model.objects.create(**create_data)
obj = self._CreateObject(model, create_data)
except IntegrityError as e:
# 捕获数据库完整性错误(如必填字段为 null),返回友好的错误信息
error_msg = str(e)
@@ -1395,7 +1395,7 @@ class FormService(FormServiceBase):
lookup['CompanyUUID'] = self.current_company_uuid
break
try:
obj = model.objects.get(**lookup)
obj = self._GetObject(model, lookup)
except model.DoesNotExist:
return None
# 角色作用域越权校验:Order 按 role_scope 差异化可见范围(member 只能改自己的订单)
@@ -1510,7 +1510,7 @@ class FormService(FormServiceBase):
if _receiver and _receiver != _operator:
self._send_workorder_notify(obj, _receiver, _wo_title, _wo_content)
if update_fields:
obj.save(update_fields=update_fields)
self._SaveObject(obj, update_fields)
# 审计日志:记录修改操作
if table_name in self.AUDIT_TABLES:
new_snapshot = self._get_record_snapshot(obj)
@@ -1561,7 +1561,7 @@ class FormService(FormServiceBase):
lookup['CompanyUUID'] = self.current_company_uuid
break
try:
obj = model.objects.get(**lookup)
obj = self._GetObject(model, lookup)
except model.DoesNotExist:
return False
# 角色作用域越权校验:Order 按 role_scope 差异化可见范围(member 只能删自己的订单)
@@ -1599,7 +1599,7 @@ class FormService(FormServiceBase):
if member_count:
return {'error': f'该部门下仍有 {member_count} 名成员,请先在"部门员工"中移除成员后再删除', 'field': 'PK'}
try:
obj.delete()
self._DeleteObject(obj)
except IntegrityError as e:
# 其他表的外键引用拦截:返回友好提示而非 500 裸错
logger.warning('[delete_record/%s] IntegrityError: %s', table_name, e)
+22
View File
@@ -388,6 +388,28 @@ class FormServiceBase:
deleted, _ = model.objects.filter(**{pk_field_name: pk_value}).delete()
return bool(deleted)
# ---- 低层落库辅助:供子类通用 CRUD 落库点复用(裸 ORM 收敛到 SDK) ----
def _CreateObject(self, model, create_data):
"""按已解析字段字典创建记录(通用新增落库点)"""
return model.objects.create(**create_data)
def _GetObject(self, model, lookup):
"""按查询条件取单条记录(通用查询落库点,DoesNotExist 由调用方处理)"""
return model.objects.get(**lookup)
def _SaveObject(self, obj, update_fields=None):
"""保存记录(通用更新落库点)"""
if update_fields:
obj.save(update_fields=update_fields)
else:
obj.save()
return obj
def _DeleteObject(self, obj):
"""删除记录(通用删除落库点)"""
obj.delete()
def CodeDisplay(self, data):
table_name = data.get('Table', '')
code_field = data.get('CodeField', 'PermCode')