Compare commits

..

2 Commits

Author SHA1 Message Date
caoqianming 1c203325fc release: 3.1.2026072309
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 09:19:34 +08:00
caoqianming 3561a50647 feat:工艺路线Route创建/更新时未指定输出物料且工艺包无产品直接报错,不再静默生成残缺工序;补material_in_type字段供画布按物料真实类型着色
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 09:15:26 +08:00
3 changed files with 15 additions and 1 deletions

View File

@ -177,6 +177,8 @@ class RouteSerializer(CustomModelSerializer):
process_cate = serializers.CharField(source='process.cate', read_only=True) process_cate = serializers.CharField(source='process.cate', read_only=True)
material_in_name = serializers.StringRelatedField( material_in_name = serializers.StringRelatedField(
source='material_in', read_only=True) source='material_in', read_only=True)
material_in_type = serializers.CharField(
source='material_in.type', read_only=True)
material_out_name = serializers.StringRelatedField( material_out_name = serializers.StringRelatedField(
source='material_out', read_only=True) source='material_out', read_only=True)
material_out_type = serializers.CharField( material_out_type = serializers.CharField(
@ -268,6 +270,8 @@ class RouteSerializer(CustomModelSerializer):
# if material and process and Route.objects.filter(material=material, process=process).exists(): # if material and process and Route.objects.filter(material=material, process=process).exists():
# raise ValidationError('已选择该工序!!') # raise ValidationError('已选择该工序!!')
if not validated_data.get('material_out') and not validated_data.get('material'):
raise ParseError('未指定输出物料,且工艺包未设置产品无法自动生成;请指定输出物料,或先在工艺包基本信息中选择产品')
instance:Route = super().create(validated_data) instance:Route = super().create(validated_data)
material_out = instance.material_out material_out = instance.material_out
if material_out: if material_out:
@ -303,6 +307,8 @@ class RouteSerializer(CustomModelSerializer):
if material_out_tracking is None: if material_out_tracking is None:
material_out_tracking = Material.MA_TRACKING_BATCH material_out_tracking = Material.MA_TRACKING_BATCH
if not validated_data.get('material_out', instance.material_out) and not instance.material:
raise ParseError('未指定输出物料,且工艺包未设置产品无法自动生成;请指定输出物料,或先在工艺包基本信息中选择产品')
instance = super().update(instance, validated_data) instance = super().update(instance, validated_data)
material_out = instance.material_out material_out = instance.material_out
if material_out: if material_out:

View File

@ -1,3 +1,11 @@
## 3.1.2026072309
- feat: 新增功能
- 工艺路线Route创建/更新时未指定输出物料且工艺包无产品直接报错,不再静默生成残缺工序;补material_in_type字段供画布按物料真实类型着色 [caoqianming]
- 工艺路线新增validate接口,供拖拽画布实时校验DAG结构(不存盘,返回valid/error) [caoqianming]
- 物料新增入库检验方式test_mode_in(免检/必检,默认必检),生产领料检验卡点支持物料级免检,明细过滤器支持material__test_mode_in [caoqianming]
- other: 其他变更
- docs:新增优化算法切入点分析(排产/补货/合批/装箱等可优化环节盘点) [caoqianming]
## 3.1.2026071614 ## 3.1.2026071614
- feat: 新增功能 - feat: 新增功能

View File

@ -35,7 +35,7 @@ sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
ALLOWED_HOSTS = ['*'] ALLOWED_HOSTS = ['*']
SYS_NAME = '星途工厂综合管理系统' SYS_NAME = '星途工厂综合管理系统'
SYS_VERSION = '3.1.2026071614' SYS_VERSION = '3.1.2026072309'
X_FRAME_OPTIONS = 'SAMEORIGIN' X_FRAME_OPTIONS = 'SAMEORIGIN'
# Application definition # Application definition