1
0
forked from erp-dev/erp

feat: change param_valueto 'like' search for by-process-node

This commit is contained in:
2026-02-06 20:52:43 +08:00
parent 6a638e56cf
commit 72597ce81f
3 changed files with 30 additions and 2 deletions

View File

@@ -840,6 +840,29 @@ class PlateOrderByProcessNodeV2APITest(TestCase):
self.assertEqual(resp.data['count'], 0)
self.assertEqual(resp.data['results'], [])
def test_param_filter_supports_fuzzy_match(self):
log = stateflow_models.StateFlowRecord.objects.filter(
business_object=self.po_state3.business_object,
state=self.state2,
is_cancelled=False,
).first()
stateflow_models.StateLogParameterRecord.objects.create(
state_log=log,
parameters={'temperature': '30C'},
)
resp = self.client.get(
self.url,
{
'process_node_id': self.node2.id,
'param_key': 'temperature',
'param_value': '30',
},
)
self.assertEqual(resp.status_code, 200)
ids = [item['id'] for item in resp.data['results']]
self.assertEqual(ids, [self.po_state3.id])
def test_date_filter_requires_both(self):
resp = self.client.get(self.url, {'process_node_id': self.node2.id, 'date_from': '2026-02-01'})
self.assertEqual(resp.status_code, 400)

View File

@@ -4,6 +4,7 @@ from django.utils import timezone
from django.db import transaction
from django.db import models as django_models
from django.db.models import Q, Count, CharField, Prefetch, Exists, OuterRef, Subquery
from django.db.models.fields.json import KeyTextTransform
from django.db.models.functions import Cast, Coalesce
from rest_framework import serializers, status, permissions
from rest_framework.pagination import LimitOffsetPagination
@@ -577,7 +578,11 @@ class PlateOrderByProcessNodeView(APIView):
business_object_id=OuterRef('business_object_id'),
state_id=target_state_id,
is_cancelled=False,
parameter_records__parameters__contains={param_key: param_value},
parameter_records__parameters__has_key=param_key,
).annotate(
_param_value=KeyTextTransform(param_key, 'parameter_records__parameters')
).filter(
_param_value__icontains=param_value,
)
queryset = queryset.annotate(_has_state_param=Exists(matching_logs)).filter(_has_state_param=True)

View File

@@ -26,7 +26,7 @@
### param_key / param_value 过滤说明
- 必须成对提供,否则返回 400。
- 过滤语义存在任意一次“未撤销”的目标节点状态日志StateFlowRecord.is_cancelled=false其参数记录包含 {param_key: param_value} 即命中。
- 过滤语义存在任意一次“未撤销”的目标节点状态日志StateFlowRecord.is_cancelled=false其参数记录包含 param_key,且对应值 **模糊匹配** param_value 即命中icontains
## 返回结构
```