From 54052867347b0c8dbaf6483851fd9f5dc2d7c04e Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Fri, 7 Aug 2026 23:04:21 +0800 Subject: [PATCH] =?UTF-8?q?refactor(gerp):=20form=5Fservice=20=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E5=A2=9E=E5=88=A0=E6=94=B9=E8=90=BD=E5=BA=93=E7=82=B9?= =?UTF-8?q?=E4=B8=8B=E6=B2=89=20gvsdsdk=20FormServiceBase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gvsds/apps/gerp/form_service.py | 12 ++++++------ gvsdsdk/form_service.py | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/gvsds/apps/gerp/form_service.py b/gvsds/apps/gerp/form_service.py index c586e16f..758a2d61 100644 --- a/gvsds/apps/gerp/form_service.py +++ b/gvsds/apps/gerp/form_service.py @@ -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) diff --git a/gvsdsdk/form_service.py b/gvsdsdk/form_service.py index 70d3a277..b4032b5f 100644 --- a/gvsdsdk/form_service.py +++ b/gvsdsdk/form_service.py @@ -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')