1
0
forked from erp-dev/erp

feat: added fields like plate_order api into printing jobs api

This commit is contained in:
2026-01-06 11:59:37 +08:00
parent 5a40c07345
commit 2ecfc8dd06
5 changed files with 79 additions and 24 deletions

View File

@@ -258,8 +258,12 @@ class PrintingJobListSerializer(serializers.ModelSerializer):
product_name = serializers.CharField(source='product.name', read_only=True)
product_image_url = serializers.SerializerMethodField()
status = serializers.CharField(read_only=True)
status_id = serializers.IntegerField(read_only=True)
work_state_display = serializers.SerializerMethodField()
is_completed = serializers.BooleanField(read_only=True)
has_started = serializers.BooleanField(read_only=True)
progress_percentage = serializers.FloatField(read_only=True)
last_completed_state = serializers.CharField(read_only=True)
business_object_id = serializers.SerializerMethodField()
batch_advance_records = serializers.SerializerMethodField()
@@ -270,11 +274,17 @@ class PrintingJobListSerializer(serializers.ModelSerializer):
'product_image_url',
'quantity', 'unit', 'size', 'pieces', 'description',
'work_state', 'work_state_display',
'status', 'is_completed', 'business_object_id',
'status', 'status_id', 'is_completed', 'has_started',
'progress_percentage', 'last_completed_state',
'business_object_id',
'batch_advance_records',
'created_at', 'updated_at'
]
read_only_fields = ['id', 'created_at', 'updated_at', 'status', 'is_completed', 'business_object_id']
read_only_fields = [
'id', 'created_at', 'updated_at',
'status', 'status_id', 'is_completed', 'has_started',
'progress_percentage', 'last_completed_state', 'business_object_id'
]
def get_business_object_id(self, obj):
"""安全地获取 business_object_id"""

View File

@@ -85,6 +85,10 @@ services:
DB_PASSWORD: postgres
CACHE_HOST: redis
CACHE_PORT: "6379"
# Celery BrokerRabbitMQ连接容器内用服务名访问宿主机运行时默认 localhost:5672
CELERY_BROKER_HOST: rabbitmq
# Celery Result BackendRedis连接容器内用服务名访问宿主机运行时默认 localhost:6379
CELERY_RESULT_HOST: redis
depends_on:
- pgbouncer
- redis
@@ -112,14 +116,15 @@ services:
- redis
- rabbitmq
environment:
CELERY_BROKER_URL: amqp://guest:guest@rabbitmq:5672//
CELERY_RESULT_BACKEND: redis://redis:6379/0
PYTHONPATH: /app
DB_HOST: pgbouncer
DB_PORT: "6432"
DB_NAME: flower
DB_USER: postgres
DB_PASSWORD: postgres
# Celery 连接配置:容器内用服务名访问
CELERY_BROKER_HOST: rabbitmq
CELERY_RESULT_HOST: redis
restart: unless-stopped
celery_beat:
@@ -151,8 +156,9 @@ services:
DB_NAME: flower
DB_USER: postgres
DB_PASSWORD: postgres
CELERY_BROKER_URL: amqp://guest:guest@rabbitmq:5672//
CELERY_RESULT_BACKEND: redis://redis:6379/0
# Celery 连接配置:容器内用服务名访问
CELERY_BROKER_HOST: rabbitmq
CELERY_RESULT_HOST: redis
restart: unless-stopped
volumes:

View File

@@ -68,10 +68,17 @@ services:
DB_NAME: "${DB_NAME:-flower}"
DB_USER: "${DB_USER:-postgres}"
DB_PASSWORD: "${DB_PASSWORD:-postgres}"
CELERY_BROKER_URL: "${CELERY_BROKER_URL:-amqp://guest:guest@rabbitmq:5672//}"
CELERY_RESULT_BACKEND: "${CELERY_RESULT_BACKEND:-redis://redis:6379/0}"
CACHE_HOST: ${CACHE_HOST:-redis}
CACHE_PORT: "${CACHE_PORT:-6379}"
# Celery BrokerRabbitMQ连接容器内用服务名访问
CELERY_BROKER_HOST: ${CELERY_BROKER_HOST:-rabbitmq}
CELERY_BROKER_PORT: "${CELERY_BROKER_PORT:-5672}"
CELERY_BROKER_USER: "${CELERY_BROKER_USER:-guest}"
CELERY_BROKER_PASSWORD: "${CELERY_BROKER_PASSWORD:-guest}"
# Celery Result BackendRedis连接容器内用服务名访问
CELERY_RESULT_HOST: ${CELERY_RESULT_HOST:-redis}
CELERY_RESULT_PORT: "${CELERY_RESULT_PORT:-6379}"
CELERY_RESULT_DB: "${CELERY_RESULT_DB:-1}"
depends_on:
- pgbouncer
- redis
@@ -97,8 +104,14 @@ services:
DB_NAME: "${DB_NAME:-flower}"
DB_USER: "${DB_USER:-postgres}"
DB_PASSWORD: "${DB_PASSWORD:-postgres}"
CELERY_BROKER_URL: "${CELERY_BROKER_URL:-amqp://guest:guest@rabbitmq:5672//}"
CELERY_RESULT_BACKEND: "${CELERY_RESULT_BACKEND:-redis://redis:6379/0}"
# Celery 连接配置:容器内用服务名访问
CELERY_BROKER_HOST: ${CELERY_BROKER_HOST:-rabbitmq}
CELERY_BROKER_PORT: "${CELERY_BROKER_PORT:-5672}"
CELERY_BROKER_USER: "${CELERY_BROKER_USER:-guest}"
CELERY_BROKER_PASSWORD: "${CELERY_BROKER_PASSWORD:-guest}"
CELERY_RESULT_HOST: ${CELERY_RESULT_HOST:-redis}
CELERY_RESULT_PORT: "${CELERY_RESULT_PORT:-6379}"
CELERY_RESULT_DB: "${CELERY_RESULT_DB:-1}"
# 数据库备份输出目录api_v1.tasks.backup_database 默认输出到 BASE_DIR/data-bak
volumes:
# 默认落在 compose 同级目录的 ./data-bak方便宿主机直接查看/拷贝
@@ -130,8 +143,14 @@ services:
DB_NAME: "${DB_NAME:-flower}"
DB_USER: "${DB_USER:-postgres}"
DB_PASSWORD: "${DB_PASSWORD:-postgres}"
CELERY_BROKER_URL: "${CELERY_BROKER_URL:-amqp://guest:guest@rabbitmq:5672//}"
CELERY_RESULT_BACKEND: "${CELERY_RESULT_BACKEND:-redis://redis:6379/0}"
# Celery 连接配置:容器内用服务名访问
CELERY_BROKER_HOST: ${CELERY_BROKER_HOST:-rabbitmq}
CELERY_BROKER_PORT: "${CELERY_BROKER_PORT:-5672}"
CELERY_BROKER_USER: "${CELERY_BROKER_USER:-guest}"
CELERY_BROKER_PASSWORD: "${CELERY_BROKER_PASSWORD:-guest}"
CELERY_RESULT_HOST: ${CELERY_RESULT_HOST:-redis}
CELERY_RESULT_PORT: "${CELERY_RESULT_PORT:-6379}"
CELERY_RESULT_DB: "${CELERY_RESULT_DB:-1}"
# Celery Beat 的持久化调度文件,避免重启后重复/错过调度
volumes:
- celery_beat_data:/var/lib/celery

