1
0
forked from erp-dev/erp

patch: patch testing (api & services)

This commit is contained in:
2025-11-17 10:10:32 +08:00
parent 9c38e2ac09
commit 02a1b77e19
10 changed files with 337 additions and 102 deletions

View File

@@ -257,12 +257,15 @@ class PrintingJobViewSet(viewsets.ModelViewSet):
create: 创建款式明细
update: 更新款式明细
partial_update: 部分更新款式明细
advance_to_next_state: 推进到下一个状态
step_back_one_state: 回退一步
completed_states: 查询已完成的流程列表
timeline: 获取流程时间线
注意:状态流转功能已迁移至 stateflow 模块的业务对象接口
- 推进到下一步: POST /api/v1/stateflow/business-objects/{business_object_id}/advance/
- 回退一步: POST /api/v1/stateflow/business-objects/{business_object_id}/step_back/
注意:状态流转接口是对 stateflow 模块的便捷包装
- 前端只需提供 printing_job 的 ID
- 系统会自动查找关联的 business_object 并进行状态流转
- 也可以直接使用 stateflow 的原始接口(需要 business_object_id
查询参数:
- printing_order: 印染订单ID
@@ -308,6 +311,86 @@ class PrintingJobViewSet(viewsets.ModelViewSet):
status=status.HTTP_405_METHOD_NOT_ALLOWED
)
@action(detail=True, methods=['post'], url_path='advance-to-next-state')
def advance_to_next_state(self, request, pk=None):
"""
推进到下一个状态
将印染任务推进到下一个流程状态
注意:这是对 stateflow.BusinessObject.advance 接口的便捷包装,
自动通过 printing_job 查找关联的 business_object 并调用状态流转服务。
前端只需提供 printing_job 的 ID无需关心 business_object_id。
"""
job = self.get_object()
if not job.business_object:
return Response(
{'detail': '该任务没有关联的流程实例'},
status=status.HTTP_400_BAD_REQUEST
)
# 调用 stateflow 统一服务进行状态流转
from stateflow import services as stateflow_services
success, message, state_log = stateflow_services.advance_to_next_state(
job.business_object, request.user
)
if not success:
return Response(
{'detail': message},
status=status.HTTP_400_BAD_REQUEST
)
# 重新获取 job 以刷新状态
job.refresh_from_db()
serializer = PrintingJobDetailSerializer(job)
return Response({
'detail': message,
'data': serializer.data
})
@action(detail=True, methods=['post'], url_path='step-back-one-state')
def step_back_one_state(self, request, pk=None):
"""
回退一步
将印染任务回退到上一个流程状态
注意:这是对 stateflow.BusinessObject.step_back 接口的便捷包装,
自动通过 printing_job 查找关联的 business_object 并调用状态流转服务。
前端只需提供 printing_job 的 ID无需关心 business_object_id。
"""
job = self.get_object()
if not job.business_object:
return Response(
{'detail': '该任务没有关联的流程实例'},
status=status.HTTP_400_BAD_REQUEST
)
# 调用 stateflow 统一服务进行状态回退
from stateflow import services as stateflow_services
success, message = stateflow_services.step_back_one_state(
job.business_object, request.user
)
if not success:
return Response(
{'detail': message},
status=status.HTTP_400_BAD_REQUEST
)
# 重新获取 job 以刷新状态
job.refresh_from_db()
serializer = PrintingJobDetailSerializer(job)
return Response({
'detail': message,
'data': serializer.data
})
@action(detail=True, methods=['get'], url_path='completed-states')
def completed_states(self, request, pk=None):
"""
@@ -452,12 +535,15 @@ class PlateOrderViewSet(viewsets.ModelViewSet):
partial_update: 部分更新开版订单
invalidate: 作废开版订单
activate: 恢复开版订单
advance_to_next_state: 推进到下一个状态(便捷包装)
step_back_one_state: 回退一步(便捷包装)
completed_states: 查询已完成的流程列表
timeline: 获取流程时间线
注意:状态流转功能已迁移至 stateflow 模块的业务对象接口
- 推进到下一步: POST /api/v1/stateflow/business-objects/{business_object_id}/advance/
- 回退一步: POST /api/v1/stateflow/business-objects/{business_object_id}/step_back/
注意:状态流转接口是对 stateflow 模块的便捷包装
- 前端只需提供 plate_order 的 ID
- 系统会自动查找关联的 business_object 并进行状态流转
- 也可以直接使用 stateflow 的原始接口(需要 business_object_id
查询参数:
- customer: 客户ID
@@ -587,6 +673,86 @@ class PlateOrderViewSet(viewsets.ModelViewSet):
'data': serializer.data
})
@action(detail=True, methods=['post'], url_path='advance-to-next-state')
def advance_to_next_state(self, request, pk=None):
"""
推进到下一个状态
将开版订单推进到下一个流程状态
注意:这是对 stateflow.BusinessObject.advance 接口的便捷包装,
自动通过 plate_order 查找关联的 business_object 并调用状态流转服务。
"""
plate_order = self.get_object()
if not plate_order.business_object:
return Response(
{'detail': '该开版订单没有关联的流程实例'},
status=status.HTTP_400_BAD_REQUEST
)
# 调用 stateflow 统一服务进行状态流转
from stateflow import services as stateflow_services
success, message, state_log = stateflow_services.advance_to_next_state(
plate_order.business_object, request.user
)
if not success:
return Response(
{'detail': message},
status=status.HTTP_400_BAD_REQUEST
)
# 重新获取 plate_order 以刷新状态
plate_order.refresh_from_db()
from .serializers import PlateOrderDetailSerializer
serializer = PlateOrderDetailSerializer(plate_order, context={'request': request})
return Response({
'detail': message,
'data': serializer.data
})
@action(detail=True, methods=['post'], url_path='step-back-one-state')
def step_back_one_state(self, request, pk=None):
"""
回退一步
将开版订单回退到上一个流程状态
注意:这是对 stateflow.BusinessObject.step_back 接口的便捷包装,
自动通过 plate_order 查找关联的 business_object 并调用状态流转服务。
"""
plate_order = self.get_object()
if not plate_order.business_object:
return Response(
{'detail': '该开版订单没有关联的流程实例'},
status=status.HTTP_400_BAD_REQUEST
)
# 调用 stateflow 统一服务进行状态回退
from stateflow import services as stateflow_services
success, message = stateflow_services.step_back_one_state(
plate_order.business_object, request.user
)
if not success:
return Response(
{'detail': message},
status=status.HTTP_400_BAD_REQUEST
)
# 重新获取 plate_order 以刷新状态
plate_order.refresh_from_db()
from .serializers import PlateOrderDetailSerializer
serializer = PlateOrderDetailSerializer(plate_order, context={'request': request})
return Response({
'detail': message,
'data': serializer.data
})
@action(detail=True, methods=['get'], url_path='completed-states')
def completed_states(self, request, pk=None):
"""