This commit is contained in:
2026-01-28 16:50:40 +08:00
parent f755422cb3
commit beb8c2d25b
202 changed files with 1016 additions and 186 deletions

View File

@@ -23,6 +23,7 @@ from apps.project.schemas.design import DeleteSchema, DesignFilterSchema, Design
from apps.project.tools.delete_change_key import design_delete_sub_node_key
from utils.smallTools.interfaceTools import conditionNoneToBlank
from apps.project.tools.auto_create_data import auto_create_renji
from apps.project.tool.dragAndDrop import DesignDrapAtoB
@api_controller("/project", auth=JWTAuth(), permissions=[IsAuthenticated], tags=['设计需求数据'])
class DesignController(ControllerBase):
@@ -66,7 +67,10 @@ class DesignController(ControllerBase):
# 处理树状数据
@route.get("/getDesignDemandInfo", response=List[DesignTreeReturnSchema], url_name="design-info")
def get_design_tree(self, payload: DesignTreeInputSchema = Query(...)):
qs = Design.objects.filter(project__id=payload.project_id, dut__key=payload.key).order_by('id')
qs = Design.objects.filter(
project__id=payload.project_id,
dut__key=payload.key
).select_related('project', 'dut')
return qs
# 添加设计需求
@@ -241,3 +245,24 @@ class DesignController(ControllerBase):
# 最后记得save
new_design_obj.save()
return ChenResponse(status=200, code=200, message='复制当前设计需求成功', data="")
# 拖拽更变desing的key同dut下其他design也变动
@route.get("/switch_position", url_name='design-switch-position')
@transaction.atomic
def switch_position(self, from_key: str, to_key: str, pos: int, project_id: int):
from_key_list = from_key.split("-")
to_key_list = to_key.split("-")
# 如果两个设计需求被测件或轮次不一样则报错
if from_key_list[:-1] != to_key_list[:-1]:
return ChenResponse(status=422, code=40022, message="无法交换不同父节点的设计需求")
# 先查询两个design
from_design_obj: Design = Design.objects.filter(key=from_key, project_id=project_id).first()
to_design_obj: Design = Design.objects.filter(key=to_key, project_id=project_id).first()
if not from_design_obj or not to_design_obj:
return ChenResponse(status=404, code=40004, message="设计需求不存在")
# 获取父节点下所有design
parant_dut = from_design_obj.dut
design_qs = parant_dut.rsField.all()
# 根据pos将from排到后面
return_key = DesignDrapAtoB(from_design_obj, to_design_obj, design_qs, pos)
return ChenResponse(status=200, data=return_key)

View File

@@ -0,0 +1,43 @@
from django.db.models import QuerySet
from apps.project.models import Design, TestDemand
from typing import Union
def DesignDrapAtoB(a: Design,
b: Design,
origin_qs: QuerySet[Design, Design],
pos: Union[-1 | 1]) -> str:
"""该函数传入拖拽design和释放到的design然后更改排序完成key的重新设置"""
# 判断是移动到b前面还是后面
list_qs = list(origin_qs)
list_qs.remove(a)
b_index = list_qs.index(b)
if pos == -1:
list_qs.insert(b_index, a)
elif pos == 1:
list_qs.insert(b_index + 1, a)
# 重新完成排序后调整key
prefix = "".join([a.dut.key, "-"])
for index, obj in enumerate(list_qs):
obj.key = "".join([prefix, str(index)])
# 需要测试项调整key
designConvertDemadnKey(obj)
obj.save()
return a.key
def designConvertDemadnKey(desgin_obj: Design):
"""传入Design对象集体修改demand和case的key"""
for demand in desgin_obj.dtField.all():
design_key = desgin_obj.key
demand_last_key = demand.key.split("-")[-1]
demand.key = "-".join([design_key, demand_last_key])
demandConvertCaseKey(demand)
demand.save()
def demandConvertCaseKey(demand_obj:TestDemand):
"""传入Demand对象集体修改case的key"""
for case in demand_obj.tcField.all():
demand_key = demand_obj.key
case_last_key = case.key.split("-")[-1]
case.key = "-".join([demand_key, case_last_key])
case.save()