View File

@@ -88,6 +88,10 @@ services:
# 缓存Redis连接容器内用服务名访问宿主机运行时默认 localhost:6379
CACHE_HOST: redis
CACHE_PORT: "6379"
# Celery BrokerRabbitMQ连接容器内用服务名访问宿主机运行时默认 localhost:5672
CELERY_BROKER_HOST: rabbitmq
# Celery Result BackendRedis连接容器内用服务名访问宿主机运行时默认 localhost:6379
CELERY_RESULT_HOST: redis
depends_on:
- pgbouncer
- redis
@@ -116,14 +120,15 @@ services:
- redis
- rabbitmq
environment:
CELERY_BROKER_URL: amqp://guest:guest@rabbitmq:5672//
CELERY_RESULT_BACKEND: redis://redis:6379/0
PYTHONPATH: /app
DB_HOST: pgbouncer
DB_PORT: "6432"
DB_NAME: flower
DB_USER: postgres
DB_PASSWORD: postgres
# Celery 连接配置:容器内用服务名访问
CELERY_BROKER_HOST: rabbitmq
CELERY_RESULT_HOST: redis
restart: unless-stopped
celery_beat:
@@ -153,8 +158,9 @@ services:
DB_NAME: flower
DB_USER: postgres
DB_PASSWORD: postgres
CELERY_BROKER_URL: amqp://guest:guest@rabbitmq:5672//
CELERY_RESULT_BACKEND: redis://redis:6379/0
# Celery 连接配置:容器内用服务名访问
CELERY_BROKER_HOST: rabbitmq
CELERY_RESULT_HOST: redis
restart: unless-stopped
volumes:

View File

@@ -402,14 +402,28 @@ PRINTING_DEFAULT_PROCESS_ID = 1 # 默认印染流程ID
PLATE_ORDER_DEFAULT_PROCESS_ID = 2 # 默认开版流程ID
# Celery 配置
CELERY_BROKER_URL = env(
'CELERY_BROKER_URL',
default='amqp://guest:guest@rabbitmq:5672//',
)
CELERY_RESULT_BACKEND = env(
'CELERY_RESULT_BACKEND',
default='redis://redis:6379/0',
)
# RabbitMQ Broker 配置:优先使用 CELERY_BROKER_URL,否则从各组件构建
# 默认 localhost适合宿主机运行Docker Compose 可通过环境变量指定 CELERY_BROKER_HOST=rabbitmq
celery_broker_url = env('CELERY_BROKER_URL', default=None)
if celery_broker_url is None:
celery_broker_host = env('CELERY_BROKER_HOST', default='localhost')
celery_broker_port = env.int('CELERY_BROKER_PORT', default=5672)
celery_broker_user = env('CELERY_BROKER_USER', default='guest')
celery_broker_password = env('CELERY_BROKER_PASSWORD', default='guest')
celery_broker_vhost = env('CELERY_BROKER_VHOST', default='/')
celery_broker_url = f'amqp://{celery_broker_user}:{celery_broker_password}@{celery_broker_host}:{celery_broker_port}/{celery_broker_vhost}'
CELERY_BROKER_URL = celery_broker_url
# Celery Result Backend 配置:优先使用 CELERY_RESULT_BACKEND否则从各组件构建
# 默认使用与 Cache 相同的 Redis 实例Docker Compose 可通过环境变量指定 CELERY_RESULT_HOST=redis
celery_result_url = env('CELERY_RESULT_BACKEND', default=None)
if celery_result_url is None:
celery_result_host = env('CELERY_RESULT_HOST', default='localhost')
celery_result_port = env.int('CELERY_RESULT_PORT', default=6379)
celery_result_db = env.int('CELERY_RESULT_DB', default=1) # 使用 db=1与 Cache 的 db=0 区分
celery_result_url = f'redis://{celery_result_host}:{celery_result_port}/{celery_result_db}'
CELERY_RESULT_BACKEND = celery_result_url
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'