diff --git a/backend/app.pid b/backend/app.pid index 818f60536..4e2c34243 100644 --- a/backend/app.pid +++ b/backend/app.pid @@ -1 +1 @@ -98717 +64042 diff --git a/backend/app/api/production.py b/backend/app/api/production.py index 53e937168..437a9e7a0 100644 --- a/backend/app/api/production.py +++ b/backend/app/api/production.py @@ -1368,6 +1368,20 @@ async def update_production_task( return error_response(400, str(e)) +@router.delete("/production-tasks/{task_id}") +async def delete_production_task( + task_id: str, + user: dict = Depends(require_admin_or_super_admin), + db: Session = Depends(get_db), +): + try: + tenant_no = _get_tenant_no(db, user) + production_task_svc.delete_production_task(db, task_id, tenant_no, user.get("user_id")) + return success_response(None, message="删除成功") + except ValueError as e: + return error_response(400, str(e)) + + @router.put("/production-tasks/{task_id}/status") async def update_production_task_status( task_id: str, diff --git a/backend/app/crud/production_task.py b/backend/app/crud/production_task.py index 535cdf133..fa1623885 100644 --- a/backend/app/crud/production_task.py +++ b/backend/app/crud/production_task.py @@ -10,6 +10,7 @@ from sqlalchemy.orm import Session from app.core.utils import generate_uuid from app.models.models import ( + BizCellProduct, BizCellSampleType, BizProcess, BizProcessConsumable, @@ -33,7 +34,10 @@ from app.models.models import ( BizProductionWorkOrder, BizProtocolSample, BizSampleReception, + BizStorageSlotOccupancy, ) +from app.crud import storage_occupancy as occupancy_svc +from app.crud.cell_product import _row_to_dict as _cp_row_to_dict, _enrich_product_dicts as _cp_enrich def _fmt_dt(t: Optional[datetime]) -> str: @@ -148,8 +152,8 @@ def _step_data_collection_to_dict(d: BizProductionTaskStepDataCollection) -> Dic } -def _task_input_to_dict(i: BizProductionTaskInput) -> Dict[str, Any]: - return { +def _task_input_to_dict(i: BizProductionTaskInput, *, product_dict: Optional[Dict[str, Any]] = None) -> Dict[str, Any]: + result = { "id": i.id, "taskId": i.task_id, "inputType": i.input_type or "", @@ -158,10 +162,20 @@ def _task_input_to_dict(i: BizProductionTaskInput) -> Dict[str, Any]: "inputName": i.input_name or "", "remark": i.remark or "", } + if product_dict: + for key in [ + "productCode", "productName", "productTypeId", "productTypeName", + "specId", "specName", "passage", "batchNo", "storageSlotName", + "expectedCellCount", "viability", "freezeDate", "expiryDate", + "productStatus", "productImages", "storageSlotId", + ]: + if key in product_dict: + result[key] = product_dict[key] + return result -def _task_output_to_dict(o: BizProductionTaskOutput) -> Dict[str, Any]: - return { +def _task_output_to_dict(o: BizProductionTaskOutput, *, product_dict: Optional[Dict[str, Any]] = None) -> Dict[str, Any]: + result = { "id": o.id, "taskId": o.task_id, "cellProductId": o.cell_product_id or "", @@ -173,6 +187,16 @@ def _task_output_to_dict(o: BizProductionTaskOutput) -> Dict[str, Any]: "remark": o.remark or "", "attachments": o.attachments or "", } + if product_dict: + for key in [ + "productCode", "productName", "productTypeId", "productTypeName", + "specId", "specName", "passage", "batchNo", "storageSlotName", + "expectedCellCount", "viability", "freezeDate", "expiryDate", + "productStatus", "productImages", + ]: + if key in product_dict: + result[key] = product_dict[key] + return result def _soft_delete_sub(db: Session, model_class, parent_field: str, parent_id: str, now: datetime) -> None: @@ -494,15 +518,46 @@ def get_production_task_detail(db: Session, task_id: str, tenant_no: str) -> Opt inputs = db.query(BizProductionTaskInput).filter( and_(BizProductionTaskInput.task_id == task_id, BizProductionTaskInput.del_flag == 0) - ).order_by(BizProductionTaskInput.create_time.asc()).all() + ).order_by(BizProductionTaskInput.order_num.asc(), BizProductionTaskInput.create_time.asc()).all() outputs = db.query(BizProductionTaskOutput).filter( and_(BizProductionTaskOutput.task_id == task_id, BizProductionTaskOutput.del_flag == 0) - ).order_by(BizProductionTaskOutput.create_time.asc()).all() + ).order_by(BizProductionTaskOutput.order_num.asc(), BizProductionTaskOutput.create_time.asc()).all() result["steps"] = step_list - result["inputs"] = [_task_input_to_dict(i) for i in inputs] - result["outputs"] = [_task_output_to_dict(o) for o in outputs] + + # --- enrich inputs with cell product info --- + input_dicts = [_task_input_to_dict(i) for i in inputs] + cp_input_ids = [i.input_id for i in inputs if i.input_type == "cell_product" and i.input_id] + input_product_map: Dict[str, Dict[str, Any]] = {} + if cp_input_ids: + cp_rows = db.query(BizCellProduct).filter( + BizCellProduct.id.in_(set(cp_input_ids)), BizCellProduct.del_flag == 0 + ).all() + cp_dicts = [_cp_row_to_dict(c) for c in cp_rows] + cp_dicts = _cp_enrich(db, tenant_no, cp_dicts) + input_product_map = {d["id"]: d for d in cp_dicts} + for idx, inp in enumerate(inputs): + if inp.input_type == "cell_product" and inp.input_id and inp.input_id in input_product_map: + input_dicts[idx] = _task_input_to_dict(inp, product_dict=input_product_map[inp.input_id]) + result["inputs"] = input_dicts + + # --- enrich outputs with cell product info --- + output_dicts = [_task_output_to_dict(o) for o in outputs] + cp_output_ids = [o.cell_product_id for o in outputs if o.cell_product_id] + output_product_map: Dict[str, Dict[str, Any]] = {} + if cp_output_ids: + cp_rows = db.query(BizCellProduct).filter( + BizCellProduct.id.in_(set(cp_output_ids)), BizCellProduct.del_flag == 0 + ).all() + cp_dicts = [_cp_row_to_dict(c) for c in cp_rows] + cp_dicts = _cp_enrich(db, tenant_no, cp_dicts) + output_product_map = {d["id"]: d for d in cp_dicts} + for idx, out in enumerate(outputs): + if out.cell_product_id and out.cell_product_id in output_product_map: + output_dicts[idx] = _task_output_to_dict(out, product_dict=output_product_map[out.cell_product_id]) + result["outputs"] = output_dicts + return result @@ -852,42 +907,265 @@ def set_task_inputs( user_id: Optional[str], items: List[Dict[str, Any]], ) -> None: now = datetime.now() + + # --- 1. 加载旧 inputs 并按 cell_product 恢复状态 --- + old_rows = db.query(BizProductionTaskInput).filter( + and_( + BizProductionTaskInput.task_id == task_id, + BizProductionTaskInput.del_flag == 0, + ) + ).all() + for old_row in old_rows: + # 如果是细胞产品,恢复状态 + if old_row.input_type == "cell_product" and old_row.input_id: + product = db.query(BizCellProduct).filter( + BizCellProduct.id == old_row.input_id, BizCellProduct.del_flag == 0 + ).first() + if product and product.product_status == "in_production": + product.product_status = "frozen" + product.update_by = user_id + product.update_time = now + db.add(product) + + # --- 2. 全量软删除旧行 --- _soft_delete_sub(db, BizProductionTaskInput, "task_id", task_id, now) - for it in items: + + # --- 3. 按传入顺序批量新建 --- + for idx, it in enumerate(items): + inp_type = (it.get("input_type") or it.get("inputType") or "").strip() + inp_id = (it.get("input_id") or it.get("inputId") or "").strip() + # 如果是细胞产品,设置状态为 in_production + if inp_type == "cell_product" and inp_id: + product = db.query(BizCellProduct).filter( + BizCellProduct.id == inp_id, BizCellProduct.del_flag == 0 + ).first() + if product and product.product_status in ("frozen", "thawed"): + product.product_status = "in_production" + product.update_by = user_id + product.update_time = now + db.add(product) db.add(BizProductionTaskInput( id=generate_uuid(), task_id=task_id, tenant_no=tenant_no, - input_type=(it.get("input_type") or "").strip() or None, - input_id=(it.get("input_id") or "").strip() or None, - input_code=(it.get("input_code") or "").strip() or None, - input_name=(it.get("input_name") or "").strip() or None, + input_type=inp_type or None, + input_id=inp_id or None, + input_code=(it.get("input_code") or it.get("inputCode") or "").strip() or None, + input_name=(it.get("input_name") or it.get("inputName") or "").strip() or None, remark=(it.get("remark") or "").strip() or None, - order_num=0, create_by=user_id, create_dept_id="", + order_num=idx, create_by=user_id, create_dept_id="", create_time=now, update_by=user_id, update_time=now, del_flag=0, )) + + db.flush() db.commit() +def _parse_optional_date(val): + """解析可选日期字符串""" + if not val: + return None + from dateutil.parser import parse as _parse_dt + try: + return _parse_dt(str(val)) + except Exception: + return None + + +def _create_occupancy_for_product(db: Session, product: BizCellProduct, tenant_no: str, user_id: Optional[str]): + """为细胞产品创建库位占用记录""" + if not product.storage_slot_id: + return + now = datetime.now() + occ = BizStorageSlotOccupancy( + id=generate_uuid(), + slot_id=product.storage_slot_id, + item_type="cell_product", + item_id=product.id, + item_code=product.product_code or "", + item_name=product.product_name or "", + item_source="production", + stored_at=now, + occupancy_status="stored", + tenant_no=tenant_no, + order_num=0, + remark=None, + create_by=user_id, + create_dept_id="", + create_time=now, + update_by=user_id, + update_time=now, + del_flag=0, + ) + db.add(occ) + db.flush() + occupancy_svc._refresh_slot_cache(db, product.storage_slot_id) + + +def _update_product_from_output(product: BizCellProduct, it: Dict[str, Any], user_id, now): + """从 output item 更新细胞产品字段""" + field_map = [ + ("product_name", "product_name", "productName"), + ("product_type_id", "product_type_id", "productTypeId"), + ("spec_id", "spec_id", "specId"), + ("batch_no", "batch_no", "batchNo"), + ("storage_slot_id", "storage_slot_id", "storageSlotId"), + ("unit", "unit", "unit"), + ("product_images", "product_images", "productImages"), + ("remark", "remark", "remark"), + ] + for db_field, snake_key, camel_key in field_map: + val = it.get(snake_key) if it.get(snake_key) is not None else it.get(camel_key) + if val is not None: + setattr(product, db_field, (str(val) or "").strip() or None) + for num_field, snake_key, camel_key in [ + ("expected_cell_count", "expected_cell_count", "expectedCellCount"), + ("viability", "viability", "viability"), + ]: + val = it.get(snake_key) + if val is None: + val = it.get(camel_key) + if val is not None: + setattr(product, num_field, val) + for date_field, snake_key, camel_key in [ + ("freeze_date", "freeze_date", "freezeDate"), + ("expiry_date", "expiry_date", "expiryDate"), + ]: + val = it.get(snake_key) or it.get(camel_key) + if val is not None: + setattr(product, date_field, _parse_optional_date(val)) + passage = it.get("passage") + if passage is not None: + product.passage = (str(passage) or "").strip() or None + quantity = it.get("quantity") + if quantity is not None: + product.quantity = quantity + product.update_by = user_id + product.update_time = now + + def set_task_outputs( db: Session, task_id: str, tenant_no: str, user_id: Optional[str], items: List[Dict[str, Any]], ) -> None: now = datetime.now() - _soft_delete_sub(db, BizProductionTaskOutput, "task_id", task_id, now) + + # --- 1. 加载旧 outputs --- + old_rows = db.query(BizProductionTaskOutput).filter( + and_( + BizProductionTaskOutput.task_id == task_id, + BizProductionTaskOutput.del_flag == 0, + ) + ).all() + old_cp_map: Dict[str, BizProductionTaskOutput] = {} + for o in old_rows: + if o.cell_product_id: + old_cp_map[o.cell_product_id] = o + + # --- 2. 构建新的 cp_id 集合 --- + new_cp_ids: set = set() for it in items: - quantity = it.get("quantity") - db.add(BizProductionTaskOutput( - id=generate_uuid(), task_id=task_id, tenant_no=tenant_no, - cell_product_id=(it.get("cell_product_id") or "").strip() or None, - storage_slot_id=(it.get("storage_slot_id") or "").strip() or None, - output_name=(it.get("output_name") or "").strip() or None, - output_barcode=(it.get("output_barcode") or "").strip() or None, - quantity=quantity if quantity is not None else None, - unit=(it.get("unit") or "").strip() or None, - remark=(it.get("remark") or "").strip() or None, - attachments=(it.get("attachments") or "").strip() or None, - order_num=0, create_by=user_id, create_dept_id="", - create_time=now, update_by=user_id, update_time=now, del_flag=0, - )) + cp_id = (it.get("cell_product_id") or it.get("cellProductId") or "").strip() + if cp_id: + new_cp_ids.add(cp_id) + + # --- 3. 处理删除(旧有新无) --- + for cp_id, old_row in old_cp_map.items(): + if cp_id not in new_cp_ids: + product = db.query(BizCellProduct).filter( + BizCellProduct.id == cp_id, BizCellProduct.del_flag == 0 + ).first() + if product: + product.product_status = "voided" + product.update_by = user_id + product.update_time = now + db.add(product) + if product.storage_slot_id: + occupancy_svc.remove_occupancy_by_item(db, "cell_product", cp_id, user_id=user_id) + old_row.del_flag = 1 + old_row.update_by = user_id + old_row.update_time = now + db.add(old_row) + + # --- 4. 处理新增和修改 --- + for idx, it in enumerate(items): + cp_id = (it.get("cell_product_id") or it.get("cellProductId") or "").strip() + + if cp_id and cp_id in old_cp_map: + # === 修改 === + product = db.query(BizCellProduct).filter( + BizCellProduct.id == cp_id, BizCellProduct.del_flag == 0 + ).first() + if product: + old_slot_id = product.storage_slot_id + _update_product_from_output(product, it, user_id, now) + new_slot_id = product.storage_slot_id + db.add(product) + if old_slot_id != new_slot_id: + if old_slot_id: + occupancy_svc.remove_occupancy_by_item(db, "cell_product", cp_id, user_id=user_id) + if new_slot_id: + _create_occupancy_for_product(db, product, tenant_no, user_id) + old_row = old_cp_map[cp_id] + old_row.output_name = product.product_name if product else "" + old_row.output_barcode = product.product_code if product else "" + old_row.storage_slot_id = product.storage_slot_id if product else None + old_row.quantity = it.get("quantity") + old_row.unit = (it.get("unit") or "").strip() or None + old_row.remark = (it.get("remark") or "").strip() or None + old_row.order_num = idx + old_row.update_by = user_id + old_row.update_time = now + db.add(old_row) + else: + # === 新增 === + product = BizCellProduct( + id=generate_uuid(), + product_code=(it.get("product_code") or it.get("productCode") or "").strip(), + product_name=(it.get("product_name") or it.get("productName") or "").strip(), + product_type_id=(it.get("product_type_id") or it.get("productTypeId") or "").strip() or None, + spec_id=(it.get("spec_id") or it.get("specId") or "").strip() or None, + passage=(it.get("passage") or "").strip() or None, + batch_no=(it.get("batch_no") or it.get("batchNo") or "").strip() or None, + storage_slot_id=(it.get("storage_slot_id") or it.get("storageSlotId") or "").strip() or None, + expected_cell_count=it.get("expected_cell_count") if it.get("expected_cell_count") is not None else it.get("expectedCellCount"), + viability=it.get("viability"), + freeze_date=_parse_optional_date(it.get("freeze_date") or it.get("freezeDate")), + product_status=it.get("product_status") or it.get("productStatus") or "frozen", + source_type="production", + production_task_id=task_id, + quantity=it.get("quantity"), + unit=(it.get("unit") or "").strip() or None, + expiry_date=_parse_optional_date(it.get("expiry_date") or it.get("expiryDate")), + product_images=(it.get("product_images") or it.get("productImages") or "").strip() or None, + tenant_no=tenant_no, + order_num=idx, + remark=(it.get("remark") or "").strip() or None, + create_by=user_id, + create_dept_id="", + create_time=now, + update_by=user_id, + update_time=now, + del_flag=0, + ) + db.add(product) + db.flush() + if product.storage_slot_id: + _create_occupancy_for_product(db, product, tenant_no, user_id) + output_row = BizProductionTaskOutput( + id=generate_uuid(), task_id=task_id, tenant_no=tenant_no, + cell_product_id=product.id, + storage_slot_id=product.storage_slot_id, + output_name=product.product_name or "", + output_barcode=product.product_code or "", + quantity=product.quantity, + unit=product.unit, + remark=product.remark, + attachments=(it.get("attachments") or "").strip() or None, + order_num=idx, create_by=user_id, create_dept_id="", + create_time=now, update_by=user_id, update_time=now, del_flag=0, + ) + db.add(output_row) + + db.flush() db.commit() @@ -1009,6 +1287,49 @@ def copy_task_step(db: Session, step_id: str, *, tenant_no: str = "zkxw", return _step_to_dict(new_step) +def delete_production_task(db: Session, task_id: str, tenant_no: str, user_id: Optional[str]) -> None: + """软删除生产任务及其所有子表数据(步骤 + 投入 + 产出)""" + task = db.query(BizProductionTask).filter( + and_( + BizProductionTask.id == task_id, + BizProductionTask.tenant_no == tenant_no, + BizProductionTask.del_flag == 0, + ) + ).first() + if not task: + raise ValueError("任务不存在") + + now = datetime.now() + + # 1. 软删除所有步骤及其子表 + steps = db.query(BizProductionTaskStep).filter( + and_(BizProductionTaskStep.task_id == task_id, BizProductionTaskStep.del_flag == 0) + ).all() + for step in steps: + step.del_flag = 1 + step.update_by = user_id + step.update_time = now + db.add(step) + _soft_delete_sub(db, BizProductionTaskStepReagent, "step_id", step.id, now) + _soft_delete_sub(db, BizProductionTaskStepConsumable, "step_id", step.id, now) + _soft_delete_sub(db, BizProductionTaskStepOutput, "step_id", step.id, now) + _soft_delete_sub(db, BizProductionTaskStepDataCollection, "step_id", step.id, now) + + # 2. 软删除投入 + _soft_delete_sub(db, BizProductionTaskInput, "task_id", task_id, now) + + # 3. 软删除产出 + _soft_delete_sub(db, BizProductionTaskOutput, "task_id", task_id, now) + + # 4. 软删除任务本体 + task.del_flag = 1 + task.update_by = user_id + task.update_time = now + db.add(task) + + db.commit() + + def total_pages(total: int, page_size: int) -> int: if total <= 0: return 0 diff --git a/backend/app/graphify-out/cache/ast/16e941c8bdf4d06c84c68e5175cd814883fab1c2a91959af914220cd31dd3213.json b/backend/app/graphify-out/cache/ast/16e941c8bdf4d06c84c68e5175cd814883fab1c2a91959af914220cd31dd3213.json new file mode 100644 index 000000000..f1373df7a --- /dev/null +++ b/backend/app/graphify-out/cache/ast/16e941c8bdf4d06c84c68e5175cd814883fab1c2a91959af914220cd31dd3213.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "label": "production.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1"}, {"id": "api_production_get_tenant_no", "label": "_get_tenant_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L54"}, {"id": "api_production_consumablecreatebody", "label": "ConsumableCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L67"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_production_consumableupdatebody", "label": "ConsumableUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L79"}, {"id": "api_production_list_consumables", "label": "list_consumables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L92"}, {"id": "api_production_list_all_consumables", "label": "list_all_consumables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L106"}, {"id": "api_production_create_consumable", "label": "create_consumable()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L116"}, {"id": "api_production_update_consumable", "label": "update_consumable()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L142"}, {"id": "api_production_delete_consumable", "label": "delete_consumable()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L169"}, {"id": "api_production_reagentcreatebody", "label": "ReagentCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L186"}, {"id": "api_production_reagentupdatebody", "label": "ReagentUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L198"}, {"id": "api_production_list_reagents", "label": "list_reagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L211"}, {"id": "api_production_list_all_reagents", "label": "list_all_reagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L225"}, {"id": "api_production_create_reagent", "label": "create_reagent()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L235"}, {"id": "api_production_update_reagent", "label": "update_reagent()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L261"}, {"id": "api_production_delete_reagent", "label": "delete_reagent()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L288"}, {"id": "api_production_sopdocumentcreatebody", "label": "SopDocumentCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L305"}, {"id": "api_production_sopdocumentupdatebody", "label": "SopDocumentUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L315"}, {"id": "api_production_list_sop_documents", "label": "list_sop_documents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L326"}, {"id": "api_production_list_all_sop_documents", "label": "list_all_sop_documents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L340"}, {"id": "api_production_create_sop_document", "label": "create_sop_document()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L350"}, {"id": "api_production_update_sop_document", "label": "update_sop_document()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L377"}, {"id": "api_production_delete_sop_document", "label": "delete_sop_document()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L406"}, {"id": "api_production_processcategorycreatebody", "label": "ProcessCategoryCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L423"}, {"id": "api_production_processcategoryupdatebody", "label": "ProcessCategoryUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L431"}, {"id": "api_production_list_process_categories", "label": "list_process_categories()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L440"}, {"id": "api_production_list_all_process_categories", "label": "list_all_process_categories()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L454"}, {"id": "api_production_create_process_category", "label": "create_process_category()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L464"}, {"id": "api_production_update_process_category", "label": "update_process_category()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L486"}, {"id": "api_production_delete_process_category", "label": "delete_process_category()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L509"}, {"id": "api_production_outputtypecreatebody", "label": "OutputTypeCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L526"}, {"id": "api_production_outputtypeupdatebody", "label": "OutputTypeUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L534"}, {"id": "api_production_list_output_types", "label": "list_output_types()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L543"}, {"id": "api_production_list_all_output_types", "label": "list_all_output_types()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L557"}, {"id": "api_production_create_output_type", "label": "create_output_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L567"}, {"id": "api_production_update_output_type", "label": "update_output_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L589"}, {"id": "api_production_delete_output_type", "label": "delete_output_type()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L612"}, {"id": "api_production_packiteminput", "label": "PackItemInput", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L629"}, {"id": "api_production_consumablepackcreatebody", "label": "ConsumablePackCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L639"}, {"id": "api_production_consumablepackupdatebody", "label": "ConsumablePackUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L651"}, {"id": "api_production_list_consumable_packs", "label": "list_consumable_packs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L664"}, {"id": "api_production_list_all_consumable_packs", "label": "list_all_consumable_packs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L678"}, {"id": "api_production_get_consumable_pack_detail", "label": "get_consumable_pack_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L688"}, {"id": "api_production_create_consumable_pack", "label": "create_consumable_pack()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L700"}, {"id": "api_production_update_consumable_pack", "label": "update_consumable_pack()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L727"}, {"id": "api_production_delete_consumable_pack", "label": "delete_consumable_pack()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L755"}, {"id": "api_production_processreagentinput", "label": "ProcessReagentInput", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L772"}, {"id": "api_production_processconsumableinput", "label": "ProcessConsumableInput", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L783"}, {"id": "api_production_processoutputinput", "label": "ProcessOutputInput", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L794"}, {"id": "api_production_processdatacollectioninput", "label": "ProcessDataCollectionInput", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L802"}, {"id": "api_production_processcreatebody", "label": "ProcessCreateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L810"}, {"id": "api_production_processupdatebody", "label": "ProcessUpdateBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L827"}, {"id": "api_production_list_processes", "label": "list_processes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L845"}, {"id": "api_production_list_all_processes", "label": "list_all_processes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L859"}, {"id": "api_production_get_process_detail", "label": "get_process_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L869"}, {"id": "api_production_create_process", "label": "create_process()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L881"}, {"id": "api_production_update_process", "label": "update_process()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L923"}, {"id": "api_production_delete_process", "label": "delete_process()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L966"}, {"id": "api_production_list_process_routes", "label": "list_process_routes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L984"}, {"id": "api_production_get_process_route_detail", "label": "get_process_route_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1005"}, {"id": "api_production_create_process_route", "label": "create_process_route()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1017"}, {"id": "api_production_update_process_route", "label": "update_process_route()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1040"}, {"id": "api_production_set_current_process_route", "label": "set_current_process_route()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1063"}, {"id": "api_production_delete_process_route", "label": "delete_process_route()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1077"}, {"id": "api_production_add_route_step", "label": "add_route_step()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1092"}, {"id": "api_production_copy_route_step", "label": "copy_route_step()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1113"}, {"id": "api_production_update_route_step", "label": "update_route_step()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1132"}, {"id": "api_production_reorder_route_steps", "label": "reorder_route_steps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1147"}, {"id": "api_production_delete_route_step", "label": "delete_route_step()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1160"}, {"id": "api_production_update_step_reagents", "label": "update_step_reagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1175"}, {"id": "api_production_update_step_consumables", "label": "update_step_consumables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1190"}, {"id": "api_production_update_step_outputs", "label": "update_step_outputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1205"}, {"id": "api_production_update_step_data_collections", "label": "update_step_data_collections()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1220"}, {"id": "api_production_list_production_work_orders", "label": "list_production_work_orders()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1240"}, {"id": "api_production_get_production_work_order", "label": "get_production_work_order()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1267"}, {"id": "api_production_complete_production_work_order", "label": "complete_production_work_order()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1280"}, {"id": "api_production_create_production_task", "label": "create_production_task()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1302"}, {"id": "api_production_list_production_tasks", "label": "list_production_tasks()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1321"}, {"id": "api_production_get_production_task_detail", "label": "get_production_task_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1341"}, {"id": "api_production_update_production_task", "label": "update_production_task()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1354"}, {"id": "api_production_delete_production_task", "label": "delete_production_task()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1372"}, {"id": "api_production_update_production_task_status", "label": "update_production_task_status()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1386"}, {"id": "api_production_add_production_task_step", "label": "add_production_task_step()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1403"}, {"id": "api_production_update_production_task_step", "label": "update_production_task_step()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1421"}, {"id": "api_production_delete_production_task_step", "label": "delete_production_task_step()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1440"}, {"id": "api_production_reorder_production_task_steps", "label": "reorder_production_task_steps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1455"}, {"id": "api_production_copy_production_task_step", "label": "copy_production_task_step()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1468"}, {"id": "api_production_replace_task_step_reagents", "label": "replace_task_step_reagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1488"}, {"id": "api_production_replace_task_step_consumables", "label": "replace_task_step_consumables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1517"}, {"id": "api_production_replace_task_step_data_collections", "label": "replace_task_step_data_collections()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1546"}, {"id": "api_production_replace_task_step_outputs", "label": "replace_task_step_outputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1563"}, {"id": "api_production_set_production_task_inputs", "label": "set_production_task_inputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1580"}, {"id": "api_production_set_production_task_outputs", "label": "set_production_task_outputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1596"}, {"id": "api_production_get_next_cell_product_code", "label": "get_next_cell_product_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1617"}, {"id": "api_production_list_cell_products", "label": "list_cell_products()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1631"}, {"id": "api_production_get_cell_product_detail", "label": "get_cell_product_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1659"}, {"id": "api_production_create_cell_product", "label": "create_cell_product()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1672"}, {"id": "api_production_update_cell_product", "label": "update_cell_product()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1721"}, {"id": "api_production_delete_cell_product", "label": "delete_cell_product()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1740"}, {"id": "api_production_rationale_1", "label": "\u751f\u4ea7\u7ba1\u7406 API \u8def\u7531\uff087 \u4e2a\u5b50\u6a21\u5757\uff1a\u8017\u6750\u3001\u8bd5\u5242\u3001SOP\u6587\u6863\u3001\u5de5\u827a\u5de5\u5e8f\u5206\u7c7b\u3001\u4ea7\u51fa\u7269\u7c7b\u578b\u3001\u8017\u6750\u5305\u3001\u5de5\u827a\u5e93\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_core_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_core_menu_guard", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_core_response", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L15", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L16", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L17", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_schemas_process_route", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L18", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_models_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L31", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L32", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L33", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L34", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_schemas_production_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L35", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_schemas_production_task", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L36", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "app_schemas_cell_product", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L49", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_get_tenant_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L54", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_consumablecreatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L67", "weight": 1.0}, {"source": "api_production_consumablecreatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L67", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_consumableupdatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L79", "weight": 1.0}, {"source": "api_production_consumableupdatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L79", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_consumables", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L92", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_all_consumables", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L106", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_create_consumable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L116", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_consumable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L142", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_delete_consumable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L169", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_reagentcreatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L186", "weight": 1.0}, {"source": "api_production_reagentcreatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L186", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_reagentupdatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L198", "weight": 1.0}, {"source": "api_production_reagentupdatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L198", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_reagents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L211", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_all_reagents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L225", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_create_reagent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L235", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_reagent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L261", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_delete_reagent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L288", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_sopdocumentcreatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L305", "weight": 1.0}, {"source": "api_production_sopdocumentcreatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L305", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_sopdocumentupdatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L315", "weight": 1.0}, {"source": "api_production_sopdocumentupdatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L315", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_sop_documents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L326", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_all_sop_documents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L340", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_create_sop_document", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L350", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_sop_document", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L377", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_delete_sop_document", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L406", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_processcategorycreatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L423", "weight": 1.0}, {"source": "api_production_processcategorycreatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L423", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_processcategoryupdatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L431", "weight": 1.0}, {"source": "api_production_processcategoryupdatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L431", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_process_categories", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L440", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_all_process_categories", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L454", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_create_process_category", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L464", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_process_category", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L486", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_delete_process_category", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L509", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_outputtypecreatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L526", "weight": 1.0}, {"source": "api_production_outputtypecreatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L526", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_outputtypeupdatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L534", "weight": 1.0}, {"source": "api_production_outputtypeupdatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L534", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_output_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L543", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_all_output_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L557", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_create_output_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L567", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_output_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L589", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_delete_output_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L612", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_packiteminput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L629", "weight": 1.0}, {"source": "api_production_packiteminput", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L629", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_consumablepackcreatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L639", "weight": 1.0}, {"source": "api_production_consumablepackcreatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L639", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_consumablepackupdatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L651", "weight": 1.0}, {"source": "api_production_consumablepackupdatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L651", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_consumable_packs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L664", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_all_consumable_packs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L678", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_get_consumable_pack_detail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L688", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_create_consumable_pack", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L700", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_consumable_pack", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L727", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_delete_consumable_pack", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L755", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_processreagentinput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L772", "weight": 1.0}, {"source": "api_production_processreagentinput", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L772", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_processconsumableinput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L783", "weight": 1.0}, {"source": "api_production_processconsumableinput", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L783", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_processoutputinput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L794", "weight": 1.0}, {"source": "api_production_processoutputinput", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L794", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_processdatacollectioninput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L802", "weight": 1.0}, {"source": "api_production_processdatacollectioninput", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L802", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_processcreatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L810", "weight": 1.0}, {"source": "api_production_processcreatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L810", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_processupdatebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L827", "weight": 1.0}, {"source": "api_production_processupdatebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L827", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_processes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L845", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_all_processes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L859", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_get_process_detail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L869", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_create_process", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L881", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_process", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L923", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_delete_process", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L966", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_process_routes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L984", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_get_process_route_detail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1005", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_create_process_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1017", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_process_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1040", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_set_current_process_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1063", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_delete_process_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1077", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_add_route_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1092", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_copy_route_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1113", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_route_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1132", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_reorder_route_steps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1147", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_delete_route_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1160", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_step_reagents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1175", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_step_consumables", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1190", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_step_outputs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1205", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_step_data_collections", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1220", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_production_work_orders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1240", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_get_production_work_order", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1267", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_complete_production_work_order", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1280", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_create_production_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1302", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_production_tasks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1321", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_get_production_task_detail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1341", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_production_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1354", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_delete_production_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1372", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_production_task_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1386", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_add_production_task_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1403", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_production_task_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1421", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_delete_production_task_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1440", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_reorder_production_task_steps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1455", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_copy_production_task_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1468", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_replace_task_step_reagents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1488", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_replace_task_step_consumables", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1517", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_replace_task_step_data_collections", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1546", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_replace_task_step_outputs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1563", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_set_production_task_inputs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1580", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_set_production_task_outputs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1596", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_get_next_cell_product_code", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1617", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_list_cell_products", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1631", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_get_cell_product_detail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1659", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_create_cell_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1672", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_update_cell_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1721", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "target": "api_production_delete_cell_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1740", "weight": 1.0}, {"source": "api_production_list_consumables", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L99", "weight": 1.0}, {"source": "api_production_list_all_consumables", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L110", "weight": 1.0}, {"source": "api_production_list_all_consumables", "target": "api_production_list_consumables", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L111", "weight": 1.0}, {"source": "api_production_create_consumable", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L122", "weight": 1.0}, {"source": "api_production_list_reagents", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L218", "weight": 1.0}, {"source": "api_production_list_all_reagents", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L229", "weight": 1.0}, {"source": "api_production_list_all_reagents", "target": "api_production_list_reagents", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L230", "weight": 1.0}, {"source": "api_production_create_reagent", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L241", "weight": 1.0}, {"source": "api_production_list_sop_documents", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L333", "weight": 1.0}, {"source": "api_production_list_all_sop_documents", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L344", "weight": 1.0}, {"source": "api_production_list_all_sop_documents", "target": "api_production_list_sop_documents", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L345", "weight": 1.0}, {"source": "api_production_create_sop_document", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L356", "weight": 1.0}, {"source": "api_production_update_sop_document", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L396", "weight": 1.0}, {"source": "api_production_list_process_categories", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L447", "weight": 1.0}, {"source": "api_production_list_all_process_categories", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L458", "weight": 1.0}, {"source": "api_production_list_all_process_categories", "target": "api_production_list_process_categories", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L459", "weight": 1.0}, {"source": "api_production_create_process_category", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L470", "weight": 1.0}, {"source": "api_production_list_output_types", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L550", "weight": 1.0}, {"source": "api_production_list_all_output_types", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L561", "weight": 1.0}, {"source": "api_production_list_all_output_types", "target": "api_production_list_output_types", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L562", "weight": 1.0}, {"source": "api_production_create_output_type", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L573", "weight": 1.0}, {"source": "api_production_list_consumable_packs", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L671", "weight": 1.0}, {"source": "api_production_list_all_consumable_packs", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L682", "weight": 1.0}, {"source": "api_production_create_consumable_pack", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L706", "weight": 1.0}, {"source": "api_production_list_processes", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L852", "weight": 1.0}, {"source": "api_production_list_all_processes", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L863", "weight": 1.0}, {"source": "api_production_create_process", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L887", "weight": 1.0}, {"source": "api_production_list_process_routes", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L993", "weight": 1.0}, {"source": "api_production_create_process_route", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1023", "weight": 1.0}, {"source": "api_production_set_current_process_route", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1069", "weight": 1.0}, {"source": "api_production_add_route_step", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1098", "weight": 1.0}, {"source": "api_production_copy_route_step", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1119", "weight": 1.0}, {"source": "api_production_update_step_reagents", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1181", "weight": 1.0}, {"source": "api_production_update_step_consumables", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1196", "weight": 1.0}, {"source": "api_production_update_step_outputs", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1211", "weight": 1.0}, {"source": "api_production_update_step_data_collections", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1226", "weight": 1.0}, {"source": "api_production_list_production_work_orders", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1250", "weight": 1.0}, {"source": "api_production_get_production_work_order", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1272", "weight": 1.0}, {"source": "api_production_complete_production_work_order", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1287", "weight": 1.0}, {"source": "api_production_create_production_task", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1308", "weight": 1.0}, {"source": "api_production_list_production_tasks", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1330", "weight": 1.0}, {"source": "api_production_get_production_task_detail", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1346", "weight": 1.0}, {"source": "api_production_update_production_task", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1361", "weight": 1.0}, {"source": "api_production_delete_production_task", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1378", "weight": 1.0}, {"source": "api_production_update_production_task_status", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1393", "weight": 1.0}, {"source": "api_production_add_production_task_step", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1410", "weight": 1.0}, {"source": "api_production_update_production_task_step", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1429", "weight": 1.0}, {"source": "api_production_delete_production_task_step", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1447", "weight": 1.0}, {"source": "api_production_copy_production_task_step", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1475", "weight": 1.0}, {"source": "api_production_replace_task_step_reagents", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1496", "weight": 1.0}, {"source": "api_production_replace_task_step_consumables", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1525", "weight": 1.0}, {"source": "api_production_replace_task_step_data_collections", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1554", "weight": 1.0}, {"source": "api_production_replace_task_step_outputs", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1571", "weight": 1.0}, {"source": "api_production_set_production_task_inputs", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1587", "weight": 1.0}, {"source": "api_production_set_production_task_outputs", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1603", "weight": 1.0}, {"source": "api_production_get_next_cell_product_code", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1622", "weight": 1.0}, {"source": "api_production_list_cell_products", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1643", "weight": 1.0}, {"source": "api_production_get_cell_product_detail", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1664", "weight": 1.0}, {"source": "api_production_create_cell_product", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1678", "weight": 1.0}, {"source": "api_production_update_cell_product", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1728", "weight": 1.0}, {"source": "api_production_delete_cell_product", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1746", "weight": 1.0}, {"source": "api_production_rationale_1", "target": "users_wuzilong_work_00code_zkxw_backend_app_api_production_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_production_get_tenant_no", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L55"}, {"caller_nid": "api_production_get_tenant_no", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L58"}, {"caller_nid": "api_production_get_tenant_no", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L58"}, {"caller_nid": "api_production_get_tenant_no", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L58"}, {"caller_nid": "api_production_list_consumables", "callee": "total_pages", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L101"}, {"caller_nid": "api_production_list_consumables", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L102"}, {"caller_nid": "api_production_list_all_consumables", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L112"}, {"caller_nid": "api_production_create_consumable", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L134"}, {"caller_nid": "api_production_create_consumable", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L136"}, {"caller_nid": "api_production_create_consumable", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L136"}, {"caller_nid": "api_production_create_consumable", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L138"}, {"caller_nid": "api_production_create_consumable", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L138"}, {"caller_nid": "api_production_update_consumable", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L149"}, {"caller_nid": "api_production_update_consumable", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L153"}, {"caller_nid": "api_production_update_consumable", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L154"}, {"caller_nid": "api_production_update_consumable", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L155"}, {"caller_nid": "api_production_update_consumable", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L156"}, {"caller_nid": "api_production_update_consumable", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L157"}, {"caller_nid": "api_production_update_consumable", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L158"}, {"caller_nid": "api_production_update_consumable", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L159"}, {"caller_nid": "api_production_update_consumable", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L160"}, {"caller_nid": "api_production_update_consumable", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L161"}, {"caller_nid": "api_production_update_consumable", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L163"}, {"caller_nid": "api_production_update_consumable", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L163"}, {"caller_nid": "api_production_update_consumable", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L165"}, {"caller_nid": "api_production_update_consumable", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L165"}, {"caller_nid": "api_production_delete_consumable", "callee": "soft_delete_consumable", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L175"}, {"caller_nid": "api_production_delete_consumable", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L176"}, {"caller_nid": "api_production_delete_consumable", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L178"}, {"caller_nid": "api_production_delete_consumable", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L178"}, {"caller_nid": "api_production_list_reagents", "callee": "total_pages", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L220"}, {"caller_nid": "api_production_list_reagents", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L221"}, {"caller_nid": "api_production_list_all_reagents", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L231"}, {"caller_nid": "api_production_create_reagent", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L253"}, {"caller_nid": "api_production_create_reagent", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L255"}, {"caller_nid": "api_production_create_reagent", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L255"}, {"caller_nid": "api_production_create_reagent", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L257"}, {"caller_nid": "api_production_create_reagent", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L257"}, {"caller_nid": "api_production_update_reagent", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L268"}, {"caller_nid": "api_production_update_reagent", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L272"}, {"caller_nid": "api_production_update_reagent", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L273"}, {"caller_nid": "api_production_update_reagent", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L274"}, {"caller_nid": "api_production_update_reagent", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L275"}, {"caller_nid": "api_production_update_reagent", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L276"}, {"caller_nid": "api_production_update_reagent", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L277"}, {"caller_nid": "api_production_update_reagent", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L278"}, {"caller_nid": "api_production_update_reagent", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L279"}, {"caller_nid": "api_production_update_reagent", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L280"}, {"caller_nid": "api_production_update_reagent", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L282"}, {"caller_nid": "api_production_update_reagent", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L282"}, {"caller_nid": "api_production_update_reagent", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L284"}, {"caller_nid": "api_production_update_reagent", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L284"}, {"caller_nid": "api_production_delete_reagent", "callee": "soft_delete_reagent", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L294"}, {"caller_nid": "api_production_delete_reagent", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L295"}, {"caller_nid": "api_production_delete_reagent", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L297"}, {"caller_nid": "api_production_delete_reagent", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L297"}, {"caller_nid": "api_production_list_sop_documents", "callee": "total_pages", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L335"}, {"caller_nid": "api_production_list_sop_documents", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L336"}, {"caller_nid": "api_production_list_all_sop_documents", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L346"}, {"caller_nid": "api_production_create_sop_document", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L366"}, {"caller_nid": "api_production_create_sop_document", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L368"}, {"caller_nid": "api_production_create_sop_document", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L369"}, {"caller_nid": "api_production_create_sop_document", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L373"}, {"caller_nid": "api_production_create_sop_document", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L373"}, {"caller_nid": "api_production_update_sop_document", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L384"}, {"caller_nid": "api_production_update_sop_document", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L388"}, {"caller_nid": "api_production_update_sop_document", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L389"}, {"caller_nid": "api_production_update_sop_document", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L390"}, {"caller_nid": "api_production_update_sop_document", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L391"}, {"caller_nid": "api_production_update_sop_document", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L392"}, {"caller_nid": "api_production_update_sop_document", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L393"}, {"caller_nid": "api_production_update_sop_document", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L394"}, {"caller_nid": "api_production_update_sop_document", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L397"}, {"caller_nid": "api_production_update_sop_document", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L398"}, {"caller_nid": "api_production_update_sop_document", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L402"}, {"caller_nid": "api_production_update_sop_document", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L402"}, {"caller_nid": "api_production_delete_sop_document", "callee": "soft_delete_sop_document", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L412"}, {"caller_nid": "api_production_delete_sop_document", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L413"}, {"caller_nid": "api_production_delete_sop_document", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L415"}, {"caller_nid": "api_production_delete_sop_document", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L415"}, {"caller_nid": "api_production_list_process_categories", "callee": "total_pages", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L449"}, {"caller_nid": "api_production_list_process_categories", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L450"}, {"caller_nid": "api_production_list_all_process_categories", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L460"}, {"caller_nid": "api_production_create_process_category", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L478"}, {"caller_nid": "api_production_create_process_category", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L480"}, {"caller_nid": "api_production_create_process_category", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L480"}, {"caller_nid": "api_production_create_process_category", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L482"}, {"caller_nid": "api_production_create_process_category", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L482"}, {"caller_nid": "api_production_update_process_category", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L493"}, {"caller_nid": "api_production_update_process_category", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L497"}, {"caller_nid": "api_production_update_process_category", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L498"}, {"caller_nid": "api_production_update_process_category", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L499"}, {"caller_nid": "api_production_update_process_category", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L500"}, {"caller_nid": "api_production_update_process_category", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L501"}, {"caller_nid": "api_production_update_process_category", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L503"}, {"caller_nid": "api_production_update_process_category", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L503"}, {"caller_nid": "api_production_update_process_category", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L505"}, {"caller_nid": "api_production_update_process_category", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L505"}, {"caller_nid": "api_production_delete_process_category", "callee": "soft_delete_process_category", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L515"}, {"caller_nid": "api_production_delete_process_category", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L516"}, {"caller_nid": "api_production_delete_process_category", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L518"}, {"caller_nid": "api_production_delete_process_category", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L518"}, {"caller_nid": "api_production_list_output_types", "callee": "total_pages", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L552"}, {"caller_nid": "api_production_list_output_types", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L553"}, {"caller_nid": "api_production_list_all_output_types", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L563"}, {"caller_nid": "api_production_create_output_type", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L581"}, {"caller_nid": "api_production_create_output_type", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L583"}, {"caller_nid": "api_production_create_output_type", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L583"}, {"caller_nid": "api_production_create_output_type", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L585"}, {"caller_nid": "api_production_create_output_type", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L585"}, {"caller_nid": "api_production_update_output_type", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L596"}, {"caller_nid": "api_production_update_output_type", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L600"}, {"caller_nid": "api_production_update_output_type", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L601"}, {"caller_nid": "api_production_update_output_type", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L602"}, {"caller_nid": "api_production_update_output_type", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L603"}, {"caller_nid": "api_production_update_output_type", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L604"}, {"caller_nid": "api_production_update_output_type", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L606"}, {"caller_nid": "api_production_update_output_type", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L606"}, {"caller_nid": "api_production_update_output_type", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L608"}, {"caller_nid": "api_production_update_output_type", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L608"}, {"caller_nid": "api_production_delete_output_type", "callee": "soft_delete_output_type", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L618"}, {"caller_nid": "api_production_delete_output_type", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L619"}, {"caller_nid": "api_production_delete_output_type", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L621"}, {"caller_nid": "api_production_delete_output_type", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L621"}, {"caller_nid": "api_production_list_consumable_packs", "callee": "total_pages", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L673"}, {"caller_nid": "api_production_list_consumable_packs", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L674"}, {"caller_nid": "api_production_list_all_consumable_packs", "callee": "list_all_packs", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L683"}, {"caller_nid": "api_production_list_all_consumable_packs", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L684"}, {"caller_nid": "api_production_get_consumable_pack_detail", "callee": "get_pack_detail", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L693"}, {"caller_nid": "api_production_get_consumable_pack_detail", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L695"}, {"caller_nid": "api_production_get_consumable_pack_detail", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L696"}, {"caller_nid": "api_production_create_consumable_pack", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L707"}, {"caller_nid": "api_production_create_consumable_pack", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L719"}, {"caller_nid": "api_production_create_consumable_pack", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L721"}, {"caller_nid": "api_production_create_consumable_pack", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L721"}, {"caller_nid": "api_production_create_consumable_pack", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L723"}, {"caller_nid": "api_production_create_consumable_pack", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L723"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L734"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L735"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L739"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L740"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L741"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L742"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L743"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L745"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L746"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L747"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L749"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L749"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L751"}, {"caller_nid": "api_production_update_consumable_pack", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L751"}, {"caller_nid": "api_production_delete_consumable_pack", "callee": "soft_delete_consumable_pack", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L761"}, {"caller_nid": "api_production_delete_consumable_pack", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L762"}, {"caller_nid": "api_production_delete_consumable_pack", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L764"}, {"caller_nid": "api_production_delete_consumable_pack", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L764"}, {"caller_nid": "api_production_list_processes", "callee": "total_pages", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L854"}, {"caller_nid": "api_production_list_processes", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L855"}, {"caller_nid": "api_production_list_all_processes", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L865"}, {"caller_nid": "api_production_get_process_detail", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L876"}, {"caller_nid": "api_production_get_process_detail", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L877"}, {"caller_nid": "api_production_create_process", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L888"}, {"caller_nid": "api_production_create_process", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L889"}, {"caller_nid": "api_production_create_process", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L890"}, {"caller_nid": "api_production_create_process", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L891"}, {"caller_nid": "api_production_create_process", "callee": "isinstance", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L894"}, {"caller_nid": "api_production_create_process", "callee": "int", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L895"}, {"caller_nid": "api_production_create_process", "callee": "isinstance", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L897"}, {"caller_nid": "api_production_create_process", "callee": "int", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L898"}, {"caller_nid": "api_production_create_process", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L915"}, {"caller_nid": "api_production_create_process", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L917"}, {"caller_nid": "api_production_create_process", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L917"}, {"caller_nid": "api_production_create_process", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L919"}, {"caller_nid": "api_production_create_process", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L919"}, {"caller_nid": "api_production_update_process", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L930"}, {"caller_nid": "api_production_update_process", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L931"}, {"caller_nid": "api_production_update_process", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L932"}, {"caller_nid": "api_production_update_process", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L933"}, {"caller_nid": "api_production_update_process", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L934"}, {"caller_nid": "api_production_update_process", "callee": "isinstance", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L937"}, {"caller_nid": "api_production_update_process", "callee": "int", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L938"}, {"caller_nid": "api_production_update_process", "callee": "isinstance", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L940"}, {"caller_nid": "api_production_update_process", "callee": "int", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L941"}, {"caller_nid": "api_production_update_process", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L945"}, {"caller_nid": "api_production_update_process", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L946"}, {"caller_nid": "api_production_update_process", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L947"}, {"caller_nid": "api_production_update_process", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L948"}, {"caller_nid": "api_production_update_process", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L949"}, {"caller_nid": "api_production_update_process", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L950"}, {"caller_nid": "api_production_update_process", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L951"}, {"caller_nid": "api_production_update_process", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L956"}, {"caller_nid": "api_production_update_process", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L957"}, {"caller_nid": "api_production_update_process", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L958"}, {"caller_nid": "api_production_update_process", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L960"}, {"caller_nid": "api_production_update_process", "callee": "_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L960"}, {"caller_nid": "api_production_update_process", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L962"}, {"caller_nid": "api_production_update_process", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L962"}, {"caller_nid": "api_production_delete_process", "callee": "soft_delete_process", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L972"}, {"caller_nid": "api_production_delete_process", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L973"}, {"caller_nid": "api_production_delete_process", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L975"}, {"caller_nid": "api_production_delete_process", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L975"}, {"caller_nid": "api_production_list_process_routes", "callee": "list_routes", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L994"}, {"caller_nid": "api_production_list_process_routes", "callee": "total_pages", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1000"}, {"caller_nid": "api_production_list_process_routes", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1001"}, {"caller_nid": "api_production_get_process_route_detail", "callee": "get_route_detail", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1010"}, {"caller_nid": "api_production_get_process_route_detail", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1012"}, {"caller_nid": "api_production_get_process_route_detail", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1013"}, {"caller_nid": "api_production_create_process_route", "callee": "create_route", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1024"}, {"caller_nid": "api_production_create_process_route", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1032"}, {"caller_nid": "api_production_create_process_route", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1034"}, {"caller_nid": "api_production_create_process_route", "callee": "_route_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1034"}, {"caller_nid": "api_production_create_process_route", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1036"}, {"caller_nid": "api_production_create_process_route", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1036"}, {"caller_nid": "api_production_update_process_route", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1047"}, {"caller_nid": "api_production_update_process_route", "callee": "update_route", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1048"}, {"caller_nid": "api_production_update_process_route", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1050"}, {"caller_nid": "api_production_update_process_route", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1051"}, {"caller_nid": "api_production_update_process_route", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1052"}, {"caller_nid": "api_production_update_process_route", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1053"}, {"caller_nid": "api_production_update_process_route", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1054"}, {"caller_nid": "api_production_update_process_route", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1055"}, {"caller_nid": "api_production_update_process_route", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1057"}, {"caller_nid": "api_production_update_process_route", "callee": "_route_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1057"}, {"caller_nid": "api_production_update_process_route", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1059"}, {"caller_nid": "api_production_update_process_route", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1059"}, {"caller_nid": "api_production_set_current_process_route", "callee": "set_current_route", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1070"}, {"caller_nid": "api_production_set_current_process_route", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1071"}, {"caller_nid": "api_production_set_current_process_route", "callee": "_route_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1071"}, {"caller_nid": "api_production_set_current_process_route", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1073"}, {"caller_nid": "api_production_set_current_process_route", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1073"}, {"caller_nid": "api_production_delete_process_route", "callee": "soft_delete_route", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1083"}, {"caller_nid": "api_production_delete_process_route", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1084"}, {"caller_nid": "api_production_delete_process_route", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1086"}, {"caller_nid": "api_production_delete_process_route", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1086"}, {"caller_nid": "api_production_add_route_step", "callee": "add_step", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1099"}, {"caller_nid": "api_production_add_route_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1105"}, {"caller_nid": "api_production_add_route_step", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1107"}, {"caller_nid": "api_production_add_route_step", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1109"}, {"caller_nid": "api_production_add_route_step", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1109"}, {"caller_nid": "api_production_copy_route_step", "callee": "copy_step", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1120"}, {"caller_nid": "api_production_copy_route_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1124"}, {"caller_nid": "api_production_copy_route_step", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1126"}, {"caller_nid": "api_production_copy_route_step", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1128"}, {"caller_nid": "api_production_copy_route_step", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1128"}, {"caller_nid": "api_production_update_route_step", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1138"}, {"caller_nid": "api_production_update_route_step", "callee": "pop", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1139"}, {"caller_nid": "api_production_update_route_step", "callee": "update_step", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1140"}, {"caller_nid": "api_production_update_route_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1140"}, {"caller_nid": "api_production_update_route_step", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1141"}, {"caller_nid": "api_production_update_route_step", "callee": "_step_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1141"}, {"caller_nid": "api_production_update_route_step", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1143"}, {"caller_nid": "api_production_update_route_step", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1143"}, {"caller_nid": "api_production_reorder_route_steps", "callee": "reorder_steps", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1153"}, {"caller_nid": "api_production_reorder_route_steps", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1154"}, {"caller_nid": "api_production_reorder_route_steps", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1156"}, {"caller_nid": "api_production_reorder_route_steps", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1156"}, {"caller_nid": "api_production_delete_route_step", "callee": "soft_delete_step", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1166"}, {"caller_nid": "api_production_delete_route_step", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1167"}, {"caller_nid": "api_production_delete_route_step", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1169"}, {"caller_nid": "api_production_delete_route_step", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1169"}, {"caller_nid": "api_production_update_step_reagents", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1182"}, {"caller_nid": "api_production_update_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1183"}, {"caller_nid": "api_production_update_step_reagents", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1184"}, {"caller_nid": "api_production_update_step_reagents", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1186"}, {"caller_nid": "api_production_update_step_reagents", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1186"}, {"caller_nid": "api_production_update_step_consumables", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1197"}, {"caller_nid": "api_production_update_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1198"}, {"caller_nid": "api_production_update_step_consumables", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1199"}, {"caller_nid": "api_production_update_step_consumables", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1201"}, {"caller_nid": "api_production_update_step_consumables", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1201"}, {"caller_nid": "api_production_update_step_outputs", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1212"}, {"caller_nid": "api_production_update_step_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1213"}, {"caller_nid": "api_production_update_step_outputs", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1214"}, {"caller_nid": "api_production_update_step_outputs", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1216"}, {"caller_nid": "api_production_update_step_outputs", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1216"}, {"caller_nid": "api_production_update_step_data_collections", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1227"}, {"caller_nid": "api_production_update_step_data_collections", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1228"}, {"caller_nid": "api_production_update_step_data_collections", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1229"}, {"caller_nid": "api_production_update_step_data_collections", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1231"}, {"caller_nid": "api_production_update_step_data_collections", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1231"}, {"caller_nid": "api_production_list_production_work_orders", "callee": "ProductionWorkOrderListQuery", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1251"}, {"caller_nid": "api_production_list_production_work_orders", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1260"}, {"caller_nid": "api_production_list_production_work_orders", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1261"}, {"caller_nid": "api_production_list_production_work_orders", "callee": "total_pages", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1262"}, {"caller_nid": "api_production_list_production_work_orders", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1263"}, {"caller_nid": "api_production_get_production_work_order", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1275"}, {"caller_nid": "api_production_get_production_work_order", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1276"}, {"caller_nid": "api_production_get_production_work_order", "callee": "_wo_to_response_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1276"}, {"caller_nid": "api_production_complete_production_work_order", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1289"}, {"caller_nid": "api_production_complete_production_work_order", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1291"}, {"caller_nid": "api_production_complete_production_work_order", "callee": "_wo_to_response_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1291"}, {"caller_nid": "api_production_complete_production_work_order", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1293"}, {"caller_nid": "api_production_complete_production_work_order", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1293"}, {"caller_nid": "api_production_create_production_task", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1309"}, {"caller_nid": "api_production_create_production_task", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1311"}, {"caller_nid": "api_production_create_production_task", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1314"}, {"caller_nid": "api_production_create_production_task", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1315"}, {"caller_nid": "api_production_create_production_task", "callee": "_task_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1315"}, {"caller_nid": "api_production_create_production_task", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1317"}, {"caller_nid": "api_production_create_production_task", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1317"}, {"caller_nid": "api_production_list_production_tasks", "callee": "total_pages", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1336"}, {"caller_nid": "api_production_list_production_tasks", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1337"}, {"caller_nid": "api_production_get_production_task_detail", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1349"}, {"caller_nid": "api_production_get_production_task_detail", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1350"}, {"caller_nid": "api_production_update_production_task", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1362"}, {"caller_nid": "api_production_update_production_task", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1364"}, {"caller_nid": "api_production_update_production_task", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1366"}, {"caller_nid": "api_production_update_production_task", "callee": "_task_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1366"}, {"caller_nid": "api_production_update_production_task", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1368"}, {"caller_nid": "api_production_update_production_task", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1368"}, {"caller_nid": "api_production_delete_production_task", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1379"}, {"caller_nid": "api_production_delete_production_task", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1380"}, {"caller_nid": "api_production_delete_production_task", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1382"}, {"caller_nid": "api_production_delete_production_task", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1382"}, {"caller_nid": "api_production_update_production_task_status", "callee": "update_task_status", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1394"}, {"caller_nid": "api_production_update_production_task_status", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1395"}, {"caller_nid": "api_production_update_production_task_status", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1397"}, {"caller_nid": "api_production_update_production_task_status", "callee": "_task_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1397"}, {"caller_nid": "api_production_update_production_task_status", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1399"}, {"caller_nid": "api_production_update_production_task_status", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1399"}, {"caller_nid": "api_production_add_production_task_step", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1411"}, {"caller_nid": "api_production_add_production_task_step", "callee": "add_task_step", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1412"}, {"caller_nid": "api_production_add_production_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1413"}, {"caller_nid": "api_production_add_production_task_step", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1415"}, {"caller_nid": "api_production_add_production_task_step", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1417"}, {"caller_nid": "api_production_add_production_task_step", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1417"}, {"caller_nid": "api_production_update_production_task_step", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1430"}, {"caller_nid": "api_production_update_production_task_step", "callee": "update_task_step", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1431"}, {"caller_nid": "api_production_update_production_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1432"}, {"caller_nid": "api_production_update_production_task_step", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1434"}, {"caller_nid": "api_production_update_production_task_step", "callee": "_step_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1434"}, {"caller_nid": "api_production_update_production_task_step", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1436"}, {"caller_nid": "api_production_update_production_task_step", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1436"}, {"caller_nid": "api_production_delete_production_task_step", "callee": "delete_task_step", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1448"}, {"caller_nid": "api_production_delete_production_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1448"}, {"caller_nid": "api_production_delete_production_task_step", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1449"}, {"caller_nid": "api_production_delete_production_task_step", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1451"}, {"caller_nid": "api_production_delete_production_task_step", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1451"}, {"caller_nid": "api_production_reorder_production_task_steps", "callee": "reorder_task_steps", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1461"}, {"caller_nid": "api_production_reorder_production_task_steps", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1462"}, {"caller_nid": "api_production_reorder_production_task_steps", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1464"}, {"caller_nid": "api_production_reorder_production_task_steps", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1464"}, {"caller_nid": "api_production_copy_production_task_step", "callee": "copy_task_step", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1476"}, {"caller_nid": "api_production_copy_production_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1480"}, {"caller_nid": "api_production_copy_production_task_step", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1482"}, {"caller_nid": "api_production_copy_production_task_step", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1484"}, {"caller_nid": "api_production_copy_production_task_step", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1484"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1499"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "append", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1500"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1501"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1502"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1503"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1504"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1505"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1506"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1507"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1508"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "replace_step_reagents", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1510"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1510"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1511"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1513"}, {"caller_nid": "api_production_replace_task_step_reagents", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1513"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1528"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "append", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1529"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1530"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1531"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1532"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1533"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1534"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1535"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1536"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1537"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "replace_step_consumables", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1539"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1539"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1540"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1542"}, {"caller_nid": "api_production_replace_task_step_consumables", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1542"}, {"caller_nid": "api_production_replace_task_step_data_collections", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1555"}, {"caller_nid": "api_production_replace_task_step_data_collections", "callee": "replace_step_data_collections", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1556"}, {"caller_nid": "api_production_replace_task_step_data_collections", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1556"}, {"caller_nid": "api_production_replace_task_step_data_collections", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1557"}, {"caller_nid": "api_production_replace_task_step_data_collections", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1559"}, {"caller_nid": "api_production_replace_task_step_data_collections", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1559"}, {"caller_nid": "api_production_replace_task_step_outputs", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1572"}, {"caller_nid": "api_production_replace_task_step_outputs", "callee": "replace_step_outputs", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1573"}, {"caller_nid": "api_production_replace_task_step_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1573"}, {"caller_nid": "api_production_replace_task_step_outputs", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1574"}, {"caller_nid": "api_production_replace_task_step_outputs", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1576"}, {"caller_nid": "api_production_replace_task_step_outputs", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1576"}, {"caller_nid": "api_production_set_production_task_inputs", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1588"}, {"caller_nid": "api_production_set_production_task_inputs", "callee": "set_task_inputs", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1589"}, {"caller_nid": "api_production_set_production_task_inputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1589"}, {"caller_nid": "api_production_set_production_task_inputs", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1590"}, {"caller_nid": "api_production_set_production_task_inputs", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1592"}, {"caller_nid": "api_production_set_production_task_inputs", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1592"}, {"caller_nid": "api_production_set_production_task_outputs", "callee": "model_dump", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1604"}, {"caller_nid": "api_production_set_production_task_outputs", "callee": "set_task_outputs", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1605"}, {"caller_nid": "api_production_set_production_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1605"}, {"caller_nid": "api_production_set_production_task_outputs", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1606"}, {"caller_nid": "api_production_set_production_task_outputs", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1608"}, {"caller_nid": "api_production_set_production_task_outputs", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1608"}, {"caller_nid": "api_production_get_next_cell_product_code", "callee": "get_next_code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1624"}, {"caller_nid": "api_production_get_next_cell_product_code", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1625"}, {"caller_nid": "api_production_get_next_cell_product_code", "callee": "reserve_next_codes", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1626"}, {"caller_nid": "api_production_get_next_cell_product_code", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1627"}, {"caller_nid": "api_production_list_cell_products", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1652"}, {"caller_nid": "api_production_list_cell_products", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1653"}, {"caller_nid": "api_production_list_cell_products", "callee": "total_pages", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1654"}, {"caller_nid": "api_production_list_cell_products", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1655"}, {"caller_nid": "api_production_get_cell_product_detail", "callee": "get_cell_product", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1665"}, {"caller_nid": "api_production_get_cell_product_detail", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1667"}, {"caller_nid": "api_production_get_cell_product_detail", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1668"}, {"caller_nid": "api_production_get_cell_product_detail", "callee": "product_to_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1668"}, {"caller_nid": "api_production_create_cell_product", "callee": "int", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1680"}, {"caller_nid": "api_production_create_cell_product", "callee": "max", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1681"}, {"caller_nid": "api_production_create_cell_product", "callee": "min", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1681"}, {"caller_nid": "api_production_create_cell_product", "callee": "create_cell_products_batch", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1683"}, {"caller_nid": "api_production_create_cell_product", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1686"}, {"caller_nid": "api_production_create_cell_product", "callee": "create_cell_products_by_quantity", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1692"}, {"caller_nid": "api_production_create_cell_product", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1695"}, {"caller_nid": "api_production_create_cell_product", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1702"}, {"caller_nid": "api_production_create_cell_product", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1705"}, {"caller_nid": "api_production_create_cell_product", "callee": "product_to_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1706"}, {"caller_nid": "api_production_create_cell_product", "callee": "product_to_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1709"}, {"caller_nid": "api_production_create_cell_product", "callee": "len", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1711"}, {"caller_nid": "api_production_create_cell_product", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1712"}, {"caller_nid": "api_production_create_cell_product", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1717"}, {"caller_nid": "api_production_create_cell_product", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1717"}, {"caller_nid": "api_production_update_cell_product", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1730"}, {"caller_nid": "api_production_update_cell_product", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1732"}, {"caller_nid": "api_production_update_cell_product", "callee": "product_to_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1733"}, {"caller_nid": "api_production_update_cell_product", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1736"}, {"caller_nid": "api_production_update_cell_product", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1736"}, {"caller_nid": "api_production_delete_cell_product", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1747"}, {"caller_nid": "api_production_delete_cell_product", "callee": "success_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1748"}, {"caller_nid": "api_production_delete_cell_product", "callee": "error_response", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1750"}, {"caller_nid": "api_production_delete_cell_product", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py", "source_location": "L1750"}]} \ No newline at end of file diff --git a/backend/app/graphify-out/cache/ast/9ac32668c5a1a884b5123d865fdd1e91513ca547ed46291e2e8e70854247f542.json b/backend/app/graphify-out/cache/ast/9ac32668c5a1a884b5123d865fdd1e91513ca547ed46291e2e8e70854247f542.json new file mode 100644 index 000000000..78e76c16a --- /dev/null +++ b/backend/app/graphify-out/cache/ast/9ac32668c5a1a884b5123d865fdd1e91513ca547ed46291e2e8e70854247f542.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "label": "production_task.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1"}, {"id": "crud_production_task_fmt_dt", "label": "_fmt_dt()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L43"}, {"id": "crud_production_task_generate_task_no", "label": "_generate_task_no()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L47"}, {"id": "crud_production_task_task_to_dict", "label": "_task_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L61"}, {"id": "crud_production_task_step_to_dict", "label": "_step_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L83"}, {"id": "crud_production_task_step_reagent_to_dict", "label": "_step_reagent_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L103"}, {"id": "crud_production_task_step_consumable_to_dict", "label": "_step_consumable_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L118"}, {"id": "crud_production_task_step_output_to_dict", "label": "_step_output_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L133"}, {"id": "crud_production_task_step_data_collection_to_dict", "label": "_step_data_collection_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L144"}, {"id": "crud_production_task_task_input_to_dict", "label": "_task_input_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L155"}, {"id": "crud_production_task_task_output_to_dict", "label": "_task_output_to_dict()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L177"}, {"id": "crud_production_task_soft_delete_sub", "label": "_soft_delete_sub()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L202"}, {"id": "crud_production_task_clone_step_reagents", "label": "_clone_step_reagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L215"}, {"id": "crud_production_task_clone_step_consumables", "label": "_clone_step_consumables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L233"}, {"id": "crud_production_task_clone_step_outputs", "label": "_clone_step_outputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L251"}, {"id": "crud_production_task_clone_step_data_collections", "label": "_clone_step_data_collections()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L268"}, {"id": "crud_production_task_clone_route_to_task", "label": "_clone_route_to_task()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L284"}, {"id": "crud_production_task_create_production_task", "label": "create_production_task()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L317"}, {"id": "crud_production_task_list_production_tasks", "label": "list_production_tasks()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L354"}, {"id": "crud_production_task_get_production_task_detail", "label": "get_production_task_detail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L474"}, {"id": "crud_production_task_update_production_task", "label": "update_production_task()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L564"}, {"id": "crud_production_task_update_task_status", "label": "update_task_status()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L589"}, {"id": "crud_production_task_add_task_step", "label": "add_task_step()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L616"}, {"id": "crud_production_task_update_task_step", "label": "update_task_step()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L761"}, {"id": "crud_production_task_delete_task_step", "label": "delete_task_step()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L799"}, {"id": "crud_production_task_replace_step_reagents", "label": "replace_step_reagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L821"}, {"id": "crud_production_task_replace_step_consumables", "label": "replace_step_consumables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L844"}, {"id": "crud_production_task_replace_step_outputs", "label": "replace_step_outputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L867"}, {"id": "crud_production_task_replace_step_data_collections", "label": "replace_step_data_collections()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L886"}, {"id": "crud_production_task_set_task_inputs", "label": "set_task_inputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L905"}, {"id": "crud_production_task_parse_optional_date", "label": "_parse_optional_date()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L962"}, {"id": "crud_production_task_create_occupancy_for_product", "label": "_create_occupancy_for_product()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L973"}, {"id": "crud_production_task_update_product_from_output", "label": "_update_product_from_output()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1003"}, {"id": "crud_production_task_set_task_outputs", "label": "set_task_outputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1045"}, {"id": "crud_production_task_reorder_task_steps", "label": "reorder_task_steps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1172"}, {"id": "crud_production_task_copy_task_step", "label": "copy_task_step()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1186"}, {"id": "crud_production_task_delete_production_task", "label": "delete_production_task()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1290"}, {"id": "crud_production_task_total_pages", "label": "total_pages()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1333"}, {"id": "crud_production_task_rationale_1", "label": "\u751f\u4ea7\u4efb\u52a1 CRUD\uff08biz_production_task + \u6b65\u9aa4 + \u5b50\u8868 + \u6295\u5165/\u4ea7\u51fa\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1"}, {"id": "crud_production_task_rationale_1004", "label": "\u4ece output item \u66f4\u65b0\u7ec6\u80de\u4ea7\u54c1\u5b57\u6bb5", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1004"}, {"id": "crud_production_task_rationale_1188", "label": "\u590d\u5236\u751f\u4ea7\u4efb\u52a1\u6b65\u9aa4\uff0c\u63d2\u5165\u5230\u539f\u6b65\u9aa4\u4e4b\u540e\uff0c\u540d\u79f0\u8ffd\u52a0\uff08\u590d\u5236\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1188"}, {"id": "crud_production_task_rationale_1291", "label": "\u8f6f\u5220\u9664\u751f\u4ea7\u4efb\u52a1\u53ca\u5176\u6240\u6709\u5b50\u8868\u6570\u636e\uff08\u6b65\u9aa4 + \u6295\u5165 + \u4ea7\u51fa\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1291"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "math", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "app_core_utils", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "app_models_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "app_crud", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L39", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "app_crud_cell_product", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L40", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_fmt_dt", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L43", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_generate_task_no", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L47", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_task_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L61", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_step_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L83", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_step_reagent_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L103", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_step_consumable_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L118", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_step_output_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L133", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_step_data_collection_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L144", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_task_input_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L155", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_task_output_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L177", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_soft_delete_sub", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L202", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_clone_step_reagents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L215", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_clone_step_consumables", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L233", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_clone_step_outputs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L251", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_clone_step_data_collections", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L268", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_clone_route_to_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L284", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_create_production_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L317", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_list_production_tasks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L354", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_get_production_task_detail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L474", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_update_production_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L564", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_update_task_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L589", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_add_task_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L616", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_update_task_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L761", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_delete_task_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L799", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_replace_step_reagents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L821", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_replace_step_consumables", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L844", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_replace_step_outputs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L867", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_replace_step_data_collections", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L886", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_set_task_inputs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L905", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_parse_optional_date", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L962", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_create_occupancy_for_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L973", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_update_product_from_output", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1003", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_set_task_outputs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1045", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_reorder_task_steps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1172", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_copy_task_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1186", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_delete_production_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1290", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "target": "crud_production_task_total_pages", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1333", "weight": 1.0}, {"source": "crud_production_task_task_to_dict", "target": "crud_production_task_fmt_dt", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L72", "weight": 1.0}, {"source": "crud_production_task_step_to_dict", "target": "crud_production_task_fmt_dt", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L97", "weight": 1.0}, {"source": "crud_production_task_clone_route_to_task", "target": "crud_production_task_clone_step_reagents", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L311", "weight": 1.0}, {"source": "crud_production_task_clone_route_to_task", "target": "crud_production_task_clone_step_consumables", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L312", "weight": 1.0}, {"source": "crud_production_task_clone_route_to_task", "target": "crud_production_task_clone_step_outputs", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L313", "weight": 1.0}, {"source": "crud_production_task_clone_route_to_task", "target": "crud_production_task_clone_step_data_collections", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L314", "weight": 1.0}, {"source": "crud_production_task_create_production_task", "target": "crud_production_task_generate_task_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L321", "weight": 1.0}, {"source": "crud_production_task_create_production_task", "target": "crud_production_task_clone_route_to_task", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L348", "weight": 1.0}, {"source": "crud_production_task_list_production_tasks", "target": "crud_production_task_task_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L388", "weight": 1.0}, {"source": "crud_production_task_list_production_tasks", "target": "crud_production_task_fmt_dt", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L468", "weight": 1.0}, {"source": "crud_production_task_get_production_task_detail", "target": "crud_production_task_task_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L486", "weight": 1.0}, {"source": "crud_production_task_get_production_task_detail", "target": "crud_production_task_step_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L499", "weight": 1.0}, {"source": "crud_production_task_get_production_task_detail", "target": "crud_production_task_step_reagent_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L513", "weight": 1.0}, {"source": "crud_production_task_get_production_task_detail", "target": "crud_production_task_step_consumable_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L514", "weight": 1.0}, {"source": "crud_production_task_get_production_task_detail", "target": "crud_production_task_step_output_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L515", "weight": 1.0}, {"source": "crud_production_task_get_production_task_detail", "target": "crud_production_task_step_data_collection_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L516", "weight": 1.0}, {"source": "crud_production_task_get_production_task_detail", "target": "crud_production_task_task_input_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L530", "weight": 1.0}, {"source": "crud_production_task_get_production_task_detail", "target": "crud_production_task_task_output_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L546", "weight": 1.0}, {"source": "crud_production_task_add_task_step", "target": "crud_production_task_step_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L740", "weight": 1.0}, {"source": "crud_production_task_add_task_step", "target": "crud_production_task_step_reagent_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L754", "weight": 1.0}, {"source": "crud_production_task_add_task_step", "target": "crud_production_task_step_consumable_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L755", "weight": 1.0}, {"source": "crud_production_task_add_task_step", "target": "crud_production_task_step_output_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L756", "weight": 1.0}, {"source": "crud_production_task_add_task_step", "target": "crud_production_task_step_data_collection_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L757", "weight": 1.0}, {"source": "crud_production_task_delete_task_step", "target": "crud_production_task_soft_delete_sub", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L814", "weight": 1.0}, {"source": "crud_production_task_replace_step_reagents", "target": "crud_production_task_soft_delete_sub", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L826", "weight": 1.0}, {"source": "crud_production_task_replace_step_consumables", "target": "crud_production_task_soft_delete_sub", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L849", "weight": 1.0}, {"source": "crud_production_task_replace_step_outputs", "target": "crud_production_task_soft_delete_sub", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L872", "weight": 1.0}, {"source": "crud_production_task_replace_step_data_collections", "target": "crud_production_task_soft_delete_sub", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L891", "weight": 1.0}, {"source": "crud_production_task_set_task_inputs", "target": "crud_production_task_soft_delete_sub", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L931", "weight": 1.0}, {"source": "crud_production_task_update_product_from_output", "target": "crud_production_task_parse_optional_date", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1034", "weight": 1.0}, {"source": "crud_production_task_set_task_outputs", "target": "crud_production_task_update_product_from_output", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1099", "weight": 1.0}, {"source": "crud_production_task_set_task_outputs", "target": "crud_production_task_create_occupancy_for_product", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1106", "weight": 1.0}, {"source": "crud_production_task_set_task_outputs", "target": "crud_production_task_parse_optional_date", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1131", "weight": 1.0}, {"source": "crud_production_task_copy_task_step", "target": "crud_production_task_step_to_dict", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1287", "weight": 1.0}, {"source": "crud_production_task_delete_production_task", "target": "crud_production_task_soft_delete_sub", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1313", "weight": 1.0}, {"source": "crud_production_task_rationale_1", "target": "users_wuzilong_work_00code_zkxw_backend_app_crud_production_task_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1", "weight": 1.0}, {"source": "crud_production_task_rationale_1004", "target": "crud_production_task_update_product_from_output", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1004", "weight": 1.0}, {"source": "crud_production_task_rationale_1188", "target": "crud_production_task_copy_task_step", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1188", "weight": 1.0}, {"source": "crud_production_task_rationale_1291", "target": "crud_production_task_delete_production_task", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1291", "weight": 1.0}], "raw_calls": [{"caller_nid": "crud_production_task_fmt_dt", "callee": "strftime", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L44"}, {"caller_nid": "crud_production_task_generate_task_no", "callee": "strftime", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L48"}, {"caller_nid": "crud_production_task_generate_task_no", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L48"}, {"caller_nid": "crud_production_task_generate_task_no", "callee": "scalar", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L51"}, {"caller_nid": "crud_production_task_generate_task_no", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L51"}, {"caller_nid": "crud_production_task_generate_task_no", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L51"}, {"caller_nid": "crud_production_task_generate_task_no", "callee": "count", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L51"}, {"caller_nid": "crud_production_task_generate_task_no", "callee": "like", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L54"}, {"caller_nid": "crud_production_task_task_output_to_dict", "callee": "float", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L185"}, {"caller_nid": "crud_production_task_soft_delete_sub", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L203"}, {"caller_nid": "crud_production_task_soft_delete_sub", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L203"}, {"caller_nid": "crud_production_task_soft_delete_sub", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L203"}, {"caller_nid": "crud_production_task_soft_delete_sub", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L204"}, {"caller_nid": "crud_production_task_soft_delete_sub", "callee": "getattr", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L205"}, {"caller_nid": "crud_production_task_soft_delete_sub", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L212"}, {"caller_nid": "crud_production_task_clone_step_reagents", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L219"}, {"caller_nid": "crud_production_task_clone_step_reagents", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L219"}, {"caller_nid": "crud_production_task_clone_step_reagents", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L219"}, {"caller_nid": "crud_production_task_clone_step_reagents", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L220"}, {"caller_nid": "crud_production_task_clone_step_reagents", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L222"}, {"caller_nid": "crud_production_task_clone_step_reagents", "callee": "BizProductionTaskStepReagent", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L222"}, {"caller_nid": "crud_production_task_clone_step_reagents", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L223"}, {"caller_nid": "crud_production_task_clone_step_consumables", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L237"}, {"caller_nid": "crud_production_task_clone_step_consumables", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L237"}, {"caller_nid": "crud_production_task_clone_step_consumables", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L237"}, {"caller_nid": "crud_production_task_clone_step_consumables", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L238"}, {"caller_nid": "crud_production_task_clone_step_consumables", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L240"}, {"caller_nid": "crud_production_task_clone_step_consumables", "callee": "BizProductionTaskStepConsumable", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L240"}, {"caller_nid": "crud_production_task_clone_step_consumables", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L241"}, {"caller_nid": "crud_production_task_clone_step_outputs", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L255"}, {"caller_nid": "crud_production_task_clone_step_outputs", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L255"}, {"caller_nid": "crud_production_task_clone_step_outputs", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L255"}, {"caller_nid": "crud_production_task_clone_step_outputs", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L256"}, {"caller_nid": "crud_production_task_clone_step_outputs", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L258"}, {"caller_nid": "crud_production_task_clone_step_outputs", "callee": "BizProductionTaskStepOutput", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L258"}, {"caller_nid": "crud_production_task_clone_step_outputs", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L259"}, {"caller_nid": "crud_production_task_clone_step_data_collections", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L272"}, {"caller_nid": "crud_production_task_clone_step_data_collections", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L272"}, {"caller_nid": "crud_production_task_clone_step_data_collections", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L272"}, {"caller_nid": "crud_production_task_clone_step_data_collections", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L273"}, {"caller_nid": "crud_production_task_clone_step_data_collections", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L275"}, {"caller_nid": "crud_production_task_clone_step_data_collections", "callee": "BizProductionTaskStepDataCollection", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L275"}, {"caller_nid": "crud_production_task_clone_step_data_collections", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L276"}, {"caller_nid": "crud_production_task_clone_route_to_task", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L289"}, {"caller_nid": "crud_production_task_clone_route_to_task", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L289"}, {"caller_nid": "crud_production_task_clone_route_to_task", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L289"}, {"caller_nid": "crud_production_task_clone_route_to_task", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L289"}, {"caller_nid": "crud_production_task_clone_route_to_task", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L290"}, {"caller_nid": "crud_production_task_clone_route_to_task", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L291"}, {"caller_nid": "crud_production_task_clone_route_to_task", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L291"}, {"caller_nid": "crud_production_task_clone_route_to_task", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L294"}, {"caller_nid": "crud_production_task_clone_route_to_task", "callee": "BizProductionTaskStep", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L296"}, {"caller_nid": "crud_production_task_clone_route_to_task", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L297"}, {"caller_nid": "crud_production_task_clone_route_to_task", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L308"}, {"caller_nid": "crud_production_task_clone_route_to_task", "callee": "flush", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L309"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L322"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "BizProductionTask", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L323"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L324"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L326"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L327"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L328"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L328"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L329"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L329"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L330"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L332"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L332"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L333"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L333"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L343"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "flush", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L344"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L346"}, {"caller_nid": "crud_production_task_create_production_task", "callee": "flush", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L350"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "scalar", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L378"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "with_entities", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L378"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L378"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "_filtered", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L378"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "count", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L378"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "max", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L379"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "min", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L380"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "max", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L380"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L382"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "limit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L382"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "offset", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L382"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L382"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "_filtered", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L382"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "desc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L383"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L394"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L394"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L394"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "in_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L395"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "zip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L398"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L399"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L405"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L405"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L405"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "in_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L413"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "zip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L418"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L419"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "values", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L425"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "getattr", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L425"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L429"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L429"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L429"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "in_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L434"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "values", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L440"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "getattr", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L440"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L445"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L445"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L445"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "in_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L446"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L453"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L453"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L453"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "in_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L454"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L458"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "zip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L460"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L461"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L466"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L470"}, {"caller_nid": "crud_production_task_list_production_tasks", "callee": "int", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L471"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L475"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L475"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L475"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L476"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L485"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L485"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L485"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L492"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L492"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L492"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L492"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L493"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L494"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L494"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L500"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L500"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L500"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L500"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L501"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L502"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L502"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L503"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L503"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L503"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L503"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L504"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L505"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L505"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L506"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L506"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L506"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L506"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L507"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L508"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L508"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L509"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L509"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L509"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L509"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L510"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L511"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L511"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "append", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L517"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L519"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L519"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L519"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L519"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L520"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L521"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L521"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L523"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L523"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L523"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L523"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L524"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L525"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L525"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L534"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L534"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L534"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "in_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L535"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "set", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L535"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "_cp_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L537"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "_cp_enrich", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L538"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "enumerate", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L540"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L550"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L550"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L550"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "in_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L551"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "set", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L551"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "_cp_row_to_dict", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L553"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "_cp_enrich", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L554"}, {"caller_nid": "crud_production_task_get_production_task_detail", "callee": "enumerate", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L556"}, {"caller_nid": "crud_production_task_update_production_task", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L568"}, {"caller_nid": "crud_production_task_update_production_task", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L568"}, {"caller_nid": "crud_production_task_update_production_task", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L568"}, {"caller_nid": "crud_production_task_update_production_task", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L569"}, {"caller_nid": "crud_production_task_update_production_task", "callee": "ValueError", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L576"}, {"caller_nid": "crud_production_task_update_production_task", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L578"}, {"caller_nid": "crud_production_task_update_production_task", "callee": "setattr", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L580"}, {"caller_nid": "crud_production_task_update_production_task", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L580"}, {"caller_nid": "crud_production_task_update_production_task", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L582"}, {"caller_nid": "crud_production_task_update_production_task", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L583"}, {"caller_nid": "crud_production_task_update_production_task", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L584"}, {"caller_nid": "crud_production_task_update_production_task", "callee": "refresh", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L585"}, {"caller_nid": "crud_production_task_update_task_status", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L593"}, {"caller_nid": "crud_production_task_update_task_status", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L593"}, {"caller_nid": "crud_production_task_update_task_status", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L593"}, {"caller_nid": "crud_production_task_update_task_status", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L594"}, {"caller_nid": "crud_production_task_update_task_status", "callee": "ValueError", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L601"}, {"caller_nid": "crud_production_task_update_task_status", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L602"}, {"caller_nid": "crud_production_task_update_task_status", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L610"}, {"caller_nid": "crud_production_task_update_task_status", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L611"}, {"caller_nid": "crud_production_task_update_task_status", "callee": "refresh", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L612"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L620"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L620"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L620"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L621"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "ValueError", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L628"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L630"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L631"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "scalar", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L633"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L633"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L633"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "max", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L633"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L634"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L639"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L641"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L641"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L641"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L642"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "ValueError", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L645"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "BizProductionTaskStep", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L647"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L648"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L663"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "flush", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L664"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L667"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L667"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L667"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L668"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L670"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "BizProductionTaskStepReagent", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L670"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L671"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L680"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L680"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L680"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L681"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L683"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "BizProductionTaskStepConsumable", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L683"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L684"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L693"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L693"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L693"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L694"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L696"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "BizProductionTaskStepOutput", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L696"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L697"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L705"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L705"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L705"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L706"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L708"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "BizProductionTaskStepDataCollection", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L708"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L709"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L716"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "BizProductionTaskStep", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L719"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L720"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L722"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L722"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L723"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L723"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L724"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L724"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L725"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L725"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L726"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L726"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L727"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L727"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L728"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L728"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L729"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L729"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L730"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L732"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L732"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L736"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L737"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L741"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L741"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L741"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L741"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L742"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L743"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L743"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L744"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L744"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L744"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L744"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L745"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L746"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L746"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L747"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L747"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L747"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L747"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L748"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L749"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L749"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L750"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L750"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L750"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L750"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L751"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L752"}, {"caller_nid": "crud_production_task_add_task_step", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L752"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L765"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L765"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L765"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L766"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "ValueError", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L773"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L779"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "setattr", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L782"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "int", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L782"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "setattr", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L784"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L784"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L785"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "_parse_dt", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L787"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L788"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "_parse_dt", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L790"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L792"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L793"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L794"}, {"caller_nid": "crud_production_task_update_task_step", "callee": "refresh", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L795"}, {"caller_nid": "crud_production_task_delete_task_step", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L800"}, {"caller_nid": "crud_production_task_delete_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L800"}, {"caller_nid": "crud_production_task_delete_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L800"}, {"caller_nid": "crud_production_task_delete_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L801"}, {"caller_nid": "crud_production_task_delete_task_step", "callee": "ValueError", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L808"}, {"caller_nid": "crud_production_task_delete_task_step", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L809"}, {"caller_nid": "crud_production_task_delete_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L813"}, {"caller_nid": "crud_production_task_delete_task_step", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L818"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L825"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "enumerate", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L827"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L828"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "BizProductionTaskStepReagent", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L828"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L829"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L830"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L830"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L831"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L831"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L832"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L832"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L833"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L833"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L834"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L834"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L835"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L835"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L836"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L837"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L837"}, {"caller_nid": "crud_production_task_replace_step_reagents", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L841"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L848"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "enumerate", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L850"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L851"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "BizProductionTaskStepConsumable", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L851"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L852"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L853"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L853"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L854"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L854"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L855"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L855"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L856"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L856"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L857"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L857"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L858"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L858"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L859"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L860"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L860"}, {"caller_nid": "crud_production_task_replace_step_consumables", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L864"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L871"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "enumerate", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L873"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L874"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "BizProductionTaskStepOutput", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L874"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L875"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L876"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L876"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L877"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L877"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L878"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L878"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L879"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L879"}, {"caller_nid": "crud_production_task_replace_step_outputs", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L883"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L890"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "enumerate", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L892"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L893"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "BizProductionTaskStepDataCollection", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L893"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L894"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L895"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L895"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L896"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L896"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L897"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L897"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L898"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L898"}, {"caller_nid": "crud_production_task_replace_step_data_collections", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L902"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L909"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L912"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L912"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L912"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L913"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L921"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L921"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L921"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L928"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "enumerate", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L934"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L935"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L935"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L935"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L936"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L936"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L936"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L939"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L939"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L939"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L946"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L947"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "BizProductionTaskInput", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L947"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L948"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L951"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L951"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L951"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L952"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L952"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L952"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L953"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L953"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "flush", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L958"}, {"caller_nid": "crud_production_task_set_task_inputs", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L959"}, {"caller_nid": "crud_production_task_parse_optional_date", "callee": "_parse_dt", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L968"}, {"caller_nid": "crud_production_task_parse_optional_date", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L968"}, {"caller_nid": "crud_production_task_create_occupancy_for_product", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L977"}, {"caller_nid": "crud_production_task_create_occupancy_for_product", "callee": "BizStorageSlotOccupancy", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L978"}, {"caller_nid": "crud_production_task_create_occupancy_for_product", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L979"}, {"caller_nid": "crud_production_task_create_occupancy_for_product", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L998"}, {"caller_nid": "crud_production_task_create_occupancy_for_product", "callee": "flush", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L999"}, {"caller_nid": "crud_production_task_create_occupancy_for_product", "callee": "_refresh_slot_cache", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1000"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1016"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1016"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1016"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "setattr", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1018"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1018"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1018"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1023"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1025"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "setattr", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1027"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1032"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1032"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "setattr", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1034"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1035"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1037"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "str", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1037"}, {"caller_nid": "crud_production_task_update_product_from_output", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1038"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1049"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1052"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1052"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1052"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1053"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "set", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1064"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1066"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1066"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1066"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1068"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "items", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1071"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1073"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1073"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1073"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1080"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "remove_occupancy_by_item", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1082"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1086"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "enumerate", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1089"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1090"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1090"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1090"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1094"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1094"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1094"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1101"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "remove_occupancy_by_item", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1104"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1111"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1112"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1112"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1113"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1113"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1117"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "BizCellProduct", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1120"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1121"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1122"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1122"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1122"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1123"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1123"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1123"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1124"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1124"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1124"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1125"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1125"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1125"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1126"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1126"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1127"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1127"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1127"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1128"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1128"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1128"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1129"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1129"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1129"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1130"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1131"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1131"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1132"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1132"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1135"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1136"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1136"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1137"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1137"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1138"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1138"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1138"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1141"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1141"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1149"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "flush", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1150"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "BizProductionTaskOutput", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1153"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1154"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1162"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1162"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1166"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "flush", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1168"}, {"caller_nid": "crud_production_task_set_task_outputs", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1169"}, {"caller_nid": "crud_production_task_reorder_task_steps", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1173"}, {"caller_nid": "crud_production_task_reorder_task_steps", "callee": "enumerate", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1174"}, {"caller_nid": "crud_production_task_reorder_task_steps", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1175"}, {"caller_nid": "crud_production_task_reorder_task_steps", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1175"}, {"caller_nid": "crud_production_task_reorder_task_steps", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1175"}, {"caller_nid": "crud_production_task_reorder_task_steps", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1176"}, {"caller_nid": "crud_production_task_reorder_task_steps", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1182"}, {"caller_nid": "crud_production_task_reorder_task_steps", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1183"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1189"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1189"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1189"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1190"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "ValueError", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1193"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1195"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1199"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "order_by", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1199"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1199"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1199"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1200"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "asc", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1205"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1209"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "strip", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1212"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "endswith", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1213"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "BizProductionTaskStep", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1215"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1216"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1227"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "flush", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1228"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1231"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1231"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1231"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1232"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1234"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "BizProductionTaskStepReagent", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1234"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1235"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1246"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1246"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1246"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1247"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1249"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "BizProductionTaskStepConsumable", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1249"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1250"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1261"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1261"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1261"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1262"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1264"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "BizProductionTaskStepOutput", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1264"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1265"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1274"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1274"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1274"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1275"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1277"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "BizProductionTaskStepDataCollection", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1277"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "generate_uuid", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1278"}, {"caller_nid": "crud_production_task_copy_task_step", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1286"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "first", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1292"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1292"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1292"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1293"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "ValueError", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1300"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "now", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1302"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "all", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1305"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1305"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "query", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1305"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "and_", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1306"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1312"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "add", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1328"}, {"caller_nid": "crud_production_task_delete_production_task", "callee": "commit", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1330"}, {"caller_nid": "crud_production_task_total_pages", "callee": "int", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1336"}, {"caller_nid": "crud_production_task_total_pages", "callee": "ceil", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1336"}, {"caller_nid": "crud_production_task_total_pages", "callee": "float", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_task.py", "source_location": "L1336"}]} \ No newline at end of file diff --git a/backend/app/graphify-out/cache/ast/e932ade8f52ee5667083f23b0125c9666352b7fa2c4c13afc1557a7df8aeae44.json b/backend/app/graphify-out/cache/ast/e932ade8f52ee5667083f23b0125c9666352b7fa2c4c13afc1557a7df8aeae44.json new file mode 100644 index 000000000..de32b6281 --- /dev/null +++ b/backend/app/graphify-out/cache/ast/e932ade8f52ee5667083f23b0125c9666352b7fa2c4c13afc1557a7df8aeae44.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "label": "production_task.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L1"}, {"id": "schemas_production_task_productiontaskcreate", "label": "ProductionTaskCreate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L6"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "schemas_production_task_productiontasklistquery", "label": "ProductionTaskListQuery", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L15"}, {"id": "schemas_production_task_productiontaskupdate", "label": "ProductionTaskUpdate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L23"}, {"id": "schemas_production_task_productiontaskstatusupdate", "label": "ProductionTaskStatusUpdate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L30"}, {"id": "schemas_production_task_taskstepadd", "label": "TaskStepAdd", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L35"}, {"id": "schemas_production_task_taskstepupdate", "label": "TaskStepUpdate", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L46"}, {"id": "schemas_production_task_taskstepmaterialitem", "label": "TaskStepMaterialItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L56"}, {"id": "schemas_production_task_taskstepoutputitem", "label": "TaskStepOutputItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L69"}, {"id": "schemas_production_task_taskstepdatacollectionitem", "label": "TaskStepDataCollectionItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L76"}, {"id": "schemas_production_task_taskinputitem", "label": "TaskInputItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L83"}, {"id": "schemas_production_task_taskoutputitem", "label": "TaskOutputItem", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L92"}, {"id": "schemas_production_task_taskstepreorderbody", "label": "TaskStepReorderBody", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L120"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "schemas_production_task_productiontaskcreate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L6", "weight": 1.0}, {"source": "schemas_production_task_productiontaskcreate", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "schemas_production_task_productiontasklistquery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L15", "weight": 1.0}, {"source": "schemas_production_task_productiontasklistquery", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L15", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "schemas_production_task_productiontaskupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L23", "weight": 1.0}, {"source": "schemas_production_task_productiontaskupdate", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L23", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "schemas_production_task_productiontaskstatusupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L30", "weight": 1.0}, {"source": "schemas_production_task_productiontaskstatusupdate", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L30", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "schemas_production_task_taskstepadd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L35", "weight": 1.0}, {"source": "schemas_production_task_taskstepadd", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L35", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "schemas_production_task_taskstepupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L46", "weight": 1.0}, {"source": "schemas_production_task_taskstepupdate", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L46", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "schemas_production_task_taskstepmaterialitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L56", "weight": 1.0}, {"source": "schemas_production_task_taskstepmaterialitem", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L56", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "schemas_production_task_taskstepoutputitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L69", "weight": 1.0}, {"source": "schemas_production_task_taskstepoutputitem", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L69", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "schemas_production_task_taskstepdatacollectionitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L76", "weight": 1.0}, {"source": "schemas_production_task_taskstepdatacollectionitem", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L76", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "schemas_production_task_taskinputitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L83", "weight": 1.0}, {"source": "schemas_production_task_taskinputitem", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L83", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "schemas_production_task_taskoutputitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L92", "weight": 1.0}, {"source": "schemas_production_task_taskoutputitem", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L92", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_schemas_production_task_py", "target": "schemas_production_task_taskstepreorderbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L120", "weight": 1.0}, {"source": "schemas_production_task_taskstepreorderbody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/schemas/production_task.py", "source_location": "L120", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/backend/app/schemas/production_task.py b/backend/app/schemas/production_task.py index c94a48f6e..149e3f49f 100644 --- a/backend/app/schemas/production_task.py +++ b/backend/app/schemas/production_task.py @@ -91,12 +91,28 @@ class TaskInputItem(BaseModel): class TaskOutputItem(BaseModel): model_config = ConfigDict(populate_by_name=True) + # 关联字段 cell_product_id: Optional[str] = Field(None, alias="cellProductId") + # 细胞产品完整字段 + product_code: Optional[str] = Field(None, alias="productCode") + product_name: Optional[str] = Field(None, alias="productName") + product_type_id: Optional[str] = Field(None, alias="productTypeId") + spec_id: Optional[str] = Field(None, alias="specId") + passage: Optional[str] = None + batch_no: Optional[str] = Field(None, alias="batchNo") storage_slot_id: Optional[str] = Field(None, alias="storageSlotId") - output_name: Optional[str] = Field(None, alias="outputName") - output_barcode: Optional[str] = Field(None, alias="outputBarcode") + expected_cell_count: Optional[float] = Field(None, alias="expectedCellCount") + viability: Optional[float] = None + freeze_date: Optional[str] = Field(None, alias="freezeDate") quantity: Optional[float] = None unit: Optional[str] = None + expiry_date: Optional[str] = Field(None, alias="expiryDate") + product_images: Optional[str] = Field(None, alias="productImages") + product_status: Optional[str] = Field(None, alias="productStatus") + source_type: Optional[str] = Field(None, alias="sourceType") + # 兼容旧字段 + output_name: Optional[str] = Field(None, alias="outputName") + output_barcode: Optional[str] = Field(None, alias="outputBarcode") remark: Optional[str] = None attachments: Optional[str] = None diff --git a/backend/graphify-out/.graphify_analysis.json b/backend/graphify-out/.graphify_analysis.json index 995a9a995..65e903020 100644 --- a/backend/graphify-out/.graphify_analysis.json +++ b/backend/graphify-out/.graphify_analysis.json @@ -1,22 +1,40 @@ { "communities": { "0": [ + "api_admin_attachment_download_url", "api_admin_attachmentdownloadurlbody", "api_admin_deptcreatebody", "api_admin_deptupdatebody", + "api_admin_dict_data_options", "api_admin_dictdatacreatebody", "api_admin_dictdataupdatebody", "api_admin_dicttypecreatebody", "api_admin_dicttypeupdatebody", "api_admin_expresscompanycreatebody", "api_admin_expresscompanyupdatebody", + "api_admin_format_file_size", + "api_admin_get_tenant_no", "api_admin_itemunitcreatebody", "api_admin_itemunitupdatebody", + "api_admin_list_depts", + "api_admin_list_dict_data", + "api_admin_list_dict_types", + "api_admin_list_express_companies", + "api_admin_list_item_units", + "api_admin_list_menus", + "api_admin_list_post_bound_users", + "api_admin_list_posts", + "api_admin_list_role_management", + "api_admin_list_roles_for_designer", + "api_admin_list_roles_for_select", + "api_admin_list_sites", + "api_admin_list_users_for_select", "api_admin_menucreatebody", "api_admin_menuupdatebody", "api_admin_postcreatebody", "api_admin_postupdatebody", "api_admin_postusersupdatebody", + "api_admin_py", "api_admin_rationale_1537", "api_admin_rationale_45", "api_admin_rationale_77", @@ -29,28 +47,9 @@ "api_admin_siteupdatebody", "api_admin_tenantcreatebody", "api_admin_tenantupdatebody", + "api_admin_upload_attachment", "api_admin_usercreatebody", "api_admin_userupdatebody", - "api_basic_info_cellsampletypecreatebody", - "api_basic_info_cellsampletypeupdatebody", - "api_basic_info_collectionregioncreatebody", - "api_basic_info_collectionregionupdatebody", - "api_basic_info_customercreatebody", - "api_basic_info_customerupdatebody", - "api_basic_info_hospitalcreatebody", - "api_basic_info_hospitalupdatebody", - "api_basic_info_protocolnobatchgeneratebody", - "api_basic_info_protocolnobatchissuebody", - "api_basic_info_protocolnobatchrevokebody", - "api_basic_info_protocolnocreatebody", - "api_basic_info_protocolnoupdatebody", - "api_basic_info_py", - "api_basic_info_rationale_1", - "api_basic_info_samplecodebatchgeneratebody", - "api_basic_info_samplecodebatchissuebody", - "api_basic_info_samplecodebatchrevokebody", - "api_basic_info_samplecodecreatebody", - "api_basic_info_samplecodeupdatebody", "api_material_batchstockinbody", "api_material_batchstockinitem", "api_material_batchstockoutbody", @@ -115,13 +114,18 @@ "api_research_donation_convertfromstoragebody", "api_research_donation_donationcreatebody", "api_research_donation_donationupdatebody", - "api_research_donation_rationale_1", "api_research_donation_statuschangebody", "api_sample_reception_checkitembody", "api_sample_reception_checkitemupdatebody", "api_sample_reception_receptionchecksubmit", "api_sample_reception_samplereceptioncreatebody", "api_sample_reception_samplereceptionupdatebody", + "api_workflow_processdefcreatebody", + "api_workflow_processdefupdatebody", + "api_workflow_publishversionbody", + "api_workflow_rationale_135", + "api_workflow_startinstancebody", + "api_workflow_taskactionbody", "basemodel", "core_data_scope_rationale_1", "core_data_scope_rationale_113", @@ -132,23 +136,16 @@ "core_response_pageresult", "core_response_py", "core_response_responsemodel", - "crud_collection_protocol_no_batch_generate_protocol_nos", - "crud_collection_protocol_no_rationale_256", - "crud_collection_protocol_no_rationale_34", - "crud_sample_code_batch_generate_sample_codes", - "crud_sample_code_rationale_240", - "crud_user_rationale_1", - "crud_user_rationale_134", - "crud_user_rationale_181", - "crud_user_usercrudcompat", + "crud_workflow_publish_version", + "crud_workflow_rationale_1", "models_models_bizattachment", - "models_models_bizcollectionprotocolno", - "models_models_bizcustomer", - "models_models_bizsamplecode", "models_models_sysdept", "models_models_sysrole", "models_models_sysuser", - "models_models_sysuserrole", + "models_models_wfnode", + "models_models_wfprocessdef", + "models_models_wfprocessversion", + "models_models_wftask", "schemas_attachment_attachmentuploadresponse", "schemas_attachment_py", "schemas_auth_changepasswordrequest", @@ -424,13 +421,11 @@ "schemas_workflow_taskresponse", "schemas_workflow_transitiondata", "schemas_workflow_versionresponse", - "services_web_auth_roles_rationale_1", - "services_web_auth_roles_rationale_14", - "services_web_auth_roles_rationale_26", - "services_web_auth_roles_rationale_54" + "services_workflow_engine_rationale_1", + "services_workflow_engine_workflowengine", + "services_workflow_engine_workflowengine_init" ], "1": [ - "api_admin_attachment_download_url", "api_admin_create_dept", "api_admin_create_dict_data", "api_admin_create_dict_type", @@ -453,27 +448,9 @@ "api_admin_delete_site", "api_admin_delete_tenant", "api_admin_delete_user", - "api_admin_dict_data_options", - "api_admin_format_file_size", "api_admin_get_role_data_scope", - "api_admin_get_role_menus", - "api_admin_get_tenant_no", - "api_admin_get_user_by_id", - "api_admin_list_depts", - "api_admin_list_dict_data", - "api_admin_list_dict_types", - "api_admin_list_express_companies", - "api_admin_list_item_units", - "api_admin_list_menus", - "api_admin_list_post_bound_users", - "api_admin_list_posts", - "api_admin_list_role_management", - "api_admin_list_roles_for_designer", - "api_admin_list_sites", "api_admin_list_tenants", "api_admin_list_users", - "api_admin_list_users_for_select", - "api_admin_py", "api_admin_reset_user_password", "api_admin_update_dept", "api_admin_update_dict_data", @@ -489,7 +466,6 @@ "api_admin_update_site", "api_admin_update_tenant", "api_admin_update_user", - "api_admin_upload_attachment", "api_basic_info_batch_generate_protocol_nos", "api_basic_info_batch_generate_sample_codes", "api_basic_info_batch_issue_protocol_nos", @@ -509,10 +485,7 @@ "api_basic_info_delete_protocol_no", "api_basic_info_delete_sample_code", "api_basic_info_get_tenant_no", - "api_basic_info_list_cell_sample_types", - "api_basic_info_list_customers", "api_basic_info_list_hospitals", - "api_basic_info_list_protocol_nos", "api_basic_info_list_sample_codes", "api_basic_info_update_cell_sample_type", "api_basic_info_update_collection_region", @@ -680,6 +653,7 @@ "api_production_delete_process", "api_production_delete_process_category", "api_production_delete_process_route", + "api_production_delete_production_task", "api_production_delete_production_task_step", "api_production_delete_reagent", "api_production_delete_route_step", @@ -777,20 +751,7 @@ "api_qc_update_qc_task_attachments", "api_qc_update_qc_third_party_company", "api_qc_update_qc_third_party_item", - "api_research_donation_batch_delete_research_donations", - "api_research_donation_change_donation_status", - "api_research_donation_convert_from_storage", - "api_research_donation_convert_to_storage", - "api_research_donation_create_research_donation", - "api_research_donation_delete_research_donation", - "api_research_donation_get_current_user_id", - "api_research_donation_get_research_donation_detail", - "api_research_donation_get_tenant_no", - "api_research_donation_list_research_donation_audits", - "api_research_donation_list_research_donations", - "api_research_donation_py", "api_research_donation_submit_donation_audit", - "api_research_donation_update_research_donation", "api_sample_reception_create_check_item", "api_sample_reception_delete_check_item", "api_sample_reception_get_current_user_id", @@ -829,22 +790,21 @@ "core_utils_parse_datetime", "crud_base_crudbase_get", "crud_cell_product_product_to_response", - "crud_collection_protocol_no_enrich_issued_user_names", + "crud_exhibition_appointment_format_visit_date", "crud_exhibition_appointment_row_to_dict", "crud_exhibition_appointment_total_pages", "crud_leave_update_leave_status", "crud_pilot_service_row_to_dict_channel_agreement", + "crud_process_route_list_routes", + "crud_process_route_route_row_to_dict", "crud_process_route_update_step", "crud_production_task_task_to_dict", "crud_production_task_update_task_step", "crud_qc_material_batch_stock_in", - "crud_qc_material_batch_stock_out", - "crud_qc_material_is_enabled_status", "crud_qc_material_rationale_345", - "crud_qc_material_rationale_492", - "crud_qc_material_stock_in", - "crud_qc_material_stock_out", + "crud_qc_task_update_task_attachments", "crud_research_donation_change_status", + "crud_workflow_get_all_tasks_for_business", "schemas_order_adjust_adjuststatus", "schemas_order_adjust_adjusttype", "schemas_order_adjust_py", @@ -894,7 +854,9 @@ "crud_process_route_rationale_455", "crud_production_task_copy_task_step", "crud_production_task_rationale_1", - "crud_production_task_rationale_910", + "crud_production_task_rationale_1004", + "crud_production_task_rationale_1188", + "crud_production_task_rationale_1291", "crud_production_work_order_rationale_104", "crud_production_work_order_rationale_132", "crud_production_work_order_rationale_145", @@ -904,6 +866,10 @@ "crud_protocol_donation_convert_rationale_273", "crud_protocol_donation_convert_rationale_35", "crud_protocol_donation_convert_rationale_84", + "crud_qc_material_usage_deduct_for_task", + "crud_qc_material_usage_rationale_177", + "crud_qc_material_usage_rationale_227", + "crud_qc_material_usage_revert_task_material_usages", "crud_qc_task_rationale_421", "crud_qc_task_result_rationale_43", "crud_qc_task_result_rationale_96", @@ -1098,6 +1064,7 @@ "models_models_syssite", "models_models_systenant", "models_models_sysuserpost", + "models_models_sysuserrole", "models_models_userrole", "models_models_wfprocessinstance", "models_models_wftransition", @@ -1121,24 +1088,77 @@ "models_research_donation_rationale_155", "models_research_donation_rationale_183", "models_research_donation_rationale_43", - "models_research_donation_rationale_64" + "models_research_donation_rationale_64", + "services_web_auth_roles_rationale_1", + "services_web_auth_roles_rationale_14", + "services_web_auth_roles_rationale_26", + "services_web_auth_roles_rationale_54" ], "3": [ + "api_basic_info_cellsampletypecreatebody", + "api_basic_info_cellsampletypeupdatebody", + "api_basic_info_collectionregioncreatebody", + "api_basic_info_collectionregionupdatebody", + "api_basic_info_customercreatebody", + "api_basic_info_customerupdatebody", + "api_basic_info_hospitalcreatebody", + "api_basic_info_hospitalupdatebody", + "api_basic_info_list_cell_sample_types", "api_basic_info_list_collection_regions", + "api_basic_info_list_customers", + "api_basic_info_list_protocol_nos", + "api_basic_info_protocolnobatchgeneratebody", + "api_basic_info_protocolnobatchissuebody", + "api_basic_info_protocolnobatchrevokebody", + "api_basic_info_protocolnocreatebody", + "api_basic_info_protocolnoupdatebody", + "api_basic_info_py", + "api_basic_info_rationale_1", + "api_basic_info_samplecodebatchgeneratebody", + "api_basic_info_samplecodebatchissuebody", + "api_basic_info_samplecodebatchrevokebody", + "api_basic_info_samplecodecreatebody", + "api_basic_info_samplecodeupdatebody", + "api_ethnic_list_ethnics_for_select", + "api_ethnic_py", "api_workflow_get_designer_data", "core_data_scope_apply_data_scope", "core_data_scope_get_child_dept_ids", "core_data_scope_get_user_dept_id", "core_data_scope_py", "core_data_scope_resolve_user_role_scopes", - "core_utils_generate_uuid", "crud_api_request_log_delete", "crud_api_request_log_get", "crud_api_request_log_get_multi_with_filters", "crud_api_request_log_py", "crud_base_crudbase_count", - "crud_base_crudbase_exists", - "crud_collection_protocol_list_audits", + "crud_collection_protocol_detail_query_with_protocol", + "crud_collection_protocol_list_payment_details_page", + "crud_collection_protocol_list_receipt_confirm_details", + "crud_collection_protocol_list_receipt_confirmed_details", + "crud_collection_protocol_list_refund_confirm_details", + "crud_collection_protocol_list_refund_confirmed_details", + "crud_collection_protocol_no_batch_generate_protocol_nos", + "crud_collection_protocol_no_batch_issue_protocol_nos", + "crud_collection_protocol_no_batch_revoke_protocol_nos", + "crud_collection_protocol_no_create_protocol_no", + "crud_collection_protocol_no_enrich_issued_user_names", + "crud_collection_protocol_no_get_protocol_no", + "crud_collection_protocol_no_list_protocol_nos", + "crud_collection_protocol_no_parse_issued_time", + "crud_collection_protocol_no_protocol_no_exists", + "crud_collection_protocol_no_py", + "crud_collection_protocol_no_rationale_1", + "crud_collection_protocol_no_rationale_20", + "crud_collection_protocol_no_rationale_256", + "crud_collection_protocol_no_rationale_34", + "crud_collection_protocol_no_resolve_issued_user_display_name", + "crud_collection_protocol_no_row_to_dict", + "crud_collection_protocol_no_soft_delete_protocol_no", + "crud_collection_protocol_no_total_pages", + "crud_collection_protocol_no_update_protocol_no", + "crud_collection_protocol_party_customer_map_by_protocol_ids", + "crud_collection_protocol_rows_to_payment_detail_dicts", "crud_collection_region_create_collection_region", "crud_collection_region_create_hospital", "crud_collection_region_get_collection_region", @@ -1154,6 +1174,121 @@ "crud_collection_region_total_pages", "crud_collection_region_update_collection_region", "crud_collection_region_update_hospital", + "crud_customer_create_customer", + "crud_customer_get_customer", + "crud_customer_id_card_taken", + "crud_customer_list_customers", + "crud_customer_py", + "crud_customer_rationale_1", + "crud_customer_row_to_dict", + "crud_customer_soft_delete_customer", + "crud_customer_total_pages", + "crud_customer_update_customer", + "crud_ethnic_list_ethnics", + "crud_ethnic_py", + "crud_ethnic_rationale_1", + "crud_ethnic_row_to_dict", + "crud_leave_create_leave", + "crud_leave_get_leave", + "crud_leave_list_leaves", + "crud_leave_py", + "crud_leave_row_to_dict", + "crud_leave_soft_delete_leave", + "crud_leave_total_pages", + "crud_leave_update_leave", + "crud_material_stock_log_dec", + "crud_material_stock_log_fmt_dt", + "crud_material_stock_log_list_stock_logs", + "crud_material_stock_log_py", + "crud_material_stock_log_row_to_dict", + "crud_material_stock_log_user_nick_name_map", + "crud_qc_item_param_list_params_by_item", + "crud_qc_item_param_py", + "crud_qc_item_param_row_to_dict", + "crud_qc_item_param_save_params_for_item", + "crud_qc_material_usage_display_remark", + "crud_qc_material_usage_list_usages", + "crud_qc_material_usage_list_usages_by_task", + "crud_qc_material_usage_parse_receiver_purpose_from_remark", + "crud_qc_material_usage_py", + "crud_qc_material_usage_rationale_155", + "crud_qc_material_usage_rationale_18", + "crud_qc_material_usage_rationale_40", + "crud_qc_material_usage_resolve_receiver_purpose", + "crud_qc_material_usage_row_to_dict", + "crud_qc_material_usage_user_nick_name_map", + "crud_qc_task_result_list_results_by_task", + "crud_qc_task_result_list_saved_results_by_task", + "crud_qc_task_result_merge_saved_into_template", + "crud_qc_task_result_py", + "crud_qc_task_result_resolve_task_item_ref", + "crud_qc_task_result_row_to_dict", + "crud_qc_task_result_save_results_for_task", + "crud_sample_code_batch_generate_sample_codes", + "crud_sample_code_batch_issue_sample_codes", + "crud_sample_code_batch_revoke_sample_codes", + "crud_sample_code_create_sample_code", + "crud_sample_code_get_sample_code", + "crud_sample_code_list_sample_codes", + "crud_sample_code_parse_issued_time", + "crud_sample_code_py", + "crud_sample_code_rationale_1", + "crud_sample_code_rationale_240", + "crud_sample_code_resolve_issued_user_display_name", + "crud_sample_code_row_to_dict", + "crud_sample_code_sample_code_exists", + "crud_sample_code_soft_delete_sample_code", + "crud_sample_code_total_pages", + "crud_sample_code_update_sample_code", + "crud_workflow_create_instance", + "crud_workflow_create_process_def", + "crud_workflow_get_instance", + "crud_workflow_get_latest_version", + "crud_workflow_get_nodes_by_version", + "crud_workflow_get_pending_tasks_by_node", + "crud_workflow_get_process_def", + "crud_workflow_get_task", + "crud_workflow_get_transitions_by_version", + "crud_workflow_list_completed_tasks", + "crud_workflow_list_my_instances", + "crud_workflow_list_pending_tasks", + "crud_workflow_list_process_defs", + "crud_workflow_list_versions", + "crud_workflow_process_code_exists", + "crud_workflow_py", + "crud_workflow_row_to_dict", + "crud_workflow_soft_delete_process_def", + "crud_workflow_task_row_to_dict", + "crud_workflow_total_pages", + "crud_workflow_update_instance_status", + "crud_workflow_update_process_def", + "crud_workflow_version_to_dict", + "models_models_bizcollectionprotocolno", + "models_models_bizcustomer", + "models_models_bizsamplecode", + "services_workflow_callback_dispatch_local", + "services_workflow_callback_py", + "services_workflow_callback_rationale_1", + "services_workflow_callback_rationale_24", + "services_workflow_callback_rationale_29", + "services_workflow_callback_rationale_61", + "services_workflow_callback_register_local_callback", + "services_workflow_callback_trigger_callback", + "services_workflow_engine_compare", + "services_workflow_engine_get_variable", + "services_workflow_engine_parse_node_config", + "services_workflow_engine_parse_variables", + "services_workflow_engine_py", + "services_workflow_engine_workflowengine_advance", + "services_workflow_engine_workflowengine_approve_task", + "services_workflow_engine_workflowengine_check_rules", + "services_workflow_engine_workflowengine_evaluate_condition", + "services_workflow_engine_workflowengine_execute_node", + "services_workflow_engine_workflowengine_reject_task", + "services_workflow_engine_workflowengine_start_process" + ], + "4": [ + "core_utils_generate_uuid", "crud_consumable_pack_create_consumable_pack", "crud_consumable_pack_get_consumable_pack", "crud_consumable_pack_get_pack_detail", @@ -1166,24 +1301,6 @@ "crud_consumable_pack_soft_delete_consumable_pack", "crud_consumable_pack_total_pages", "crud_consumable_pack_update_consumable_pack", - "crud_express_company_create_express_company", - "crud_express_company_express_code_exists", - "crud_express_company_get_express_company", - "crud_express_company_list_express_companies", - "crud_express_company_py", - "crud_express_company_rationale_1", - "crud_express_company_row_to_dict", - "crud_express_company_soft_delete_express_company", - "crud_express_company_total_pages", - "crud_express_company_update_express_company", - "crud_leave_create_leave", - "crud_leave_get_leave", - "crud_leave_list_leaves", - "crud_leave_py", - "crud_leave_row_to_dict", - "crud_leave_soft_delete_leave", - "crud_leave_total_pages", - "crud_leave_update_leave", "crud_material_batch_stock_in", "crud_material_batch_stock_out", "crud_material_code_exists", @@ -1199,6 +1316,323 @@ "crud_material_stock_in", "crud_material_stock_out", "crud_material_update_material", + "crud_pilot_service_create_channel", + "crud_pilot_service_create_channel_agreement", + "crud_pilot_service_create_channel_invoice", + "crud_pilot_service_create_channel_mail_address", + "crud_pilot_service_create_checkup_institution", + "crud_pilot_service_create_checkup_institution_invoice", + "crud_pilot_service_create_checkup_institution_project", + "crud_pilot_service_create_project_system_item", + "crud_process_consumable_row_to_dict", + "crud_process_create_process", + "crud_process_create_sub_consumable", + "crud_process_create_sub_data_collection", + "crud_process_create_sub_output", + "crud_process_create_sub_reagent", + "crud_process_data_collection_row_to_dict", + "crud_process_get_process", + "crud_process_get_process_detail", + "crud_process_list_all_processes", + "crud_process_list_processes", + "crud_process_output_row_to_dict", + "crud_process_process_code_exists", + "crud_process_py", + "crud_process_reagent_row_to_dict", + "crud_process_route_add_step", + "crud_process_route_copy_step", + "crud_process_route_create_route", + "crud_process_route_create_step_consumable", + "crud_process_route_create_step_data_collection", + "crud_process_route_create_step_output", + "crud_process_route_create_step_reagent", + "crud_process_route_get_route", + "crud_process_route_get_route_detail", + "crud_process_route_py", + "crud_process_route_reorder_steps", + "crud_process_route_set_current_route", + "crud_process_route_soft_delete_route", + "crud_process_route_soft_delete_step", + "crud_process_route_soft_delete_sub_records", + "crud_process_route_step_consumable_row_to_dict", + "crud_process_route_step_data_collection_row_to_dict", + "crud_process_route_step_output_row_to_dict", + "crud_process_route_step_reagent_row_to_dict", + "crud_process_route_step_row_to_dict", + "crud_process_route_total_pages", + "crud_process_route_update_route", + "crud_process_route_update_step_consumables", + "crud_process_route_update_step_data_collections", + "crud_process_route_update_step_outputs", + "crud_process_route_update_step_reagents", + "crud_process_row_to_dict", + "crud_process_soft_delete_process", + "crud_process_soft_delete_sub_records", + "crud_process_sub_item_with_order", + "crud_process_total_pages", + "crud_process_update_process", + "crud_production_task_add_task_step", + "crud_production_task_clone_route_to_task", + "crud_production_task_clone_step_consumables", + "crud_production_task_clone_step_data_collections", + "crud_production_task_clone_step_outputs", + "crud_production_task_clone_step_reagents", + "crud_production_task_create_occupancy_for_product", + "crud_production_task_create_production_task", + "crud_production_task_delete_production_task", + "crud_production_task_delete_task_step", + "crud_production_task_fmt_dt", + "crud_production_task_generate_task_no", + "crud_production_task_get_production_task_detail", + "crud_production_task_list_production_tasks", + "crud_production_task_parse_optional_date", + "crud_production_task_py", + "crud_production_task_reorder_task_steps", + "crud_production_task_replace_step_consumables", + "crud_production_task_replace_step_data_collections", + "crud_production_task_replace_step_outputs", + "crud_production_task_replace_step_reagents", + "crud_production_task_set_task_inputs", + "crud_production_task_set_task_outputs", + "crud_production_task_soft_delete_sub", + "crud_production_task_step_consumable_to_dict", + "crud_production_task_step_data_collection_to_dict", + "crud_production_task_step_output_to_dict", + "crud_production_task_step_reagent_to_dict", + "crud_production_task_step_to_dict", + "crud_production_task_task_input_to_dict", + "crud_production_task_task_output_to_dict", + "crud_production_task_total_pages", + "crud_production_task_update_product_from_output", + "crud_production_task_update_production_task", + "crud_production_task_update_task_status", + "crud_qc_material_batch_stock_out", + "crud_qc_material_build_manual_out_remark", + "crud_qc_material_code_exists", + "crud_qc_material_create_material", + "crud_qc_material_dec", + "crud_qc_material_fmt_dt", + "crud_qc_material_get_material", + "crud_qc_material_is_enabled_status", + "crud_qc_material_list_materials", + "crud_qc_material_norm_status", + "crud_qc_material_options_list", + "crud_qc_material_py", + "crud_qc_material_rationale_26", + "crud_qc_material_rationale_492", + "crud_qc_material_row_to_dict", + "crud_qc_material_soft_delete_material", + "crud_qc_material_stock_in", + "crud_qc_material_stock_out", + "crud_qc_material_total_pages", + "crud_qc_material_update_material" + ], + "5": [ + "api_admin_get_user_by_id", + "api_public_avatar_url_field", + "api_public_build_user_info_payload", + "api_public_get_web_auth_menu_codes", + "api_public_jwt_user_payload", + "api_public_logout", + "api_public_py", + "api_public_rationale_1", + "api_public_rationale_197", + "api_public_rationale_249", + "api_public_rationale_43", + "api_public_rationale_70", + "api_public_rationale_81", + "api_public_refresh_token", + "api_public_web_login", + "api_public_web_login_rsa_public_key", + "app_main_health_check", + "app_main_lifespan", + "app_main_mask_secret", + "app_main_root", + "core_auth_create_access_token", + "core_auth_create_refresh_token", + "core_auth_decode_token", + "core_auth_extend_session", + "core_auth_get_client_ip", + "core_auth_get_current_user", + "core_auth_get_current_user_by_token", + "core_auth_get_current_user_simple", + "core_auth_get_redis_client", + "core_auth_is_refresh_token_valid", + "core_auth_is_session_valid", + "core_auth_py", + "core_auth_rationale_107", + "core_auth_rationale_190", + "core_auth_rationale_76", + "core_auth_redis_session_enabled", + "core_auth_refresh_key", + "core_auth_revoke_refresh_token", + "core_auth_revoke_session", + "core_auth_session_key", + "core_auth_store_refresh_token", + "core_auth_store_session", + "core_login_crypto_decrypt_login_payload", + "core_login_crypto_ensure_initialized", + "core_login_crypto_extract_login_credentials", + "core_login_crypto_get_public_pem", + "core_login_crypto_py", + "core_login_crypto_rationale_1", + "core_login_crypto_rationale_63", + "core_login_crypto_rationale_84", + "core_login_crypto_validate_ts", + "core_menu_guard_get_user_menu_codes", + "core_menu_guard_py", + "core_menu_guard_rationale_1", + "core_menu_guard_rationale_16", + "core_menu_guard_rationale_24", + "core_menu_guard_rationale_29", + "core_menu_guard_require_admin_or_super_admin", + "core_menu_guard_require_menu_code", + "core_security_get_password_hash", + "core_security_py", + "core_security_rationale_5", + "core_security_verify_password", + "crud_base_crudbase", + "crud_base_crudbase_delete", + "crud_base_crudbase_exists", + "crud_base_crudbase_get_all", + "crud_base_crudbase_get_multi", + "crud_base_crudbase_hard_delete", + "crud_base_crudbase_init", + "crud_role_update_role_menus", + "crud_user_create_user", + "crud_user_get_user", + "crud_user_get_user_with_relations", + "crud_user_hash_password", + "crud_user_list_post_ids_for_user", + "crud_user_list_user_ids_bound_to_post", + "crud_user_list_users", + "crud_user_py", + "crud_user_rationale_1", + "crud_user_rationale_134", + "crud_user_rationale_181", + "crud_user_replace_associations", + "crud_user_reset_password", + "crud_user_row_to_dict", + "crud_user_set_user_post_ids_only", + "crud_user_soft_delete_user", + "crud_user_sync_post_user_bindings", + "crud_user_total_pages", + "crud_user_update_user", + "crud_user_user_no_exists", + "crud_user_usercrudcompat", + "crud_user_usercrudcompat_get_by_user_no", + "main_py", + "services_web_auth_roles_iter_user_menu_perm_codes", + "services_web_auth_roles_map_role_name_to_web", + "services_web_auth_roles_py", + "services_web_auth_roles_resolve_web_role_for_user", + "tasks_init_init_scheduled_tasks", + "tasks_init_py", + "tasks_init_shutdown_scheduler" + ], + "6": [ + "api_admin_get_role_menus", + "crud_base_crudbase_update", + "crud_collection_protocol_format_attachment_file_size", + "crud_collection_protocol_get_protocol_nos_used_in_protocols", + "crud_collection_protocol_urls_to_attachment_list", + "crud_production_work_order_accept_conclusion_label", + "crud_production_work_order_attach_reception_detail", + "crud_production_work_order_complete_production_work_order", + "crud_production_work_order_create_production_work_order_from_reception", + "crud_production_work_order_enrich_wo_items", + "crud_production_work_order_fmt_dt", + "crud_production_work_order_generate_work_order_no", + "crud_production_work_order_get_production_work_order", + "crud_production_work_order_list_production_work_orders", + "crud_production_work_order_py", + "crud_production_work_order_reception_source_label", + "crud_production_work_order_wo_to_dict", + "crud_production_work_order_wo_to_response_dict", + "crud_qc_task_apply_task_result", + "crud_qc_task_complete_task", + "crud_qc_task_conclusion_label", + "crud_qc_task_create_task_for_line", + "crud_qc_task_dec", + "crud_qc_task_enrich_tasks_reception_fields", + "crud_qc_task_fmt_dt", + "crud_qc_task_gen_task_no", + "crud_qc_task_get_task", + "crud_qc_task_get_task_detail", + "crud_qc_task_list_tasks", + "crud_qc_task_list_tasks_by_work_order", + "crud_qc_task_py", + "crud_qc_task_set_task_remark", + "crud_qc_task_start_task", + "crud_qc_task_task_row_to_dict", + "crud_qc_task_task_to_dict", + "crud_qc_task_task_work_order_context", + "crud_qc_work_order_accept_conclusion_label", + "crud_qc_work_order_configure_work_order", + "crud_qc_work_order_create_work_order_from_reception", + "crud_qc_work_order_dec", + "crud_qc_work_order_enrich_work_order_list_items", + "crud_qc_work_order_fmt_dt", + "crud_qc_work_order_gen_daily_no", + "crud_qc_work_order_get_qc_info_map_for_samples", + "crud_qc_work_order_get_work_order", + "crud_qc_work_order_get_work_order_detail", + "crud_qc_work_order_lab_lines", + "crud_qc_work_order_list_work_orders", + "crud_qc_work_order_load_sample_type_name_map", + "crud_qc_work_order_py", + "crud_qc_work_order_qc_biz_type_label", + "crud_qc_work_order_qc_info_item", + "crud_qc_work_order_reception_source_label", + "crud_qc_work_order_sample_type_name_for_reception", + "crud_qc_work_order_soft_delete_pending_work_order_tasks", + "crud_qc_work_order_third_lines", + "crud_qc_work_order_try_complete_work_order", + "crud_qc_work_order_wo_to_dict", + "crud_qc_work_order_work_order_qc_biz_type", + "crud_role_create_role", + "crud_role_get_role", + "crud_role_get_role_data_scope", + "crud_role_get_role_menu_ids", + "crud_role_list_roles", + "crud_role_py", + "crud_role_rationale_1", + "crud_role_role_name_exists", + "crud_role_row_to_dict", + "crud_role_soft_delete_role", + "crud_role_total_pages", + "crud_role_update_role", + "crud_role_update_role_data_scope", + "crud_sample_reception_check_result_get_check_results_for_reception", + "crud_sample_reception_check_result_legacy_results_from_reception", + "crud_sample_reception_check_result_list_results_by_reception_ids", + "crud_sample_reception_check_result_py", + "crud_sample_reception_check_result_result_to_dict", + "crud_sample_reception_check_result_save_reception_check_results", + "crud_sample_reception_check_result_soft_delete_reception_check_results", + "crud_sample_reception_check_result_sync_legacy_columns_from_results", + "crud_sample_reception_create_sample_reception", + "crud_sample_reception_dec", + "crud_sample_reception_donation_rows_to_sample_list_items", + "crud_sample_reception_donation_sample_detail_rows_query", + "crud_sample_reception_donation_sample_id_col", + "crud_sample_reception_donation_sample_pending_query", + "crud_sample_reception_fmt_dt", + "crud_sample_reception_get_reception_by_id", + "crud_sample_reception_get_receptions_map_for_donation_samples", + "crud_sample_reception_get_receptions_map_for_samples", + "crud_sample_reception_list_pending_protocol_samples", + "crud_sample_reception_list_received_protocol_samples", + "crud_sample_reception_py", + "crud_sample_reception_reception_detail_item", + "crud_sample_reception_reception_sample_code", + "crud_sample_reception_reception_to_dict", + "crud_sample_reception_rows_to_sample_list_items", + "crud_sample_reception_sample_detail_rows_query", + "crud_sample_reception_sample_pending_query", + "crud_sample_reception_update_sample_reception" + ], + "7": [ "crud_pilot_service_activate_channel_agreement", "crud_pilot_service_cell_product_price_code_exists", "crud_pilot_service_cell_product_spec_code_exists", @@ -1209,17 +1643,9 @@ "crud_pilot_service_create_cell_product_price", "crud_pilot_service_create_cell_product_spec", "crud_pilot_service_create_cell_product_type", - "crud_pilot_service_create_channel", - "crud_pilot_service_create_channel_agreement", "crud_pilot_service_create_channel_agreement_price", - "crud_pilot_service_create_channel_invoice", - "crud_pilot_service_create_channel_mail_address", - "crud_pilot_service_create_checkup_institution", - "crud_pilot_service_create_checkup_institution_invoice", "crud_pilot_service_create_checkup_institution_package", - "crud_pilot_service_create_checkup_institution_project", "crud_pilot_service_create_project_system", - "crud_pilot_service_create_project_system_item", "crud_pilot_service_get_cell_product_price", "crud_pilot_service_get_cell_product_spec", "crud_pilot_service_get_cell_product_type", @@ -1294,208 +1720,9 @@ "crud_pilot_service_update_project_system", "crud_pilot_service_update_project_system_item", "crud_pilot_service_validate_package_items_for_save", - "crud_pilot_service_void_channel_agreement", - "crud_production_task_add_task_step", - "crud_production_task_clone_route_to_task", - "crud_production_task_clone_step_consumables", - "crud_production_task_clone_step_data_collections", - "crud_production_task_clone_step_outputs", - "crud_production_task_clone_step_reagents", - "crud_production_task_create_production_task", - "crud_production_task_delete_task_step", - "crud_production_task_fmt_dt", - "crud_production_task_generate_task_no", - "crud_production_task_get_production_task_detail", - "crud_production_task_list_production_tasks", - "crud_production_task_py", - "crud_production_task_reorder_task_steps", - "crud_production_task_replace_step_consumables", - "crud_production_task_replace_step_data_collections", - "crud_production_task_replace_step_outputs", - "crud_production_task_replace_step_reagents", - "crud_production_task_set_task_inputs", - "crud_production_task_set_task_outputs", - "crud_production_task_soft_delete_sub", - "crud_production_task_step_consumable_to_dict", - "crud_production_task_step_data_collection_to_dict", - "crud_production_task_step_output_to_dict", - "crud_production_task_step_reagent_to_dict", - "crud_production_task_step_to_dict", - "crud_production_task_task_input_to_dict", - "crud_production_task_task_output_to_dict", - "crud_production_task_total_pages", - "crud_production_task_update_production_task", - "crud_production_task_update_task_status", - "crud_qc_item_param_list_params_by_item", - "crud_qc_item_param_py", - "crud_qc_item_param_row_to_dict", - "crud_qc_item_param_save_params_for_item", - "crud_qc_lab_test_item_create_lab_item", - "crud_qc_lab_test_item_get_lab_item", - "crud_qc_lab_test_item_item_code_exists", - "crud_qc_lab_test_item_list_active_lab_items", - "crud_qc_lab_test_item_list_lab_items", - "crud_qc_lab_test_item_py", - "crud_qc_lab_test_item_row_to_dict", - "crud_qc_lab_test_item_soft_delete_lab_item", - "crud_qc_lab_test_item_update_lab_item", - "crud_qc_task_result_list_results_by_task", - "crud_qc_task_result_list_saved_results_by_task", - "crud_qc_task_result_merge_saved_into_template", - "crud_qc_task_result_py", - "crud_qc_task_result_resolve_task_item_ref", - "crud_qc_task_result_row_to_dict", - "crud_qc_task_result_save_results_for_task", - "crud_workflow_create_instance", - "crud_workflow_create_process_def", - "crud_workflow_get_all_tasks_for_business", - "crud_workflow_get_latest_version", - "crud_workflow_get_nodes_by_version", - "crud_workflow_get_process_def", - "crud_workflow_get_task", - "crud_workflow_get_transitions_by_version", - "crud_workflow_list_completed_tasks", - "crud_workflow_list_my_instances", - "crud_workflow_list_pending_tasks", - "crud_workflow_list_process_defs", - "crud_workflow_list_versions", - "crud_workflow_process_code_exists", - "crud_workflow_py", - "crud_workflow_row_to_dict", - "crud_workflow_soft_delete_process_def", - "crud_workflow_task_row_to_dict", - "crud_workflow_total_pages", - "crud_workflow_update_process_def", - "crud_workflow_version_to_dict", - "services_workflow_engine_workflowengine_start_process" + "crud_pilot_service_void_channel_agreement" ], - "4": [ - "crud_base_crudbase_update", - "crud_collection_protocol_format_attachment_file_size", - "crud_collection_protocol_get_protocol_nos_used_in_protocols", - "crud_collection_protocol_urls_to_attachment_list", - "crud_dict_type_create_dict_type", - "crud_dict_type_dict_type_code_exists", - "crud_dict_type_get_dict_type", - "crud_dict_type_list_dict_types", - "crud_dict_type_py", - "crud_dict_type_row_to_dict", - "crud_dict_type_soft_delete_dict_type", - "crud_dict_type_total_pages", - "crud_dict_type_update_dict_type", - "crud_production_work_order_accept_conclusion_label", - "crud_production_work_order_attach_reception_detail", - "crud_production_work_order_complete_production_work_order", - "crud_production_work_order_create_production_work_order_from_reception", - "crud_production_work_order_enrich_wo_items", - "crud_production_work_order_fmt_dt", - "crud_production_work_order_generate_work_order_no", - "crud_production_work_order_get_production_work_order", - "crud_production_work_order_list_production_work_orders", - "crud_production_work_order_py", - "crud_production_work_order_reception_source_label", - "crud_production_work_order_wo_to_dict", - "crud_production_work_order_wo_to_response_dict", - "crud_qc_task_apply_task_result", - "crud_qc_task_complete_task", - "crud_qc_task_conclusion_label", - "crud_qc_task_create_task_for_line", - "crud_qc_task_dec", - "crud_qc_task_enrich_tasks_reception_fields", - "crud_qc_task_fmt_dt", - "crud_qc_task_gen_task_no", - "crud_qc_task_get_task", - "crud_qc_task_get_task_detail", - "crud_qc_task_list_tasks", - "crud_qc_task_list_tasks_by_work_order", - "crud_qc_task_py", - "crud_qc_task_set_task_remark", - "crud_qc_task_start_task", - "crud_qc_task_task_row_to_dict", - "crud_qc_task_task_to_dict", - "crud_qc_task_task_work_order_context", - "crud_qc_task_update_task_attachments", - "crud_qc_work_order_accept_conclusion_label", - "crud_qc_work_order_configure_work_order", - "crud_qc_work_order_create_work_order_from_reception", - "crud_qc_work_order_dec", - "crud_qc_work_order_enrich_work_order_list_items", - "crud_qc_work_order_fmt_dt", - "crud_qc_work_order_gen_daily_no", - "crud_qc_work_order_get_qc_info_map_for_samples", - "crud_qc_work_order_get_work_order", - "crud_qc_work_order_get_work_order_detail", - "crud_qc_work_order_lab_lines", - "crud_qc_work_order_list_work_orders", - "crud_qc_work_order_load_sample_type_name_map", - "crud_qc_work_order_py", - "crud_qc_work_order_qc_biz_type_label", - "crud_qc_work_order_qc_info_item", - "crud_qc_work_order_reception_source_label", - "crud_qc_work_order_sample_type_name_for_reception", - "crud_qc_work_order_soft_delete_pending_work_order_tasks", - "crud_qc_work_order_third_lines", - "crud_qc_work_order_try_complete_work_order", - "crud_qc_work_order_wo_to_dict", - "crud_qc_work_order_work_order_qc_biz_type", - "crud_sample_reception_check_result_get_check_results_for_reception", - "crud_sample_reception_check_result_legacy_results_from_reception", - "crud_sample_reception_check_result_list_results_by_reception_ids", - "crud_sample_reception_check_result_py", - "crud_sample_reception_check_result_result_to_dict", - "crud_sample_reception_check_result_save_reception_check_results", - "crud_sample_reception_check_result_soft_delete_reception_check_results", - "crud_sample_reception_check_result_sync_legacy_columns_from_results", - "crud_sample_reception_create_sample_reception", - "crud_sample_reception_dec", - "crud_sample_reception_donation_rows_to_sample_list_items", - "crud_sample_reception_donation_sample_detail_rows_query", - "crud_sample_reception_donation_sample_id_col", - "crud_sample_reception_donation_sample_pending_query", - "crud_sample_reception_fmt_dt", - "crud_sample_reception_get_reception_by_id", - "crud_sample_reception_get_receptions_map_for_donation_samples", - "crud_sample_reception_get_receptions_map_for_samples", - "crud_sample_reception_list_pending_protocol_samples", - "crud_sample_reception_list_received_protocol_samples", - "crud_sample_reception_py", - "crud_sample_reception_reception_detail_item", - "crud_sample_reception_reception_sample_code", - "crud_sample_reception_reception_to_dict", - "crud_sample_reception_rows_to_sample_list_items", - "crud_sample_reception_sample_detail_rows_query", - "crud_sample_reception_sample_pending_query", - "crud_sample_reception_update_sample_reception", - "crud_sop_document_create_sop_document", - "crud_sop_document_get_sop_document", - "crud_sop_document_list_sop_documents", - "crud_sop_document_py", - "crud_sop_document_rationale_1", - "crud_sop_document_row_to_dict", - "crud_sop_document_soft_delete_sop_document", - "crud_sop_document_sop_code_exists", - "crud_sop_document_total_pages", - "crud_sop_document_update_sop_document", - "crud_storage_facility_clear_slots_by_facility_node", - "crud_user_create_user", - "crud_user_get_user", - "crud_user_get_user_with_relations", - "crud_user_hash_password", - "crud_user_list_post_ids_for_user", - "crud_user_list_user_ids_bound_to_post", - "crud_user_list_users", - "crud_user_py", - "crud_user_replace_associations", - "crud_user_reset_password", - "crud_user_row_to_dict", - "crud_user_set_user_post_ids_only", - "crud_user_soft_delete_user", - "crud_user_sync_post_user_bindings", - "crud_user_total_pages", - "crud_user_update_user", - "crud_user_user_no_exists" - ], - "5": [ + "8": [ "api_collection_protocol_persist_protocol_sub_resources", "crud_collection_protocol_add_months_yyyymmdd", "crud_collection_protocol_align_fq_payment_details_payload", @@ -1511,9 +1738,7 @@ "crud_collection_protocol_confirm_receipt", "crud_collection_protocol_confirm_refund", "crud_collection_protocol_create_audit", - "crud_collection_protocol_create_collection_protocol", "crud_collection_protocol_dec", - "crud_collection_protocol_detail_query_with_protocol", "crud_collection_protocol_detail_to_dict", "crud_collection_protocol_fmt_dt", "crud_collection_protocol_format_newborn_info", @@ -1530,14 +1755,10 @@ "crud_collection_protocol_get_protocol_detail_bundle", "crud_collection_protocol_get_sample_codes_used_in_protocol_samples", "crud_collection_protocol_get_storage_cert", + "crud_collection_protocol_list_audits", "crud_collection_protocol_list_collection_protocols", "crud_collection_protocol_list_installment_warning", "crud_collection_protocol_list_payment_details", - "crud_collection_protocol_list_payment_details_page", - "crud_collection_protocol_list_receipt_confirm_details", - "crud_collection_protocol_list_receipt_confirmed_details", - "crud_collection_protocol_list_refund_confirm_details", - "crud_collection_protocol_list_refund_confirmed_details", "crud_collection_protocol_list_sample_transports", "crud_collection_protocol_list_samples", "crud_collection_protocol_list_storage_certs", @@ -1548,14 +1769,12 @@ "crud_collection_protocol_normalize_fields", "crud_collection_protocol_normalize_yyyymmdd_date", "crud_collection_protocol_optional_decimal", - "crud_collection_protocol_party_customer_map_by_protocol_ids", "crud_collection_protocol_party_customer_to_dict", "crud_collection_protocol_payment_to_dict", "crud_collection_protocol_pick_storage_in_date", "crud_collection_protocol_pop_attachment_urls", "crud_collection_protocol_protocol_to_dict", "crud_collection_protocol_py", - "crud_collection_protocol_rows_to_payment_detail_dicts", "crud_collection_protocol_sample_to_dict", "crud_collection_protocol_save_payment_details", "crud_collection_protocol_save_sample_transports", @@ -1575,23 +1794,102 @@ "crud_collection_protocol_upsert_payment", "crud_collection_protocol_upsert_storage_cert", "crud_collection_protocol_user_nick_name_map", - "crud_collection_protocol_validate_sample_codes_not_used", - "crud_protocol_donation_convert_active_link_query", - "crud_protocol_donation_convert_assert_biz_no_available", - "crud_protocol_donation_convert_create_convert_link", - "crud_protocol_donation_convert_get_convert_partner", - "crud_protocol_donation_convert_get_partner_sample_codes", - "crud_protocol_donation_convert_has_active_convert_link", - "crud_protocol_donation_convert_py", - "crud_protocol_donation_convert_upsert_convert_link_for_to_storage" + "crud_collection_protocol_validate_sample_codes_not_used" ], - "6": [ - "api_workflow_processdefcreatebody", - "api_workflow_processdefupdatebody", - "api_workflow_publishversionbody", - "api_workflow_rationale_135", - "api_workflow_startinstancebody", - "api_workflow_taskactionbody", + "9": [ + "api_operations_accesslogcreatebody", + "api_operations_accesslogupdatebody", + "api_operations_cleanroomcreatebody", + "api_operations_cleanroomupdatebody", + "api_operations_exhibitionappointmentcreatebody", + "api_operations_exhibitionappointmentupdatebody", + "api_operations_occupancycreatebody", + "api_operations_rationale_1", + "api_operations_storagefacilitycreatebody", + "api_operations_storagefacilityupdatebody", + "api_operations_storageslotbatchcreatebody", + "api_operations_storageslotclearbody", + "api_operations_storageslotcreatebody", + "api_operations_storageslotinsertrowbody", + "api_operations_storageslotupdatebody", + "crud_clean_room_access_log_to_dict", + "crud_clean_room_create_access_log", + "crud_clean_room_create_clean_room", + "crud_clean_room_get_access_log", + "crud_clean_room_get_clean_room", + "crud_clean_room_list_access_logs", + "crud_clean_room_list_clean_rooms", + "crud_clean_room_py", + "crud_clean_room_rationale_1", + "crud_clean_room_room_code_exists", + "crud_clean_room_row_to_dict", + "crud_clean_room_soft_delete_access_log", + "crud_clean_room_soft_delete_clean_room", + "crud_clean_room_total_pages", + "crud_clean_room_update_access_log", + "crud_clean_room_update_clean_room", + "crud_exhibition_appointment_appointment_no_exists", + "crud_exhibition_appointment_create_exhibition_appointment", + "crud_exhibition_appointment_generate_appointment_no", + "crud_exhibition_appointment_get_exhibition_appointment", + "crud_exhibition_appointment_list_exhibition_appointments", + "crud_exhibition_appointment_py", + "crud_exhibition_appointment_rationale_1", + "crud_exhibition_appointment_rationale_100", + "crud_exhibition_appointment_rationale_16", + "crud_exhibition_appointment_soft_delete_exhibition_appointment", + "crud_exhibition_appointment_update_exhibition_appointment", + "crud_storage_facility_batch_create_slots", + "crud_storage_facility_clear_slots_by_facility_node", + "crud_storage_facility_collect_descendant_ids", + "crud_storage_facility_create_facility", + "crud_storage_facility_create_slot", + "crud_storage_facility_get_children", + "crud_storage_facility_get_facility", + "crud_storage_facility_get_slot", + "crud_storage_facility_insert_row_and_shift_slots", + "crud_storage_facility_list_all_facilities", + "crud_storage_facility_list_slots", + "crud_storage_facility_py", + "crud_storage_facility_rationale_1", + "crud_storage_facility_rationale_165", + "crud_storage_facility_rationale_41", + "crud_storage_facility_rationale_63", + "crud_storage_facility_rationale_79", + "crud_storage_facility_row_to_dict", + "crud_storage_facility_slot_to_dict", + "crud_storage_facility_soft_delete_facility", + "crud_storage_facility_soft_delete_slot", + "crud_storage_facility_update_facility", + "crud_storage_facility_update_slot", + "models_models_bizcleanroom", + "models_models_bizcleanroomaccesslog", + "models_models_bizexhibitionappointment", + "models_models_bizstoragefacility", + "models_models_bizstoragefacilityslot" + ], + "10": [ + "core_exceptions_businessexception", + "core_exceptions_businessexception_init", + "core_exceptions_invalidstatustransitionexception", + "core_exceptions_invalidstatustransitionexception_init", + "core_exceptions_log_api_request", + "core_exceptions_log_delivery_operation", + "core_exceptions_log_operation", + "core_exceptions_log_order_operation", + "core_exceptions_log_settlement_operation", + "core_exceptions_log_user_operation", + "core_exceptions_orderlockedexception", + "core_exceptions_orderlockedexception_init", + "core_exceptions_permissionexception", + "core_exceptions_permissionexception_init", + "core_exceptions_py", + "core_exceptions_resourceconflictexception", + "core_exceptions_resourceconflictexception_init", + "core_exceptions_resourcenotfoundexception", + "core_exceptions_resourcenotfoundexception_init", + "core_exceptions_validationexception", + "core_exceptions_validationexception_init", "core_storage_basestorage", "core_storage_basestorage_delete_file", "core_storage_basestorage_get_url", @@ -1638,264 +1936,72 @@ "core_storage_rationale_38", "core_storage_rationale_53", "core_storage_rationale_83", - "crud_workflow_create_task", - "crud_workflow_get_instance", - "crud_workflow_get_pending_tasks_by_node", - "crud_workflow_publish_version", - "crud_workflow_rationale_1", - "crud_workflow_update_instance_status", "exception", - "models_models_wfnode", - "models_models_wfprocessdef", - "models_models_wfprocessversion", - "models_models_wftask", - "services_workflow_callback_dispatch_local", - "services_workflow_callback_py", - "services_workflow_callback_rationale_1", - "services_workflow_callback_rationale_24", - "services_workflow_callback_rationale_29", - "services_workflow_callback_rationale_61", - "services_workflow_callback_register_local_callback", - "services_workflow_callback_trigger_callback", - "services_workflow_engine_compare", - "services_workflow_engine_get_variable", - "services_workflow_engine_parse_node_config", - "services_workflow_engine_parse_variables", - "services_workflow_engine_py", - "services_workflow_engine_rationale_1", - "services_workflow_engine_workflowengine", - "services_workflow_engine_workflowengine_advance", - "services_workflow_engine_workflowengine_approve_task", - "services_workflow_engine_workflowengine_check_rules", - "services_workflow_engine_workflowengine_evaluate_condition", - "services_workflow_engine_workflowengine_execute_node", - "services_workflow_engine_workflowengine_init", - "services_workflow_engine_workflowengine_reject_task", "services_workflow_engine_workflowengine_resolve_approvers" ], - "7": [ - "basehttpmiddleware", - "core_admin_request_json_parse_admin_request_json", - "core_admin_request_json_py", - "core_admin_request_json_rationale_1", - "core_admin_request_json_rationale_25", - "core_api_crypto_apicryptoerror", - "core_api_crypto_b64url_decode", - "core_api_crypto_b64url_encode", - "core_api_crypto_decrypt_json", - "core_api_crypto_derive_key", - "core_api_crypto_encrypt_json", - "core_api_crypto_gen_nonce_hex", - "core_api_crypto_is_ts_in_window", - "core_api_crypto_middleware_apicryptomiddleware", - "core_api_crypto_middleware_apicryptomiddleware_dispatch", - "core_api_crypto_middleware_claims_from_auth", - "core_api_crypto_middleware_coerce_post_method_override_to_get", - "core_api_crypto_middleware_get_redis_client", - "core_api_crypto_middleware_is_crypto_api", - "core_api_crypto_middleware_json_error_response", - "core_api_crypto_middleware_mark_nonce_once", - "core_api_crypto_middleware_nonce_key", - "core_api_crypto_middleware_py", - "core_api_crypto_middleware_rationale_106", - "core_api_crypto_middleware_rationale_38", - "core_api_crypto_middleware_should_skip_path", - "core_api_crypto_py", - "core_api_request_log_middleware_apirequestlogmiddleware", - "core_api_request_log_middleware_apirequestlogmiddleware_dispatch", - "core_api_request_log_middleware_claims_from_auth", - "core_api_request_log_middleware_format_body_bytes", - "core_api_request_log_middleware_persist_log", - "core_api_request_log_middleware_py", - "core_api_request_log_middleware_rationale_1", - "core_api_request_log_middleware_redact_obj", - "core_api_request_log_middleware_schedule_persist_log", - "core_api_request_log_middleware_should_skip", - "core_api_request_log_middleware_truncate", - "core_request_payload_py", - "core_request_payload_rationale_1", - "core_request_payload_rationale_18", - "core_request_payload_resolve_request_payload", - "core_utils_format_datetime", - "core_utils_generate_id", - "core_utils_generate_random_password", - "core_utils_get_current_time", - "core_utils_get_file_size_display", - "core_utils_py", - "crud_base_camel_to_snake", - "crud_base_crudbase", - "crud_base_crudbase_create", - "crud_base_crudbase_delete", - "crud_base_crudbase_get_all", - "crud_base_crudbase_get_multi", - "crud_base_crudbase_hard_delete", - "crud_base_crudbase_init", - "crud_base_get_model_attr", - "crud_base_historycrud", - "crud_base_historycrud_create_history", - "crud_base_py", - "crud_role_create_role", - "crud_role_get_role", - "crud_role_get_role_data_scope", - "crud_role_get_role_menu_ids", - "crud_role_list_roles", - "crud_role_py", - "crud_role_rationale_1", - "crud_role_role_name_exists", - "crud_role_row_to_dict", - "crud_role_soft_delete_role", - "crud_role_total_pages", - "crud_role_update_role", - "crud_role_update_role_data_scope", - "crud_role_update_role_menus" + "11": [ + "api_research_donation_batch_delete_research_donations", + "api_research_donation_change_donation_status", + "api_research_donation_convert_from_storage", + "api_research_donation_convert_to_storage", + "api_research_donation_create_research_donation", + "api_research_donation_delete_research_donation", + "api_research_donation_get_current_user_id", + "api_research_donation_get_research_donation_detail", + "api_research_donation_get_tenant_no", + "api_research_donation_list_research_donation_audits", + "api_research_donation_list_research_donations", + "api_research_donation_py", + "api_research_donation_rationale_1", + "api_research_donation_update_research_donation", + "crud_collection_protocol_create_collection_protocol", + "crud_protocol_donation_convert_active_link_query", + "crud_protocol_donation_convert_assert_biz_no_available", + "crud_protocol_donation_convert_create_convert_link", + "crud_protocol_donation_convert_get_convert_partner", + "crud_protocol_donation_convert_get_partner_sample_codes", + "crud_protocol_donation_convert_has_active_convert_link", + "crud_protocol_donation_convert_py", + "crud_protocol_donation_convert_upsert_convert_link_for_to_storage", + "crud_research_donation_audit_to_dict", + "crud_research_donation_batch_delete_donations", + "crud_research_donation_collection_to_dict", + "crud_research_donation_convert_to_storage", + "crud_research_donation_create_collection", + "crud_research_donation_create_donation", + "crud_research_donation_create_party", + "crud_research_donation_create_samples", + "crud_research_donation_create_transport", + "crud_research_donation_dec", + "crud_research_donation_delete_donation", + "crud_research_donation_donation_to_dict", + "crud_research_donation_fmt_dt", + "crud_research_donation_get_collection", + "crud_research_donation_get_donation_detail", + "crud_research_donation_get_party", + "crud_research_donation_list_audits", + "crud_research_donation_list_donations", + "crud_research_donation_list_sample_transports", + "crud_research_donation_list_samples", + "crud_research_donation_merge_comma_separated_urls", + "crud_research_donation_normalize_fields", + "crud_research_donation_optional_decimal", + "crud_research_donation_party_to_dict", + "crud_research_donation_py", + "crud_research_donation_resolve_donation_payload", + "crud_research_donation_sample_to_dict", + "crud_research_donation_soft_delete_all", + "crud_research_donation_soft_delete_collection", + "crud_research_donation_soft_delete_party", + "crud_research_donation_soft_delete_samples", + "crud_research_donation_soft_delete_transports", + "crud_research_donation_submit_audit", + "crud_research_donation_total_pages", + "crud_research_donation_transport_to_dict", + "crud_research_donation_update_donation", + "crud_research_donation_user_nick_name_map" ], - "8": [ - "api_admin_list_roles_for_select", - "api_public_avatar_url_field", - "api_public_build_user_info_payload", - "api_public_get_web_auth_menu_codes", - "api_public_jwt_user_payload", - "api_public_logout", - "api_public_py", - "api_public_rationale_1", - "api_public_rationale_197", - "api_public_rationale_249", - "api_public_rationale_43", - "api_public_rationale_70", - "api_public_rationale_81", - "api_public_refresh_token", - "api_public_web_login", - "api_public_web_login_rsa_public_key", - "app_main_health_check", - "app_main_lifespan", - "app_main_mask_secret", - "app_main_root", - "core_auth_create_access_token", - "core_auth_create_refresh_token", - "core_auth_decode_token", - "core_auth_extend_session", - "core_auth_get_client_ip", - "core_auth_get_current_user", - "core_auth_get_current_user_by_token", - "core_auth_get_current_user_simple", - "core_auth_get_redis_client", - "core_auth_is_refresh_token_valid", - "core_auth_is_session_valid", - "core_auth_py", - "core_auth_rationale_107", - "core_auth_rationale_190", - "core_auth_rationale_76", - "core_auth_redis_session_enabled", - "core_auth_refresh_key", - "core_auth_revoke_refresh_token", - "core_auth_revoke_session", - "core_auth_session_key", - "core_auth_store_refresh_token", - "core_auth_store_session", - "core_login_crypto_decrypt_login_payload", - "core_login_crypto_ensure_initialized", - "core_login_crypto_extract_login_credentials", - "core_login_crypto_get_public_pem", - "core_login_crypto_py", - "core_login_crypto_rationale_1", - "core_login_crypto_rationale_63", - "core_login_crypto_rationale_84", - "core_login_crypto_validate_ts", - "core_menu_guard_get_user_menu_codes", - "core_menu_guard_py", - "core_menu_guard_rationale_1", - "core_menu_guard_rationale_16", - "core_menu_guard_rationale_24", - "core_menu_guard_rationale_29", - "core_menu_guard_require_admin_or_super_admin", - "core_menu_guard_require_menu_code", - "core_security_get_password_hash", - "core_security_py", - "core_security_rationale_5", - "core_security_verify_password", - "crud_user_usercrudcompat_get_by_user_no", - "main_py", - "services_web_auth_roles_iter_user_menu_perm_codes", - "services_web_auth_roles_map_role_name_to_web", - "services_web_auth_roles_py", - "services_web_auth_roles_resolve_web_role_for_user", - "tasks_init_init_scheduled_tasks", - "tasks_init_py", - "tasks_init_shutdown_scheduler" - ], - "9": [ - "api_operations_accesslogcreatebody", - "api_operations_accesslogupdatebody", - "api_operations_cleanroomcreatebody", - "api_operations_cleanroomupdatebody", - "api_operations_exhibitionappointmentcreatebody", - "api_operations_exhibitionappointmentupdatebody", - "api_operations_occupancycreatebody", - "api_operations_rationale_1", - "api_operations_storagefacilitycreatebody", - "api_operations_storagefacilityupdatebody", - "api_operations_storageslotbatchcreatebody", - "api_operations_storageslotclearbody", - "api_operations_storageslotcreatebody", - "api_operations_storageslotinsertrowbody", - "api_operations_storageslotupdatebody", - "crud_clean_room_access_log_to_dict", - "crud_clean_room_create_access_log", - "crud_clean_room_create_clean_room", - "crud_clean_room_get_access_log", - "crud_clean_room_get_clean_room", - "crud_clean_room_list_access_logs", - "crud_clean_room_list_clean_rooms", - "crud_clean_room_py", - "crud_clean_room_rationale_1", - "crud_clean_room_room_code_exists", - "crud_clean_room_row_to_dict", - "crud_clean_room_soft_delete_access_log", - "crud_clean_room_soft_delete_clean_room", - "crud_clean_room_total_pages", - "crud_clean_room_update_access_log", - "crud_clean_room_update_clean_room", - "crud_exhibition_appointment_appointment_no_exists", - "crud_exhibition_appointment_create_exhibition_appointment", - "crud_exhibition_appointment_format_visit_date", - "crud_exhibition_appointment_generate_appointment_no", - "crud_exhibition_appointment_get_exhibition_appointment", - "crud_exhibition_appointment_list_exhibition_appointments", - "crud_exhibition_appointment_py", - "crud_exhibition_appointment_rationale_1", - "crud_exhibition_appointment_rationale_100", - "crud_exhibition_appointment_rationale_16", - "crud_exhibition_appointment_soft_delete_exhibition_appointment", - "crud_exhibition_appointment_update_exhibition_appointment", - "crud_storage_facility_batch_create_slots", - "crud_storage_facility_collect_descendant_ids", - "crud_storage_facility_create_facility", - "crud_storage_facility_create_slot", - "crud_storage_facility_get_children", - "crud_storage_facility_get_facility", - "crud_storage_facility_get_slot", - "crud_storage_facility_insert_row_and_shift_slots", - "crud_storage_facility_list_all_facilities", - "crud_storage_facility_list_slots", - "crud_storage_facility_py", - "crud_storage_facility_rationale_1", - "crud_storage_facility_rationale_165", - "crud_storage_facility_rationale_41", - "crud_storage_facility_rationale_63", - "crud_storage_facility_rationale_79", - "crud_storage_facility_row_to_dict", - "crud_storage_facility_slot_to_dict", - "crud_storage_facility_soft_delete_facility", - "crud_storage_facility_soft_delete_slot", - "crud_storage_facility_update_facility", - "crud_storage_facility_update_slot", - "models_models_bizcleanroom", - "models_models_bizcleanroomaccesslog", - "models_models_bizexhibitionappointment", - "models_models_bizstoragefacility", - "models_models_bizstoragefacilityslot" - ], - "10": [ + "12": [ "api_production_consumablecreatebody", "api_production_consumablepackcreatebody", "api_production_consumablepackupdatebody", @@ -1956,46 +2062,64 @@ "schemas_production_work_order_productionworkorderlistquery", "schemas_production_work_order_py" ], - "11": [ - "crud_research_donation_audit_to_dict", - "crud_research_donation_batch_delete_donations", - "crud_research_donation_collection_to_dict", - "crud_research_donation_convert_to_storage", - "crud_research_donation_create_collection", - "crud_research_donation_create_donation", - "crud_research_donation_create_party", - "crud_research_donation_create_samples", - "crud_research_donation_create_transport", - "crud_research_donation_dec", - "crud_research_donation_delete_donation", - "crud_research_donation_donation_to_dict", - "crud_research_donation_fmt_dt", - "crud_research_donation_get_collection", - "crud_research_donation_get_donation_detail", - "crud_research_donation_get_party", - "crud_research_donation_list_audits", - "crud_research_donation_list_donations", - "crud_research_donation_list_sample_transports", - "crud_research_donation_list_samples", - "crud_research_donation_merge_comma_separated_urls", - "crud_research_donation_normalize_fields", - "crud_research_donation_optional_decimal", - "crud_research_donation_party_to_dict", - "crud_research_donation_py", - "crud_research_donation_resolve_donation_payload", - "crud_research_donation_sample_to_dict", - "crud_research_donation_soft_delete_all", - "crud_research_donation_soft_delete_collection", - "crud_research_donation_soft_delete_party", - "crud_research_donation_soft_delete_samples", - "crud_research_donation_soft_delete_transports", - "crud_research_donation_submit_audit", - "crud_research_donation_total_pages", - "crud_research_donation_transport_to_dict", - "crud_research_donation_update_donation", - "crud_research_donation_user_nick_name_map" + "13": [ + "basehttpmiddleware", + "core_admin_request_json_parse_admin_request_json", + "core_admin_request_json_py", + "core_admin_request_json_rationale_1", + "core_admin_request_json_rationale_25", + "core_api_crypto_apicryptoerror", + "core_api_crypto_b64url_decode", + "core_api_crypto_b64url_encode", + "core_api_crypto_decrypt_json", + "core_api_crypto_derive_key", + "core_api_crypto_encrypt_json", + "core_api_crypto_gen_nonce_hex", + "core_api_crypto_is_ts_in_window", + "core_api_crypto_middleware_apicryptomiddleware", + "core_api_crypto_middleware_apicryptomiddleware_dispatch", + "core_api_crypto_middleware_claims_from_auth", + "core_api_crypto_middleware_coerce_post_method_override_to_get", + "core_api_crypto_middleware_get_redis_client", + "core_api_crypto_middleware_is_crypto_api", + "core_api_crypto_middleware_json_error_response", + "core_api_crypto_middleware_mark_nonce_once", + "core_api_crypto_middleware_nonce_key", + "core_api_crypto_middleware_py", + "core_api_crypto_middleware_rationale_106", + "core_api_crypto_middleware_rationale_38", + "core_api_crypto_middleware_should_skip_path", + "core_api_crypto_py", + "core_api_request_log_middleware_apirequestlogmiddleware", + "core_api_request_log_middleware_apirequestlogmiddleware_dispatch", + "core_api_request_log_middleware_claims_from_auth", + "core_api_request_log_middleware_format_body_bytes", + "core_api_request_log_middleware_persist_log", + "core_api_request_log_middleware_py", + "core_api_request_log_middleware_rationale_1", + "core_api_request_log_middleware_redact_obj", + "core_api_request_log_middleware_schedule_persist_log", + "core_api_request_log_middleware_should_skip", + "core_api_request_log_middleware_truncate", + "core_request_payload_py", + "core_request_payload_rationale_1", + "core_request_payload_rationale_18", + "core_request_payload_resolve_request_payload", + "core_utils_format_datetime", + "core_utils_generate_id", + "core_utils_generate_random_password", + "core_utils_get_current_time", + "core_utils_get_file_size_display", + "core_utils_py", + "crud_base_camel_to_snake", + "crud_base_crudbase_create", + "crud_base_get_model_attr", + "crud_base_historycrud", + "crud_base_historycrud_create_history", + "crud_base_py", + "crud_workflow_create_task" ], - "12": [ + "14": [ "api_insurance_company_create_insurance_company", "api_insurance_company_create_insurance_company_invoice", "api_insurance_company_create_insurance_project_price", @@ -2030,7 +2154,7 @@ "models_models_bizinsurancecompanyinvoice", "models_models_bizinsuranceprojectprice" ], - "13": [ + "15": [ "core_wechat_pay_get_wechat_pay_client", "core_wechat_pay_get_wechat_pay_v2", "core_wechat_pay_py", @@ -2063,7 +2187,7 @@ "core_wechat_pay_wechatpayv2client_unified_order", "core_wechat_pay_wechatpayv2client_xml_to_dict" ], - "14": [ + "16": [ "api_production_get_next_cell_product_code", "crud_cell_product_build_facility_path_label", "crud_cell_product_build_split_product_codes", @@ -2096,83 +2220,7 @@ "crud_storage_occupancy_remove_occupancy", "crud_storage_occupancy_row_to_dict" ], - "15": [ - "crud_process_route_add_step", - "crud_process_route_copy_step", - "crud_process_route_create_route", - "crud_process_route_create_step_consumable", - "crud_process_route_create_step_data_collection", - "crud_process_route_create_step_output", - "crud_process_route_create_step_reagent", - "crud_process_route_get_route", - "crud_process_route_get_route_detail", - "crud_process_route_list_routes", - "crud_process_route_py", - "crud_process_route_reorder_steps", - "crud_process_route_route_row_to_dict", - "crud_process_route_set_current_route", - "crud_process_route_soft_delete_route", - "crud_process_route_soft_delete_step", - "crud_process_route_soft_delete_sub_records", - "crud_process_route_step_consumable_row_to_dict", - "crud_process_route_step_data_collection_row_to_dict", - "crud_process_route_step_output_row_to_dict", - "crud_process_route_step_reagent_row_to_dict", - "crud_process_route_step_row_to_dict", - "crud_process_route_total_pages", - "crud_process_route_update_route", - "crud_process_route_update_step_consumables", - "crud_process_route_update_step_data_collections", - "crud_process_route_update_step_outputs", - "crud_process_route_update_step_reagents" - ], - "16": [ - "core_exceptions_businessexception", - "core_exceptions_businessexception_init", - "core_exceptions_invalidstatustransitionexception", - "core_exceptions_invalidstatustransitionexception_init", - "core_exceptions_log_api_request", - "core_exceptions_log_delivery_operation", - "core_exceptions_log_operation", - "core_exceptions_log_order_operation", - "core_exceptions_log_settlement_operation", - "core_exceptions_log_user_operation", - "core_exceptions_orderlockedexception", - "core_exceptions_orderlockedexception_init", - "core_exceptions_permissionexception", - "core_exceptions_permissionexception_init", - "core_exceptions_py", - "core_exceptions_resourceconflictexception", - "core_exceptions_resourceconflictexception_init", - "core_exceptions_resourcenotfoundexception", - "core_exceptions_resourcenotfoundexception_init", - "core_exceptions_validationexception", - "core_exceptions_validationexception_init" - ], "17": [ - "crud_process_consumable_row_to_dict", - "crud_process_create_process", - "crud_process_create_sub_consumable", - "crud_process_create_sub_data_collection", - "crud_process_create_sub_output", - "crud_process_create_sub_reagent", - "crud_process_data_collection_row_to_dict", - "crud_process_get_process", - "crud_process_get_process_detail", - "crud_process_list_all_processes", - "crud_process_list_processes", - "crud_process_output_row_to_dict", - "crud_process_process_code_exists", - "crud_process_py", - "crud_process_reagent_row_to_dict", - "crud_process_row_to_dict", - "crud_process_soft_delete_process", - "crud_process_soft_delete_sub_records", - "crud_process_sub_item_with_order", - "crud_process_total_pages", - "crud_process_update_process" - ], - "18": [ "crud_qc_third_party_company_company_code_exists", "crud_qc_third_party_company_create_company", "crud_qc_third_party_company_get_company", @@ -2194,74 +2242,7 @@ "crud_qc_third_party_item_soft_delete_item", "crud_qc_third_party_item_update_item" ], - "19": [ - "crud_qc_material_usage_deduct_for_task", - "crud_qc_material_usage_display_remark", - "crud_qc_material_usage_list_usages", - "crud_qc_material_usage_list_usages_by_task", - "crud_qc_material_usage_parse_receiver_purpose_from_remark", - "crud_qc_material_usage_py", - "crud_qc_material_usage_rationale_155", - "crud_qc_material_usage_rationale_177", - "crud_qc_material_usage_rationale_18", - "crud_qc_material_usage_rationale_227", - "crud_qc_material_usage_rationale_40", - "crud_qc_material_usage_resolve_receiver_purpose", - "crud_qc_material_usage_revert_task_material_usages", - "crud_qc_material_usage_row_to_dict", - "crud_qc_material_usage_user_nick_name_map" - ], - "20": [ - "crud_qc_material_build_manual_out_remark", - "crud_qc_material_code_exists", - "crud_qc_material_create_material", - "crud_qc_material_dec", - "crud_qc_material_fmt_dt", - "crud_qc_material_get_material", - "crud_qc_material_list_materials", - "crud_qc_material_norm_status", - "crud_qc_material_options_list", - "crud_qc_material_py", - "crud_qc_material_rationale_26", - "crud_qc_material_row_to_dict", - "crud_qc_material_soft_delete_material", - "crud_qc_material_total_pages", - "crud_qc_material_update_material" - ], - "21": [ - "crud_collection_protocol_no_batch_issue_protocol_nos", - "crud_collection_protocol_no_batch_revoke_protocol_nos", - "crud_collection_protocol_no_create_protocol_no", - "crud_collection_protocol_no_get_protocol_no", - "crud_collection_protocol_no_list_protocol_nos", - "crud_collection_protocol_no_parse_issued_time", - "crud_collection_protocol_no_protocol_no_exists", - "crud_collection_protocol_no_py", - "crud_collection_protocol_no_rationale_1", - "crud_collection_protocol_no_rationale_20", - "crud_collection_protocol_no_resolve_issued_user_display_name", - "crud_collection_protocol_no_row_to_dict", - "crud_collection_protocol_no_soft_delete_protocol_no", - "crud_collection_protocol_no_total_pages", - "crud_collection_protocol_no_update_protocol_no" - ], - "22": [ - "crud_sample_code_batch_issue_sample_codes", - "crud_sample_code_batch_revoke_sample_codes", - "crud_sample_code_create_sample_code", - "crud_sample_code_get_sample_code", - "crud_sample_code_list_sample_codes", - "crud_sample_code_parse_issued_time", - "crud_sample_code_py", - "crud_sample_code_rationale_1", - "crud_sample_code_resolve_issued_user_display_name", - "crud_sample_code_row_to_dict", - "crud_sample_code_sample_code_exists", - "crud_sample_code_soft_delete_sample_code", - "crud_sample_code_total_pages", - "crud_sample_code_update_sample_code" - ], - "23": [ + "18": [ "core_wechat_message_py", "core_wechat_message_rationale_1", "core_wechat_message_rationale_86", @@ -2276,7 +2257,7 @@ "core_wechat_message_wechatmessageservice_init", "core_wechat_message_wechatmessageservice_send_template_message" ], - "24": [ + "19": [ "schemas_product_config", "schemas_product_productbase", "schemas_product_productcategorybase", @@ -2291,7 +2272,7 @@ "schemas_product_py", "schemas_product_rationale_1" ], - "25": [ + "20": [ "crud_dept_build_tree", "crud_dept_cascade_soft_delete", "crud_dept_collect_with_ancestors", @@ -2305,7 +2286,7 @@ "crud_dept_soft_delete_dept", "crud_dept_update_dept" ], - "26": [ + "21": [ "crud_menu_build_tree", "crud_menu_cascade_soft_delete", "crud_menu_create_menu", @@ -2318,7 +2299,7 @@ "crud_menu_soft_delete_menu", "crud_menu_update_menu" ], - "27": [ + "22": [ "crud_consumable_consumable_code_exists", "crud_consumable_create_consumable", "crud_consumable_get_consumable", @@ -2330,7 +2311,31 @@ "crud_consumable_total_pages", "crud_consumable_update_consumable" ], - "28": [ + "23": [ + "crud_sop_document_create_sop_document", + "crud_sop_document_get_sop_document", + "crud_sop_document_list_sop_documents", + "crud_sop_document_py", + "crud_sop_document_rationale_1", + "crud_sop_document_row_to_dict", + "crud_sop_document_soft_delete_sop_document", + "crud_sop_document_sop_code_exists", + "crud_sop_document_total_pages", + "crud_sop_document_update_sop_document" + ], + "24": [ + "crud_express_company_create_express_company", + "crud_express_company_express_code_exists", + "crud_express_company_get_express_company", + "crud_express_company_list_express_companies", + "crud_express_company_py", + "crud_express_company_rationale_1", + "crud_express_company_row_to_dict", + "crud_express_company_soft_delete_express_company", + "crud_express_company_total_pages", + "crud_express_company_update_express_company" + ], + "25": [ "crud_sample_reception_check_item_create_check_item", "crud_sample_reception_check_item_get_check_item", "crud_sample_reception_check_item_item_code_exists", @@ -2342,7 +2347,7 @@ "crud_sample_reception_check_item_soft_delete_check_item", "crud_sample_reception_check_item_update_check_item" ], - "29": [ + "26": [ "crud_dict_data_create_dict_data", "crud_dict_data_get_dict_data", "crud_dict_data_list_dict_data", @@ -2354,7 +2359,7 @@ "crud_dict_data_total_pages", "crud_dict_data_update_dict_data" ], - "30": [ + "27": [ "crud_process_category_category_code_exists", "crud_process_category_create_process_category", "crud_process_category_get_process_category", @@ -2366,7 +2371,7 @@ "crud_process_category_total_pages", "crud_process_category_update_process_category" ], - "31": [ + "28": [ "crud_item_unit_create_item_unit", "crud_item_unit_get_item_unit", "crud_item_unit_list_item_units", @@ -2378,19 +2383,7 @@ "crud_item_unit_unit_code_exists", "crud_item_unit_update_item_unit" ], - "32": [ - "crud_customer_create_customer", - "crud_customer_get_customer", - "crud_customer_id_card_taken", - "crud_customer_list_customers", - "crud_customer_py", - "crud_customer_rationale_1", - "crud_customer_row_to_dict", - "crud_customer_soft_delete_customer", - "crud_customer_total_pages", - "crud_customer_update_customer" - ], - "33": [ + "29": [ "crud_cell_sample_type_create_cell_sample_type", "crud_cell_sample_type_get_cell_sample_type", "crud_cell_sample_type_list_cell_sample_types", @@ -2402,7 +2395,7 @@ "crud_cell_sample_type_type_code_exists", "crud_cell_sample_type_update_cell_sample_type" ], - "34": [ + "30": [ "crud_output_type_create_output_type", "crud_output_type_get_output_type", "crud_output_type_list_output_types", @@ -2414,7 +2407,7 @@ "crud_output_type_type_code_exists", "crud_output_type_update_output_type" ], - "35": [ + "31": [ "crud_post_create_post", "crud_post_get_post", "crud_post_list_posts", @@ -2425,7 +2418,18 @@ "crud_post_total_pages", "crud_post_update_post" ], - "36": [ + "32": [ + "crud_dict_type_create_dict_type", + "crud_dict_type_dict_type_code_exists", + "crud_dict_type_get_dict_type", + "crud_dict_type_list_dict_types", + "crud_dict_type_py", + "crud_dict_type_row_to_dict", + "crud_dict_type_soft_delete_dict_type", + "crud_dict_type_total_pages", + "crud_dict_type_update_dict_type" + ], + "33": [ "crud_tenant_create_tenant", "crud_tenant_get_tenant", "crud_tenant_list_tenants", @@ -2436,7 +2440,7 @@ "crud_tenant_total_pages", "crud_tenant_update_tenant" ], - "37": [ + "34": [ "crud_reagent_create_reagent", "crud_reagent_get_reagent", "crud_reagent_list_reagents", @@ -2447,7 +2451,18 @@ "crud_reagent_total_pages", "crud_reagent_update_reagent" ], - "38": [ + "35": [ + "crud_qc_lab_test_item_create_lab_item", + "crud_qc_lab_test_item_get_lab_item", + "crud_qc_lab_test_item_item_code_exists", + "crud_qc_lab_test_item_list_active_lab_items", + "crud_qc_lab_test_item_list_lab_items", + "crud_qc_lab_test_item_py", + "crud_qc_lab_test_item_row_to_dict", + "crud_qc_lab_test_item_soft_delete_lab_item", + "crud_qc_lab_test_item_update_lab_item" + ], + "36": [ "crud_site_create_site", "crud_site_get_site", "crud_site_list_sites", @@ -2458,7 +2473,7 @@ "crud_site_total_pages", "crud_site_update_site" ], - "39": [ + "37": [ "models_base_basemodel", "models_base_basemodel_to_dict", "models_base_get_active", @@ -2468,7 +2483,7 @@ "models_base_softdeletemodel_soft_delete", "models_base_tablename" ], - "40": [ + "38": [ "core_order_status_compat_derive_legacy_status_from_three", "core_order_status_compat_derive_three_status_from_legacy", "core_order_status_compat_py", @@ -2477,81 +2492,65 @@ "core_order_status_compat_threestatus", "core_order_status_compat_to_decimal" ], - "41": [ - "crud_material_stock_log_dec", - "crud_material_stock_log_fmt_dt", - "crud_material_stock_log_list_stock_logs", - "crud_material_stock_log_py", - "crud_material_stock_log_row_to_dict", - "crud_material_stock_log_user_nick_name_map" - ], - "42": [ - "api_ethnic_list_ethnics_for_select", - "api_ethnic_py", - "crud_ethnic_list_ethnics", - "crud_ethnic_py", - "crud_ethnic_rationale_1", - "crud_ethnic_row_to_dict" - ], - "43": [ + "39": [ "basesettings", "core_config_config", "core_config_py", "core_config_settings" ], - "44": [ + "40": [ "core_database_auto_fill_create_dept_id", "core_database_get_db", "core_database_py", "core_database_rationale_31" ], - "45": [ + "41": [ "api_menu_get_menu_list", "api_menu_py", "api_menu_rationale_1" ], - "46": [ + "42": [ "core_context_py", "core_context_rationale_1" ], - "47": [ + "43": [ "api_init_py", "api_init_rationale_1" ], - "48": [ + "44": [ "init_py" ], - "49": [ + "45": [ "core_init_py" ], - "50": [ + "46": [ "core_wechat_message_rationale_143" ], - "51": [ + "47": [ "core_wechat_message_rationale_179" ], - "52": [ + "48": [ "core_wechat_message_rationale_215" ], - "53": [ + "49": [ "core_wechat_message_rationale_251" ], - "54": [ + "50": [ "core_wechat_message_rationale_289" ], - "55": [ + "51": [ "core_wechat_message_rationale_325" ], - "56": [ + "52": [ "models_init_py" ], - "57": [ + "53": [ "schemas_init_py" ], - "58": [ + "54": [ "crud_init_py" ], - "59": [ + "55": [ "ws_init_py" ] }, @@ -2560,48 +2559,48 @@ "1": 0.02, "2": 0.05, "3": 0.02, - "4": 0.04, - "5": 0.05, + "4": 0.03, + "5": 0.03, "6": 0.05, "7": 0.04, - "8": 0.05, + "8": 0.07, "9": 0.07, - "10": 0.32, - "11": 0.14, - "12": 0.16, - "13": 0.12, - "14": 0.11, - "15": 0.16, - "16": 0.17, - "17": 0.21, - "18": 0.18, - "19": 0.2, - "20": 0.25, - "21": 0.25, - "22": 0.26, - "23": 0.24, - "24": 0.23, - "25": 0.27, - "26": 0.29, + "10": 0.05, + "11": 0.09, + "12": 0.32, + "13": 0.05, + "14": 0.16, + "15": 0.12, + "16": 0.11, + "17": 0.18, + "18": 0.24, + "19": 0.23, + "20": 0.27, + "21": 0.29, + "22": 0.31, + "23": 0.31, + "24": 0.31, + "25": 0.38, + "26": 0.27, "27": 0.31, - "28": 0.38, - "29": 0.27, + "28": 0.31, + "29": 0.31, "30": 0.31, - "31": 0.31, - "32": 0.31, - "33": 0.31, - "34": 0.31, - "35": 0.36, + "31": 0.36, + "32": 0.36, + "33": 0.36, + "34": 0.36, + "35": 0.39, "36": 0.36, - "37": 0.36, - "38": 0.36, - "39": 0.29, - "40": 0.38, - "41": 0.6, - "42": 0.4, - "43": 0.5, - "44": 0.5, - "45": 0.67, + "37": 0.29, + "38": 0.38, + "39": 0.5, + "40": 0.5, + "41": 0.67, + "42": 1.0, + "43": 1.0, + "44": 1.0, + "45": 1.0, "46": 1.0, "47": 1.0, "48": 1.0, @@ -2611,22 +2610,18 @@ "52": 1.0, "53": 1.0, "54": 1.0, - "55": 1.0, - "56": 1.0, - "57": 1.0, - "58": 1.0, - "59": 1.0 + "55": 1.0 }, "gods": [ { "id": "core_response_success_response", "label": "success_response()", - "degree": 384 + "degree": 385 }, { "id": "core_response_error_response", "label": "error_response()", - "degree": 307 + "degree": 308 }, { "id": "models_models_sysuser", @@ -2666,7 +2661,7 @@ { "id": "core_utils_generate_uuid", "label": "generate_uuid()", - "degree": 134 + "degree": 135 } ], "surprises": [ diff --git a/backend/graphify-out/.graphify_extract.json b/backend/graphify-out/.graphify_extract.json index f7f91b858..e65ba8674 100644 --- a/backend/graphify-out/.graphify_extract.json +++ b/backend/graphify-out/.graphify_extract.json @@ -4541,7 +4541,7 @@ "label": "TaskStepReorderBody", "file_type": "code", "source_file": "schemas/production_task.py", - "source_location": "L104" + "source_location": "L120" }, { "id": "schemas_product_detail_media_py", @@ -7446,231 +7446,259 @@ "label": "_fmt_dt()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L39" + "source_location": "L43" }, { "id": "crud_production_task_generate_task_no", "label": "_generate_task_no()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L43" + "source_location": "L47" }, { "id": "crud_production_task_task_to_dict", "label": "_task_to_dict()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L57" + "source_location": "L61" }, { "id": "crud_production_task_step_to_dict", "label": "_step_to_dict()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L79" + "source_location": "L83" }, { "id": "crud_production_task_step_reagent_to_dict", "label": "_step_reagent_to_dict()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L99" + "source_location": "L103" }, { "id": "crud_production_task_step_consumable_to_dict", "label": "_step_consumable_to_dict()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L114" + "source_location": "L118" }, { "id": "crud_production_task_step_output_to_dict", "label": "_step_output_to_dict()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L129" + "source_location": "L133" }, { "id": "crud_production_task_step_data_collection_to_dict", "label": "_step_data_collection_to_dict()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L140" + "source_location": "L144" }, { "id": "crud_production_task_task_input_to_dict", "label": "_task_input_to_dict()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L151" + "source_location": "L155" }, { "id": "crud_production_task_task_output_to_dict", "label": "_task_output_to_dict()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L163" + "source_location": "L177" }, { "id": "crud_production_task_soft_delete_sub", "label": "_soft_delete_sub()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L178" + "source_location": "L202" }, { "id": "crud_production_task_clone_step_reagents", "label": "_clone_step_reagents()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L191" + "source_location": "L215" }, { "id": "crud_production_task_clone_step_consumables", "label": "_clone_step_consumables()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L209" + "source_location": "L233" }, { "id": "crud_production_task_clone_step_outputs", "label": "_clone_step_outputs()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L227" + "source_location": "L251" }, { "id": "crud_production_task_clone_step_data_collections", "label": "_clone_step_data_collections()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L244" + "source_location": "L268" }, { "id": "crud_production_task_clone_route_to_task", "label": "_clone_route_to_task()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L260" + "source_location": "L284" }, { "id": "crud_production_task_create_production_task", "label": "create_production_task()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L293" + "source_location": "L317" }, { "id": "crud_production_task_list_production_tasks", "label": "list_production_tasks()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L330" + "source_location": "L354" }, { "id": "crud_production_task_get_production_task_detail", "label": "get_production_task_detail()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L450" + "source_location": "L474" }, { "id": "crud_production_task_update_production_task", "label": "update_production_task()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L509" + "source_location": "L564" }, { "id": "crud_production_task_update_task_status", "label": "update_task_status()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L534" + "source_location": "L589" }, { "id": "crud_production_task_add_task_step", "label": "add_task_step()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L561" + "source_location": "L616" }, { "id": "crud_production_task_update_task_step", "label": "update_task_step()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L706" + "source_location": "L761" }, { "id": "crud_production_task_delete_task_step", "label": "delete_task_step()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L744" + "source_location": "L799" }, { "id": "crud_production_task_replace_step_reagents", "label": "replace_step_reagents()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L766" + "source_location": "L821" }, { "id": "crud_production_task_replace_step_consumables", "label": "replace_step_consumables()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L789" + "source_location": "L844" }, { "id": "crud_production_task_replace_step_outputs", "label": "replace_step_outputs()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L812" + "source_location": "L867" }, { "id": "crud_production_task_replace_step_data_collections", "label": "replace_step_data_collections()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L831" + "source_location": "L886" }, { "id": "crud_production_task_set_task_inputs", "label": "set_task_inputs()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L850" + "source_location": "L905" + }, + { + "id": "crud_production_task_parse_optional_date", + "label": "_parse_optional_date()", + "file_type": "code", + "source_file": "crud/production_task.py", + "source_location": "L962" + }, + { + "id": "crud_production_task_create_occupancy_for_product", + "label": "_create_occupancy_for_product()", + "file_type": "code", + "source_file": "crud/production_task.py", + "source_location": "L973" + }, + { + "id": "crud_production_task_update_product_from_output", + "label": "_update_product_from_output()", + "file_type": "code", + "source_file": "crud/production_task.py", + "source_location": "L1003" }, { "id": "crud_production_task_set_task_outputs", "label": "set_task_outputs()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L870" + "source_location": "L1045" }, { "id": "crud_production_task_reorder_task_steps", "label": "reorder_task_steps()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L894" + "source_location": "L1172" }, { "id": "crud_production_task_copy_task_step", "label": "copy_task_step()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L908" + "source_location": "L1186" + }, + { + "id": "crud_production_task_delete_production_task", + "label": "delete_production_task()", + "file_type": "code", + "source_file": "crud/production_task.py", + "source_location": "L1290" }, { "id": "crud_production_task_total_pages", "label": "total_pages()", "file_type": "code", "source_file": "crud/production_task.py", - "source_location": "L1012" + "source_location": "L1333" }, { "id": "crud_production_task_rationale_1", @@ -7680,11 +7708,25 @@ "source_location": "L1" }, { - "id": "crud_production_task_rationale_910", + "id": "crud_production_task_rationale_1004", + "label": "\u4ece output item \u66f4\u65b0\u7ec6\u80de\u4ea7\u54c1\u5b57\u6bb5", + "file_type": "rationale", + "source_file": "crud/production_task.py", + "source_location": "L1004" + }, + { + "id": "crud_production_task_rationale_1188", "label": "\u590d\u5236\u751f\u4ea7\u4efb\u52a1\u6b65\u9aa4\uff0c\u63d2\u5165\u5230\u539f\u6b65\u9aa4\u4e4b\u540e\uff0c\u540d\u79f0\u8ffd\u52a0\uff08\u590d\u5236\uff09", "file_type": "rationale", "source_file": "crud/production_task.py", - "source_location": "L910" + "source_location": "L1188" + }, + { + "id": "crud_production_task_rationale_1291", + "label": "\u8f6f\u5220\u9664\u751f\u4ea7\u4efb\u52a1\u53ca\u5176\u6240\u6709\u5b50\u8868\u6570\u636e\uff08\u6b65\u9aa4 + \u6295\u5165 + \u4ea7\u51fa\uff09", + "file_type": "rationale", + "source_file": "crud/production_task.py", + "source_location": "L1291" }, { "id": "crud_qc_third_party_item_py", @@ -16947,131 +16989,138 @@ "source_file": "api/production.py", "source_location": "L1354" }, + { + "id": "api_production_delete_production_task", + "label": "delete_production_task()", + "file_type": "code", + "source_file": "api/production.py", + "source_location": "L1372" + }, { "id": "api_production_update_production_task_status", "label": "update_production_task_status()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1372" + "source_location": "L1386" }, { "id": "api_production_add_production_task_step", "label": "add_production_task_step()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1389" + "source_location": "L1403" }, { "id": "api_production_update_production_task_step", "label": "update_production_task_step()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1407" + "source_location": "L1421" }, { "id": "api_production_delete_production_task_step", "label": "delete_production_task_step()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1426" + "source_location": "L1440" }, { "id": "api_production_reorder_production_task_steps", "label": "reorder_production_task_steps()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1441" + "source_location": "L1455" }, { "id": "api_production_copy_production_task_step", "label": "copy_production_task_step()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1454" + "source_location": "L1468" }, { "id": "api_production_replace_task_step_reagents", "label": "replace_task_step_reagents()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1474" + "source_location": "L1488" }, { "id": "api_production_replace_task_step_consumables", "label": "replace_task_step_consumables()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1503" + "source_location": "L1517" }, { "id": "api_production_replace_task_step_data_collections", "label": "replace_task_step_data_collections()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1532" + "source_location": "L1546" }, { "id": "api_production_replace_task_step_outputs", "label": "replace_task_step_outputs()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1549" + "source_location": "L1563" }, { "id": "api_production_set_production_task_inputs", "label": "set_production_task_inputs()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1566" + "source_location": "L1580" }, { "id": "api_production_set_production_task_outputs", "label": "set_production_task_outputs()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1582" + "source_location": "L1596" }, { "id": "api_production_get_next_cell_product_code", "label": "get_next_cell_product_code()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1603" + "source_location": "L1617" }, { "id": "api_production_list_cell_products", "label": "list_cell_products()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1617" + "source_location": "L1631" }, { "id": "api_production_get_cell_product_detail", "label": "get_cell_product_detail()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1645" + "source_location": "L1659" }, { "id": "api_production_create_cell_product", "label": "create_cell_product()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1658" + "source_location": "L1672" }, { "id": "api_production_update_cell_product", "label": "update_cell_product()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1707" + "source_location": "L1721" }, { "id": "api_production_delete_cell_product", "label": "delete_cell_product()", "file_type": "code", "source_file": "api/production.py", - "source_location": "L1726" + "source_location": "L1740" }, { "id": "api_production_rationale_1", @@ -27912,7 +27961,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "schemas/production_task.py", - "source_location": "L104", + "source_location": "L120", "weight": 1.0 }, { @@ -27921,7 +27970,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "schemas/production_task.py", - "source_location": "L104", + "source_location": "L120", "weight": 1.0 }, { @@ -35648,8 +35697,8 @@ }, { "source": "crud_production_task_py", - "target": "crud_production_task_fmt_dt", - "relation": "contains", + "target": "app_crud", + "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", "source_location": "L39", @@ -35657,20 +35706,38 @@ }, { "source": "crud_production_task_py", - "target": "crud_production_task_generate_task_no", + "target": "app_crud_cell_product", + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "crud/production_task.py", + "source_location": "L40", + "weight": 1.0 + }, + { + "source": "crud_production_task_py", + "target": "crud_production_task_fmt_dt", "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", "source_location": "L43", "weight": 1.0 }, + { + "source": "crud_production_task_py", + "target": "crud_production_task_generate_task_no", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "crud/production_task.py", + "source_location": "L47", + "weight": 1.0 + }, { "source": "crud_production_task_py", "target": "crud_production_task_task_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L57", + "source_location": "L61", "weight": 1.0 }, { @@ -35679,7 +35746,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L79", + "source_location": "L83", "weight": 1.0 }, { @@ -35688,7 +35755,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L99", + "source_location": "L103", "weight": 1.0 }, { @@ -35697,7 +35764,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L114", + "source_location": "L118", "weight": 1.0 }, { @@ -35706,7 +35773,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L129", + "source_location": "L133", "weight": 1.0 }, { @@ -35715,7 +35782,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L140", + "source_location": "L144", "weight": 1.0 }, { @@ -35724,7 +35791,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L151", + "source_location": "L155", "weight": 1.0 }, { @@ -35733,7 +35800,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L163", + "source_location": "L177", "weight": 1.0 }, { @@ -35742,7 +35809,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L178", + "source_location": "L202", "weight": 1.0 }, { @@ -35751,7 +35818,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L191", + "source_location": "L215", "weight": 1.0 }, { @@ -35760,7 +35827,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L209", + "source_location": "L233", "weight": 1.0 }, { @@ -35769,7 +35836,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L227", + "source_location": "L251", "weight": 1.0 }, { @@ -35778,7 +35845,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L244", + "source_location": "L268", "weight": 1.0 }, { @@ -35787,7 +35854,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L260", + "source_location": "L284", "weight": 1.0 }, { @@ -35796,7 +35863,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L293", + "source_location": "L317", "weight": 1.0 }, { @@ -35805,7 +35872,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L330", + "source_location": "L354", "weight": 1.0 }, { @@ -35814,7 +35881,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L450", + "source_location": "L474", "weight": 1.0 }, { @@ -35823,7 +35890,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L509", + "source_location": "L564", "weight": 1.0 }, { @@ -35832,7 +35899,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L534", + "source_location": "L589", "weight": 1.0 }, { @@ -35841,7 +35908,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L561", + "source_location": "L616", "weight": 1.0 }, { @@ -35850,7 +35917,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L706", + "source_location": "L761", "weight": 1.0 }, { @@ -35859,7 +35926,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L744", + "source_location": "L799", "weight": 1.0 }, { @@ -35868,7 +35935,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L766", + "source_location": "L821", "weight": 1.0 }, { @@ -35877,7 +35944,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L789", + "source_location": "L844", "weight": 1.0 }, { @@ -35886,7 +35953,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L812", + "source_location": "L867", "weight": 1.0 }, { @@ -35895,7 +35962,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L831", + "source_location": "L886", "weight": 1.0 }, { @@ -35904,7 +35971,34 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L850", + "source_location": "L905", + "weight": 1.0 + }, + { + "source": "crud_production_task_py", + "target": "crud_production_task_parse_optional_date", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "crud/production_task.py", + "source_location": "L962", + "weight": 1.0 + }, + { + "source": "crud_production_task_py", + "target": "crud_production_task_create_occupancy_for_product", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "crud/production_task.py", + "source_location": "L973", + "weight": 1.0 + }, + { + "source": "crud_production_task_py", + "target": "crud_production_task_update_product_from_output", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "crud/production_task.py", + "source_location": "L1003", "weight": 1.0 }, { @@ -35913,7 +36007,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L870", + "source_location": "L1045", "weight": 1.0 }, { @@ -35922,7 +36016,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L894", + "source_location": "L1172", "weight": 1.0 }, { @@ -35931,7 +36025,16 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L908", + "source_location": "L1186", + "weight": 1.0 + }, + { + "source": "crud_production_task_py", + "target": "crud_production_task_delete_production_task", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "crud/production_task.py", + "source_location": "L1290", "weight": 1.0 }, { @@ -35940,7 +36043,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L1012", + "source_location": "L1333", "weight": 1.0 }, { @@ -35949,7 +36052,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L68", + "source_location": "L72", "weight": 1.0 }, { @@ -35958,7 +36061,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L93", + "source_location": "L97", "weight": 1.0 }, { @@ -35967,7 +36070,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L287", + "source_location": "L311", "weight": 1.0 }, { @@ -35976,7 +36079,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L288", + "source_location": "L312", "weight": 1.0 }, { @@ -35985,7 +36088,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L289", + "source_location": "L313", "weight": 1.0 }, { @@ -35994,7 +36097,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L290", + "source_location": "L314", "weight": 1.0 }, { @@ -36003,7 +36106,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L297", + "source_location": "L321", "weight": 1.0 }, { @@ -36012,7 +36115,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L324", + "source_location": "L348", "weight": 1.0 }, { @@ -36021,7 +36124,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L364", + "source_location": "L388", "weight": 1.0 }, { @@ -36030,7 +36133,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L444", + "source_location": "L468", "weight": 1.0 }, { @@ -36039,7 +36142,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L462", + "source_location": "L486", "weight": 1.0 }, { @@ -36048,7 +36151,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L475", + "source_location": "L499", "weight": 1.0 }, { @@ -36057,7 +36160,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L489", + "source_location": "L513", "weight": 1.0 }, { @@ -36066,7 +36169,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L490", + "source_location": "L514", "weight": 1.0 }, { @@ -36075,7 +36178,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L491", + "source_location": "L515", "weight": 1.0 }, { @@ -36084,7 +36187,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L492", + "source_location": "L516", "weight": 1.0 }, { @@ -36093,7 +36196,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L504", + "source_location": "L530", "weight": 1.0 }, { @@ -36102,7 +36205,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L505", + "source_location": "L546", "weight": 1.0 }, { @@ -36111,7 +36214,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L685", + "source_location": "L740", "weight": 1.0 }, { @@ -36120,7 +36223,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L699", + "source_location": "L754", "weight": 1.0 }, { @@ -36129,7 +36232,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L700", + "source_location": "L755", "weight": 1.0 }, { @@ -36138,7 +36241,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L701", + "source_location": "L756", "weight": 1.0 }, { @@ -36147,7 +36250,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L702", + "source_location": "L757", "weight": 1.0 }, { @@ -36156,7 +36259,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L759", + "source_location": "L814", "weight": 1.0 }, { @@ -36165,7 +36268,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L771", + "source_location": "L826", "weight": 1.0 }, { @@ -36174,7 +36277,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L794", + "source_location": "L849", "weight": 1.0 }, { @@ -36183,7 +36286,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L817", + "source_location": "L872", "weight": 1.0 }, { @@ -36192,7 +36295,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L836", + "source_location": "L891", "weight": 1.0 }, { @@ -36201,16 +36304,43 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L855", + "source_location": "L931", + "weight": 1.0 + }, + { + "source": "crud_production_task_update_product_from_output", + "target": "crud_production_task_parse_optional_date", + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "crud/production_task.py", + "source_location": "L1034", "weight": 1.0 }, { "source": "crud_production_task_set_task_outputs", - "target": "crud_production_task_soft_delete_sub", + "target": "crud_production_task_update_product_from_output", "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L875", + "source_location": "L1099", + "weight": 1.0 + }, + { + "source": "crud_production_task_set_task_outputs", + "target": "crud_production_task_create_occupancy_for_product", + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "crud/production_task.py", + "source_location": "L1106", + "weight": 1.0 + }, + { + "source": "crud_production_task_set_task_outputs", + "target": "crud_production_task_parse_optional_date", + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "crud/production_task.py", + "source_location": "L1131", "weight": 1.0 }, { @@ -36219,7 +36349,16 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L1009", + "source_location": "L1287", + "weight": 1.0 + }, + { + "source": "crud_production_task_delete_production_task", + "target": "crud_production_task_soft_delete_sub", + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "crud/production_task.py", + "source_location": "L1313", "weight": 1.0 }, { @@ -36232,12 +36371,30 @@ "weight": 1.0 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "crud_production_task_update_product_from_output", + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "crud/production_task.py", + "source_location": "L1004", + "weight": 1.0 + }, + { + "source": "crud_production_task_rationale_1188", "target": "crud_production_task_copy_task_step", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "crud/production_task.py", - "source_location": "L910", + "source_location": "L1188", + "weight": 1.0 + }, + { + "source": "crud_production_task_rationale_1291", + "target": "crud_production_task_delete_production_task", + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "crud/production_task.py", + "source_location": "L1291", "weight": 1.0 }, { @@ -60632,20 +60789,29 @@ }, { "source": "api_production_py", - "target": "api_production_update_production_task_status", + "target": "api_production_delete_production_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", "source_location": "L1372", "weight": 1.0 }, + { + "source": "api_production_py", + "target": "api_production_update_production_task_status", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "api/production.py", + "source_location": "L1386", + "weight": 1.0 + }, { "source": "api_production_py", "target": "api_production_add_production_task_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1389", + "source_location": "L1403", "weight": 1.0 }, { @@ -60654,7 +60820,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1407", + "source_location": "L1421", "weight": 1.0 }, { @@ -60663,7 +60829,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1426", + "source_location": "L1440", "weight": 1.0 }, { @@ -60672,7 +60838,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1441", + "source_location": "L1455", "weight": 1.0 }, { @@ -60681,7 +60847,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1454", + "source_location": "L1468", "weight": 1.0 }, { @@ -60690,7 +60856,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1474", + "source_location": "L1488", "weight": 1.0 }, { @@ -60699,7 +60865,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1503", + "source_location": "L1517", "weight": 1.0 }, { @@ -60708,7 +60874,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1532", + "source_location": "L1546", "weight": 1.0 }, { @@ -60717,7 +60883,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1549", + "source_location": "L1563", "weight": 1.0 }, { @@ -60726,7 +60892,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1566", + "source_location": "L1580", "weight": 1.0 }, { @@ -60735,7 +60901,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1582", + "source_location": "L1596", "weight": 1.0 }, { @@ -60744,7 +60910,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1603", + "source_location": "L1617", "weight": 1.0 }, { @@ -60753,7 +60919,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1617", + "source_location": "L1631", "weight": 1.0 }, { @@ -60762,7 +60928,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1645", + "source_location": "L1659", "weight": 1.0 }, { @@ -60771,7 +60937,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1658", + "source_location": "L1672", "weight": 1.0 }, { @@ -60780,7 +60946,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1707", + "source_location": "L1721", "weight": 1.0 }, { @@ -60789,7 +60955,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1726", + "source_location": "L1740", "weight": 1.0 }, { @@ -61179,13 +61345,22 @@ "source_location": "L1361", "weight": 1.0 }, + { + "source": "api_production_delete_production_task", + "target": "api_production_get_tenant_no", + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "api/production.py", + "source_location": "L1378", + "weight": 1.0 + }, { "source": "api_production_update_production_task_status", "target": "api_production_get_tenant_no", "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1379", + "source_location": "L1393", "weight": 1.0 }, { @@ -61194,7 +61369,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1396", + "source_location": "L1410", "weight": 1.0 }, { @@ -61203,7 +61378,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1415", + "source_location": "L1429", "weight": 1.0 }, { @@ -61212,7 +61387,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1433", + "source_location": "L1447", "weight": 1.0 }, { @@ -61221,7 +61396,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1461", + "source_location": "L1475", "weight": 1.0 }, { @@ -61230,7 +61405,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1482", + "source_location": "L1496", "weight": 1.0 }, { @@ -61239,7 +61414,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1511", + "source_location": "L1525", "weight": 1.0 }, { @@ -61248,7 +61423,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1540", + "source_location": "L1554", "weight": 1.0 }, { @@ -61257,7 +61432,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1557", + "source_location": "L1571", "weight": 1.0 }, { @@ -61266,7 +61441,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1573", + "source_location": "L1587", "weight": 1.0 }, { @@ -61275,7 +61450,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1589", + "source_location": "L1603", "weight": 1.0 }, { @@ -61284,7 +61459,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1608", + "source_location": "L1622", "weight": 1.0 }, { @@ -61293,7 +61468,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1629", + "source_location": "L1643", "weight": 1.0 }, { @@ -61302,7 +61477,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1650", + "source_location": "L1664", "weight": 1.0 }, { @@ -61311,7 +61486,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1664", + "source_location": "L1678", "weight": 1.0 }, { @@ -61320,7 +61495,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1714", + "source_location": "L1728", "weight": 1.0 }, { @@ -61329,7 +61504,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/production.py", - "source_location": "L1732", + "source_location": "L1746", "weight": 1.0 }, { @@ -73500,6 +73675,42 @@ "source_location": "L13", "weight": 0.8 }, + { + "source": "crud_production_task_rationale_1", + "target": "models_models_bizcellproduct", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizcellproduct", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizcellproduct", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", + "target": "models_models_bizcellproduct", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, { "source": "crud_production_task_rationale_1", "target": "models_models_bizcellsampletype", @@ -73510,7 +73721,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizcellsampletype", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizcellsampletype", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizcellsampletype", "relation": "uses", "confidence": "INFERRED", @@ -73528,7 +73757,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizprocess", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizprocess", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizprocess", "relation": "uses", "confidence": "INFERRED", @@ -73546,7 +73793,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizprocessconsumable", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizprocessconsumable", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizprocessconsumable", "relation": "uses", "confidence": "INFERRED", @@ -73564,7 +73829,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizprocessdatacollection", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizprocessdatacollection", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizprocessdatacollection", "relation": "uses", "confidence": "INFERRED", @@ -73582,7 +73865,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizprocessoutput", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizprocessoutput", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizprocessoutput", "relation": "uses", "confidence": "INFERRED", @@ -73600,7 +73901,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizprocessreagent", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizprocessreagent", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizprocessreagent", "relation": "uses", "confidence": "INFERRED", @@ -73618,7 +73937,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizprocessroute", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizprocessroute", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizprocessroute", "relation": "uses", "confidence": "INFERRED", @@ -73636,7 +73973,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizprocessroutestep", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizprocessroutestep", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizprocessroutestep", "relation": "uses", "confidence": "INFERRED", @@ -73654,7 +74009,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizprocessroutestepconsumable", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizprocessroutestepconsumable", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizprocessroutestepconsumable", "relation": "uses", "confidence": "INFERRED", @@ -73672,7 +74045,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizprocessroutestepdatacollection", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizprocessroutestepdatacollection", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizprocessroutestepdatacollection", "relation": "uses", "confidence": "INFERRED", @@ -73690,7 +74081,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizprocessroutestepoutput", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizprocessroutestepoutput", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizprocessroutestepoutput", "relation": "uses", "confidence": "INFERRED", @@ -73708,7 +74117,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizprocessroutestepreagent", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizprocessroutestepreagent", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizprocessroutestepreagent", "relation": "uses", "confidence": "INFERRED", @@ -73726,7 +74153,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizproductiontask", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizproductiontask", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizproductiontask", "relation": "uses", "confidence": "INFERRED", @@ -73744,7 +74189,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizproductiontaskinput", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizproductiontaskinput", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizproductiontaskinput", "relation": "uses", "confidence": "INFERRED", @@ -73762,7 +74225,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizproductiontaskoutput", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizproductiontaskoutput", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizproductiontaskoutput", "relation": "uses", "confidence": "INFERRED", @@ -73780,7 +74261,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizproductiontaskstep", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizproductiontaskstep", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizproductiontaskstep", "relation": "uses", "confidence": "INFERRED", @@ -73798,7 +74297,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizproductiontaskstepconsumable", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizproductiontaskstepconsumable", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizproductiontaskstepconsumable", "relation": "uses", "confidence": "INFERRED", @@ -73816,7 +74333,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizproductiontaskstepdatacollection", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizproductiontaskstepdatacollection", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizproductiontaskstepdatacollection", "relation": "uses", "confidence": "INFERRED", @@ -73834,7 +74369,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizproductiontaskstepoutput", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizproductiontaskstepoutput", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizproductiontaskstepoutput", "relation": "uses", "confidence": "INFERRED", @@ -73852,7 +74405,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizproductiontaskstepreagent", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizproductiontaskstepreagent", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizproductiontaskstepreagent", "relation": "uses", "confidence": "INFERRED", @@ -73870,7 +74441,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizproductionworkorder", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizproductionworkorder", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizproductionworkorder", "relation": "uses", "confidence": "INFERRED", @@ -73888,7 +74477,25 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizprotocolsample", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizprotocolsample", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", "target": "models_models_bizprotocolsample", "relation": "uses", "confidence": "INFERRED", @@ -73906,7 +74513,7 @@ "weight": 0.8 }, { - "source": "crud_production_task_rationale_910", + "source": "crud_production_task_rationale_1004", "target": "models_models_bizsamplereception", "relation": "uses", "confidence": "INFERRED", @@ -73914,6 +74521,60 @@ "source_location": "L12", "weight": 0.8 }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizsamplereception", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", + "target": "models_models_bizsamplereception", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1", + "target": "models_models_bizstorageslotoccupancy", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1004", + "target": "models_models_bizstorageslotoccupancy", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1188", + "target": "models_models_bizstorageslotoccupancy", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, + { + "source": "crud_production_task_rationale_1291", + "target": "models_models_bizstorageslotoccupancy", + "relation": "uses", + "confidence": "INFERRED", + "source_file": "crud/production_task.py", + "source_location": "L12", + "weight": 0.8 + }, { "source": "crud_collection_protocol_rationale_1", "target": "models_research_donation_bizresearchdonation", @@ -91961,7 +92622,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L47", + "source_location": "L51", "weight": 1.0 }, { @@ -91971,7 +92632,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L198", + "source_location": "L222", "weight": 1.0 }, { @@ -91981,7 +92642,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L199", + "source_location": "L223", "weight": 1.0 }, { @@ -91991,7 +92652,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L216", + "source_location": "L240", "weight": 1.0 }, { @@ -92001,7 +92662,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L217", + "source_location": "L241", "weight": 1.0 }, { @@ -92011,7 +92672,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L234", + "source_location": "L258", "weight": 1.0 }, { @@ -92021,7 +92682,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L235", + "source_location": "L259", "weight": 1.0 }, { @@ -92031,7 +92692,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L251", + "source_location": "L275", "weight": 1.0 }, { @@ -92041,7 +92702,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L252", + "source_location": "L276", "weight": 1.0 }, { @@ -92051,7 +92712,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L272", + "source_location": "L296", "weight": 1.0 }, { @@ -92061,7 +92722,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L273", + "source_location": "L297", "weight": 1.0 }, { @@ -92071,7 +92732,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L299", + "source_location": "L323", "weight": 1.0 }, { @@ -92081,7 +92742,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L300", + "source_location": "L324", "weight": 1.0 }, { @@ -92091,7 +92752,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L302", + "source_location": "L326", "weight": 1.0 }, { @@ -92101,7 +92762,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L354", + "source_location": "L378", "weight": 1.0 }, { @@ -92111,7 +92772,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L375", + "source_location": "L399", "weight": 1.0 }, { @@ -92121,7 +92782,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L523", + "source_location": "L578", "weight": 1.0 }, { @@ -92131,7 +92792,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L576", + "source_location": "L631", "weight": 1.0 }, { @@ -92141,7 +92802,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L592", + "source_location": "L647", "weight": 1.0 }, { @@ -92151,7 +92812,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L593", + "source_location": "L648", "weight": 1.0 }, { @@ -92161,7 +92822,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L615", + "source_location": "L670", "weight": 1.0 }, { @@ -92171,7 +92832,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L628", + "source_location": "L683", "weight": 1.0 }, { @@ -92181,7 +92842,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L641", + "source_location": "L696", "weight": 1.0 }, { @@ -92191,7 +92852,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L653", + "source_location": "L708", "weight": 1.0 }, { @@ -92201,7 +92862,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L724", + "source_location": "L779", "weight": 1.0 }, { @@ -92211,7 +92872,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L773", + "source_location": "L828", "weight": 1.0 }, { @@ -92221,7 +92882,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L774", + "source_location": "L829", "weight": 1.0 }, { @@ -92231,7 +92892,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L775", + "source_location": "L830", "weight": 1.0 }, { @@ -92241,7 +92902,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L796", + "source_location": "L851", "weight": 1.0 }, { @@ -92251,7 +92912,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L797", + "source_location": "L852", "weight": 1.0 }, { @@ -92261,7 +92922,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L798", + "source_location": "L853", "weight": 1.0 }, { @@ -92271,7 +92932,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L819", + "source_location": "L874", "weight": 1.0 }, { @@ -92281,7 +92942,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L820", + "source_location": "L875", "weight": 1.0 }, { @@ -92291,7 +92952,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L821", + "source_location": "L876", "weight": 1.0 }, { @@ -92301,7 +92962,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L838", + "source_location": "L893", "weight": 1.0 }, { @@ -92311,7 +92972,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L839", + "source_location": "L894", "weight": 1.0 }, { @@ -92321,7 +92982,17 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L840", + "source_location": "L895", + "weight": 1.0 + }, + { + "source": "crud_production_task_set_task_inputs", + "target": "crud_base_crudbase_get", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "crud/production_task.py", + "source_location": "L935", "weight": 1.0 }, { @@ -92331,7 +93002,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L857", + "source_location": "L947", "weight": 1.0 }, { @@ -92341,17 +93012,67 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L858", + "source_location": "L948", "weight": 1.0 }, { - "source": "crud_production_task_set_task_inputs", + "source": "crud_production_task_parse_optional_date", + "target": "str", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "crud/production_task.py", + "source_location": "L968", + "weight": 1.0 + }, + { + "source": "crud_production_task_create_occupancy_for_product", + "target": "models_models_bizstorageslotoccupancy", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "crud/production_task.py", + "source_location": "L978", + "weight": 1.0 + }, + { + "source": "crud_production_task_create_occupancy_for_product", + "target": "core_utils_generate_uuid", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "crud/production_task.py", + "source_location": "L979", + "weight": 1.0 + }, + { + "source": "crud_production_task_create_occupancy_for_product", + "target": "crud_storage_occupancy_refresh_slot_cache", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "crud/production_task.py", + "source_location": "L1000", + "weight": 1.0 + }, + { + "source": "crud_production_task_update_product_from_output", "target": "crud_base_crudbase_get", "relation": "calls", "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L859", + "source_location": "L1016", + "weight": 1.0 + }, + { + "source": "crud_production_task_update_product_from_output", + "target": "str", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "crud/production_task.py", + "source_location": "L1018", "weight": 1.0 }, { @@ -92361,7 +93082,27 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L877", + "source_location": "L1066", + "weight": 1.0 + }, + { + "source": "crud_production_task_set_task_outputs", + "target": "models_models_bizcellproduct", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "crud/production_task.py", + "source_location": "L1120", + "weight": 1.0 + }, + { + "source": "crud_production_task_set_task_outputs", + "target": "core_utils_generate_uuid", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "crud/production_task.py", + "source_location": "L1121", "weight": 1.0 }, { @@ -92371,17 +93112,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L878", - "weight": 1.0 - }, - { - "source": "crud_production_task_set_task_outputs", - "target": "core_utils_generate_uuid", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "crud/production_task.py", - "source_location": "L879", + "source_location": "L1153", "weight": 1.0 }, { @@ -92391,7 +93122,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L937", + "source_location": "L1215", "weight": 1.0 }, { @@ -92401,7 +93132,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L938", + "source_location": "L1216", "weight": 1.0 }, { @@ -92411,7 +93142,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L956", + "source_location": "L1234", "weight": 1.0 }, { @@ -92421,7 +93152,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L971", + "source_location": "L1249", "weight": 1.0 }, { @@ -92431,7 +93162,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L986", + "source_location": "L1264", "weight": 1.0 }, { @@ -92441,7 +93172,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "crud/production_task.py", - "source_location": "L999", + "source_location": "L1277", "weight": 1.0 }, { @@ -113334,6 +114065,46 @@ "source_location": "L1368", "weight": 1.0 }, + { + "source": "api_production_delete_production_task", + "target": "crud_base_crudbase_get", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1379", + "weight": 1.0 + }, + { + "source": "api_production_delete_production_task", + "target": "core_response_success_response", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1380", + "weight": 1.0 + }, + { + "source": "api_production_delete_production_task", + "target": "core_response_error_response", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1382", + "weight": 1.0 + }, + { + "source": "api_production_delete_production_task", + "target": "str", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1382", + "weight": 1.0 + }, { "source": "api_production_update_production_task_status", "target": "crud_production_task_update_task_status", @@ -113341,7 +114112,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1380", + "source_location": "L1394", "weight": 1.0 }, { @@ -113351,7 +114122,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1381", + "source_location": "L1395", "weight": 1.0 }, { @@ -113361,7 +114132,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1383", + "source_location": "L1397", "weight": 1.0 }, { @@ -113371,7 +114142,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1383", + "source_location": "L1397", "weight": 1.0 }, { @@ -113381,7 +114152,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1385", + "source_location": "L1399", "weight": 1.0 }, { @@ -113391,29 +114162,29 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1385", - "weight": 1.0 - }, - { - "source": "api_production_add_production_task_step", - "target": "crud_production_task_add_task_step", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "api/production.py", - "source_location": "L1398", - "weight": 1.0 - }, - { - "source": "api_production_add_production_task_step", - "target": "crud_base_crudbase_get", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "api/production.py", "source_location": "L1399", "weight": 1.0 }, + { + "source": "api_production_add_production_task_step", + "target": "crud_production_task_add_task_step", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1412", + "weight": 1.0 + }, + { + "source": "api_production_add_production_task_step", + "target": "crud_base_crudbase_get", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1413", + "weight": 1.0 + }, { "source": "api_production_add_production_task_step", "target": "core_response_success_response", @@ -113421,7 +114192,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1401", + "source_location": "L1415", "weight": 1.0 }, { @@ -113431,7 +114202,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1403", + "source_location": "L1417", "weight": 1.0 }, { @@ -113441,19 +114212,19 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1403", - "weight": 1.0 - }, - { - "source": "api_production_update_production_task_step", - "target": "crud_production_task_update_task_step", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "api/production.py", "source_location": "L1417", "weight": 1.0 }, + { + "source": "api_production_update_production_task_step", + "target": "crud_production_task_update_task_step", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1431", + "weight": 1.0 + }, { "source": "api_production_update_production_task_step", "target": "crud_base_crudbase_get", @@ -113461,7 +114232,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1418", + "source_location": "L1432", "weight": 1.0 }, { @@ -113471,7 +114242,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1420", + "source_location": "L1434", "weight": 1.0 }, { @@ -113481,7 +114252,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1420", + "source_location": "L1434", "weight": 1.0 }, { @@ -113491,7 +114262,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1422", + "source_location": "L1436", "weight": 1.0 }, { @@ -113501,7 +114272,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1422", + "source_location": "L1436", "weight": 1.0 }, { @@ -113511,7 +114282,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1434", + "source_location": "L1448", "weight": 1.0 }, { @@ -113521,7 +114292,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1434", + "source_location": "L1448", "weight": 1.0 }, { @@ -113531,7 +114302,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1435", + "source_location": "L1449", "weight": 1.0 }, { @@ -113541,7 +114312,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1437", + "source_location": "L1451", "weight": 1.0 }, { @@ -113551,7 +114322,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1437", + "source_location": "L1451", "weight": 1.0 }, { @@ -113561,7 +114332,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1447", + "source_location": "L1461", "weight": 1.0 }, { @@ -113571,7 +114342,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1448", + "source_location": "L1462", "weight": 1.0 }, { @@ -113581,7 +114352,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1450", + "source_location": "L1464", "weight": 1.0 }, { @@ -113591,7 +114362,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1450", + "source_location": "L1464", "weight": 1.0 }, { @@ -113601,7 +114372,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1462", + "source_location": "L1476", "weight": 1.0 }, { @@ -113611,7 +114382,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1466", + "source_location": "L1480", "weight": 1.0 }, { @@ -113621,7 +114392,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1468", + "source_location": "L1482", "weight": 1.0 }, { @@ -113631,7 +114402,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1470", + "source_location": "L1484", "weight": 1.0 }, { @@ -113641,7 +114412,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1470", + "source_location": "L1484", "weight": 1.0 }, { @@ -113651,7 +114422,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1487", + "source_location": "L1501", "weight": 1.0 }, { @@ -113661,7 +114432,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1496", + "source_location": "L1510", "weight": 1.0 }, { @@ -113671,7 +114442,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1497", + "source_location": "L1511", "weight": 1.0 }, { @@ -113681,7 +114452,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1499", + "source_location": "L1513", "weight": 1.0 }, { @@ -113691,7 +114462,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1499", + "source_location": "L1513", "weight": 1.0 }, { @@ -113701,7 +114472,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1516", + "source_location": "L1530", "weight": 1.0 }, { @@ -113711,7 +114482,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1525", + "source_location": "L1539", "weight": 1.0 }, { @@ -113721,7 +114492,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1526", + "source_location": "L1540", "weight": 1.0 }, { @@ -113731,7 +114502,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1528", + "source_location": "L1542", "weight": 1.0 }, { @@ -113741,7 +114512,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1528", + "source_location": "L1542", "weight": 1.0 }, { @@ -113751,7 +114522,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1542", + "source_location": "L1556", "weight": 1.0 }, { @@ -113761,7 +114532,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1542", + "source_location": "L1556", "weight": 1.0 }, { @@ -113771,7 +114542,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1543", + "source_location": "L1557", "weight": 1.0 }, { @@ -113781,7 +114552,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1545", + "source_location": "L1559", "weight": 1.0 }, { @@ -113791,7 +114562,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1545", + "source_location": "L1559", "weight": 1.0 }, { @@ -113801,7 +114572,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1559", + "source_location": "L1573", "weight": 1.0 }, { @@ -113811,7 +114582,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1559", + "source_location": "L1573", "weight": 1.0 }, { @@ -113821,7 +114592,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1560", + "source_location": "L1574", "weight": 1.0 }, { @@ -113831,7 +114602,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1562", + "source_location": "L1576", "weight": 1.0 }, { @@ -113841,39 +114612,39 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1562", - "weight": 1.0 - }, - { - "source": "api_production_set_production_task_inputs", - "target": "crud_production_task_set_task_inputs", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "api/production.py", - "source_location": "L1575", - "weight": 1.0 - }, - { - "source": "api_production_set_production_task_inputs", - "target": "crud_base_crudbase_get", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "api/production.py", - "source_location": "L1575", - "weight": 1.0 - }, - { - "source": "api_production_set_production_task_inputs", - "target": "core_response_success_response", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "api/production.py", "source_location": "L1576", "weight": 1.0 }, + { + "source": "api_production_set_production_task_inputs", + "target": "crud_production_task_set_task_inputs", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1589", + "weight": 1.0 + }, + { + "source": "api_production_set_production_task_inputs", + "target": "crud_base_crudbase_get", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1589", + "weight": 1.0 + }, + { + "source": "api_production_set_production_task_inputs", + "target": "core_response_success_response", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1590", + "weight": 1.0 + }, { "source": "api_production_set_production_task_inputs", "target": "core_response_error_response", @@ -113881,7 +114652,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1578", + "source_location": "L1592", "weight": 1.0 }, { @@ -113891,7 +114662,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1578", + "source_location": "L1592", "weight": 1.0 }, { @@ -113901,7 +114672,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1591", + "source_location": "L1605", "weight": 1.0 }, { @@ -113911,7 +114682,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1591", + "source_location": "L1605", "weight": 1.0 }, { @@ -113921,7 +114692,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1592", + "source_location": "L1606", "weight": 1.0 }, { @@ -113931,7 +114702,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1594", + "source_location": "L1608", "weight": 1.0 }, { @@ -113941,7 +114712,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1594", + "source_location": "L1608", "weight": 1.0 }, { @@ -113951,7 +114722,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1610", + "source_location": "L1624", "weight": 1.0 }, { @@ -113961,7 +114732,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1611", + "source_location": "L1625", "weight": 1.0 }, { @@ -113971,7 +114742,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1612", + "source_location": "L1626", "weight": 1.0 }, { @@ -113981,7 +114752,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1638", + "source_location": "L1652", "weight": 1.0 }, { @@ -113991,7 +114762,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1640", + "source_location": "L1654", "weight": 1.0 }, { @@ -114001,7 +114772,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1641", + "source_location": "L1655", "weight": 1.0 }, { @@ -114011,7 +114782,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1651", + "source_location": "L1665", "weight": 1.0 }, { @@ -114021,7 +114792,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1653", + "source_location": "L1667", "weight": 1.0 }, { @@ -114031,7 +114802,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1654", + "source_location": "L1668", "weight": 1.0 }, { @@ -114041,7 +114812,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1654", + "source_location": "L1668", "weight": 1.0 }, { @@ -114051,7 +114822,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1669", + "source_location": "L1683", "weight": 1.0 }, { @@ -114061,7 +114832,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1672", + "source_location": "L1686", "weight": 1.0 }, { @@ -114071,29 +114842,29 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1678", - "weight": 1.0 - }, - { - "source": "api_production_create_cell_product", - "target": "core_response_success_response", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "api/production.py", - "source_location": "L1691", - "weight": 1.0 - }, - { - "source": "api_production_create_cell_product", - "target": "crud_cell_product_product_to_response", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "api/production.py", "source_location": "L1692", "weight": 1.0 }, + { + "source": "api_production_create_cell_product", + "target": "core_response_success_response", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1705", + "weight": 1.0 + }, + { + "source": "api_production_create_cell_product", + "target": "crud_cell_product_product_to_response", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1706", + "weight": 1.0 + }, { "source": "api_production_create_cell_product", "target": "core_response_error_response", @@ -114101,7 +114872,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1703", + "source_location": "L1717", "weight": 1.0 }, { @@ -114111,7 +114882,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1703", + "source_location": "L1717", "weight": 1.0 }, { @@ -114121,7 +114892,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1716", + "source_location": "L1730", "weight": 1.0 }, { @@ -114131,7 +114902,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1718", + "source_location": "L1732", "weight": 1.0 }, { @@ -114141,51 +114912,11 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/production.py", - "source_location": "L1719", - "weight": 1.0 - }, - { - "source": "api_production_update_cell_product", - "target": "core_response_error_response", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "api/production.py", - "source_location": "L1722", - "weight": 1.0 - }, - { - "source": "api_production_update_cell_product", - "target": "str", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "api/production.py", - "source_location": "L1722", - "weight": 1.0 - }, - { - "source": "api_production_delete_cell_product", - "target": "crud_base_crudbase_get", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "api/production.py", "source_location": "L1733", "weight": 1.0 }, { - "source": "api_production_delete_cell_product", - "target": "core_response_success_response", - "relation": "calls", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "api/production.py", - "source_location": "L1734", - "weight": 1.0 - }, - { - "source": "api_production_delete_cell_product", + "source": "api_production_update_cell_product", "target": "core_response_error_response", "relation": "calls", "confidence": "INFERRED", @@ -114195,7 +114926,7 @@ "weight": 1.0 }, { - "source": "api_production_delete_cell_product", + "source": "api_production_update_cell_product", "target": "str", "relation": "calls", "confidence": "INFERRED", @@ -114204,6 +114935,46 @@ "source_location": "L1736", "weight": 1.0 }, + { + "source": "api_production_delete_cell_product", + "target": "crud_base_crudbase_get", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1747", + "weight": 1.0 + }, + { + "source": "api_production_delete_cell_product", + "target": "core_response_success_response", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1748", + "weight": 1.0 + }, + { + "source": "api_production_delete_cell_product", + "target": "core_response_error_response", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1750", + "weight": 1.0 + }, + { + "source": "api_production_delete_cell_product", + "target": "str", + "relation": "calls", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "api/production.py", + "source_location": "L1750", + "weight": 1.0 + }, { "source": "api_leave_leave_local_callback", "target": "crud_leave_update_leave_status", diff --git a/backend/graphify-out/GRAPH_REPORT.md b/backend/graphify-out/GRAPH_REPORT.md index 09722b3e0..3a2731f88 100644 --- a/backend/graphify-out/GRAPH_REPORT.md +++ b/backend/graphify-out/GRAPH_REPORT.md @@ -1,12 +1,12 @@ # Graph Report - app (2026-05-22) ## Corpus Check -- 137 files · ~121,901 words +- 137 files · ~123,015 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 2434 nodes · 9565 edges · 54 communities detected -- Extraction: 42% EXTRACTED · 58% INFERRED · 0% AMBIGUOUS · INFERRED: 5568 edges (avg confidence: 0.63) +- 2441 nodes · 9642 edges · 50 communities detected +- Extraction: 42% EXTRACTED · 58% INFERRED · 0% AMBIGUOUS · INFERRED: 5633 edges (avg confidence: 0.63) - Token cost: 0 input · 0 output ## Community Hubs (Navigation) @@ -54,20 +54,16 @@ - [[_COMMUNITY_Community 41|Community 41]] - [[_COMMUNITY_Community 42|Community 42]] - [[_COMMUNITY_Community 43|Community 43]] -- [[_COMMUNITY_Community 44|Community 44]] -- [[_COMMUNITY_Community 45|Community 45]] - [[_COMMUNITY_Community 46|Community 46]] - [[_COMMUNITY_Community 47|Community 47]] +- [[_COMMUNITY_Community 48|Community 48]] +- [[_COMMUNITY_Community 49|Community 49]] - [[_COMMUNITY_Community 50|Community 50]] - [[_COMMUNITY_Community 51|Community 51]] -- [[_COMMUNITY_Community 52|Community 52]] -- [[_COMMUNITY_Community 53|Community 53]] -- [[_COMMUNITY_Community 54|Community 54]] -- [[_COMMUNITY_Community 55|Community 55]] ## God Nodes (most connected - your core abstractions) -1. `success_response()` - 384 edges -2. `error_response()` - 307 edges +1. `success_response()` - 385 edges +2. `error_response()` - 308 edges 3. `SysUser` - 218 edges 4. `BizQcMaterialUsage` - 199 edges 5. `BizMaterialStockLog` - 195 edges @@ -75,7 +71,7 @@ 7. `BizQcMaterial` - 195 edges 8. `BizMaterial` - 192 edges 9. `BizQcItemParam` - 190 edges -10. `generate_uuid()` - 134 edges +10. `generate_uuid()` - 135 edges ## Surprising Connections (you probably didn't know these) - `统一记录 API 请求/响应出入参的中间件` --uses--> `SysApiRequestLog` [INFERRED] @@ -93,260 +89,244 @@ ### Community 0 - "Community 0" Cohesion: 0.01 -Nodes (401): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+393 more) +Nodes (396): attachment_download_url(), AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, dict_data_options(), DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody (+388 more) ### Community 1 - "Community 1" Cohesion: 0.02 -Nodes (407): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+399 more) +Nodes (373): create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post(), create_role_management() (+365 more) ### Community 2 - "Community 2" Cohesion: 0.05 -Nodes (266): AuditCreateBody, BatchDetailIdsBody, BatchRefundFinanceSubmitBody, FinanceConfirmBody, FullmoonTodoInsuranceBody, ProtocolCreateBody, ProtocolUpdateBody, 细胞存储 — 采集协议单 / 审核 / 财务确认 / 分期预警 API (+258 more) +Nodes (277): AuditCreateBody, BatchDetailIdsBody, BatchRefundFinanceSubmitBody, FinanceConfirmBody, FullmoonTodoInsuranceBody, ProtocolCreateBody, ProtocolUpdateBody, 细胞存储 — 采集协议单 / 审核 / 财务确认 / 分期预警 API (+269 more) ### Community 3 - "Community 3" Cohesion: 0.02 -Nodes (213): list_collection_regions(), get_designer_data(), apply_data_scope(), _get_child_dept_ids(), get_user_dept_id(), _resolve_user_role_scopes(), generate_uuid(), delete() (+205 more) +Nodes (158): CellSampleTypeCreateBody, CellSampleTypeUpdateBody, CollectionRegionCreateBody, CollectionRegionUpdateBody, CustomerCreateBody, CustomerUpdateBody, HospitalCreateBody, HospitalUpdateBody (+150 more) ### Community 4 - "Community 4" -Cohesion: 0.04 -Nodes (112): _format_attachment_file_size(), get_protocol_nos_used_in_protocols(), urls_to_attachment_list(), create_dict_type(), dict_type_code_exists(), get_dict_type(), list_dict_types(), _row_to_dict() (+104 more) +Cohesion: 0.03 +Nodes (127): generate_uuid(), create_consumable_pack(), get_consumable_pack(), get_pack_detail(), _item_row_to_dict(), list_all_packs(), list_consumable_packs(), pack_code_exists() (+119 more) ### Community 5 - "Community 5" -Cohesion: 0.05 -Nodes (85): _persist_protocol_sub_resources(), _add_months_yyyymmdd(), align_fq_payment_details_payload(), _apply_submit_receipt_finance(), _apply_submit_refund_finance(), attachments_to_urls(), _audit_to_dict(), batch_submit_receipt_finance() (+77 more) +Cohesion: 0.03 +Nodes (80): get_user_by_id(), _avatar_url_field(), _build_user_info_payload(), get_web_auth_menu_codes(), _jwt_user_payload(), logout(), 公共接口(Web 登录、刷新 Token、登出;用户模型对齐 docs/sql/zkxw.sql 基线), 登出:吊销 Redis 会话(若已配置 REDIS_HOST)。 (+72 more) ### Community 6 - "Community 6" Cohesion: 0.05 -Nodes (43): ProcessDefCreateBody, ProcessDefUpdateBody, PublishVersionBody, 审批意见:前端传 commentText,兼容 comment。, StartInstanceBody, TaskActionBody, BaseStorage, convert_heic_to_jpeg() (+35 more) +Nodes (91): get_role_menus(), _format_attachment_file_size(), get_protocol_nos_used_in_protocols(), urls_to_attachment_list(), _accept_conclusion_label(), _attach_reception_detail(), complete_production_work_order(), create_production_work_order_from_reception() (+83 more) ### Community 7 - "Community 7" Cohesion: 0.04 -Nodes (51): BaseHTTPMiddleware, parse_admin_request_json(), 运营 Web(/web/admin)JSON 请求体解析。 与 ApiCryptoMiddleware 配合:中间件未改写 body 时,在路由内解密 `, 读取 JSON body;dict 时走 resolve_request_payload(明文 / 密文 / data 包装)。 Returns:, ApiCryptoError, _b64url_decode(), _b64url_encode(), decrypt_json() (+43 more) +Nodes (80): activate_channel_agreement(), cell_product_price_code_exists(), cell_product_spec_code_exists(), cell_product_type_code_exists(), _channel_agreement_price_exists(), _channel_agreement_price_item_key(), checkup_package_code_exists(), create_cell_product_price() (+72 more) ### Community 8 - "Community 8" -Cohesion: 0.05 -Nodes (59): list_roles_for_select(), _avatar_url_field(), _build_user_info_payload(), get_web_auth_menu_codes(), _jwt_user_payload(), logout(), 公共接口(Web 登录、刷新 Token、登出;用户模型对齐 docs/sql/zkxw.sql 基线), 登出:吊销 Redis 会话(若已配置 REDIS_HOST)。 (+51 more) +Cohesion: 0.07 +Nodes (70): _persist_protocol_sub_resources(), _add_months_yyyymmdd(), align_fq_payment_details_payload(), _apply_submit_receipt_finance(), _apply_submit_refund_finance(), attachments_to_urls(), _audit_to_dict(), batch_submit_receipt_finance() (+62 more) ### Community 9 - "Community 9" Cohesion: 0.07 Nodes (66): AccessLogCreateBody, AccessLogUpdateBody, CleanRoomCreateBody, CleanRoomUpdateBody, ExhibitionAppointmentCreateBody, ExhibitionAppointmentUpdateBody, OccupancyCreateBody, 运营支撑 API(洁净室、进出记录、仓储设施、储位、展厅预约) (+58 more) ### Community 10 - "Community 10" +Cohesion: 0.05 +Nodes (26): BusinessException, InvalidStatusTransitionException, log_delivery_operation(), log_operation(), log_order_operation(), log_settlement_operation(), log_user_operation(), OrderLockedException (+18 more) + +### Community 11 - "Community 11" +Cohesion: 0.09 +Nodes (57): batch_delete_research_donations(), change_donation_status(), convert_from_storage(), convert_to_storage(), create_research_donation(), delete_research_donation(), _get_current_user_id(), get_research_donation_detail() (+49 more) + +### Community 12 - "Community 12" Cohesion: 0.32 Nodes (52): ConsumableCreateBody, ConsumablePackCreateBody, ConsumablePackUpdateBody, ConsumableUpdateBody, OutputTypeCreateBody, OutputTypeUpdateBody, PackItemInput, ProcessCategoryCreateBody (+44 more) -### Community 11 - "Community 11" -Cohesion: 0.14 -Nodes (36): _audit_to_dict(), batch_delete_donations(), _collection_to_dict(), convert_to_storage(), _create_collection(), create_donation(), _create_party(), _create_samples() (+28 more) +### Community 13 - "Community 13" +Cohesion: 0.05 +Nodes (40): BaseHTTPMiddleware, parse_admin_request_json(), 运营 Web(/web/admin)JSON 请求体解析。 与 ApiCryptoMiddleware 配合:中间件未改写 body 时,在路由内解密 `, 读取 JSON body;dict 时走 resolve_request_payload(明文 / 密文 / data 包装)。 Returns:, ApiCryptoError, _b64url_decode(), _b64url_encode(), decrypt_json() (+32 more) -### Community 12 - "Community 12" +### Community 14 - "Community 14" Cohesion: 0.16 Nodes (32): _create_insurance_company(), _create_insurance_company_invoice(), _create_insurance_project_price(), delete_insurance_company(), delete_insurance_company_invoice(), delete_insurance_project_price(), _fmt_dt(), _generate_uuid() (+24 more) -### Community 13 - "Community 13" +### Community 15 - "Community 15" Cohesion: 0.12 Nodes (11): get_wechat_pay_client(), get_wechat_pay_v2(), 微信支付工具模块 支持微信支付 V3 API 文档参考: https://pay.weixin.qq.com/docs/v3/apis/index.ht, 统一下单接口 (V3) Args: out_trade_no: 商户订单号 total, 申请退款 Args: out_trade_no: 商户订单号 total_amount, 小程序调起支付的二次签名参数(与公众号 JSAPI 规则一致), 统一下单 (V2 API) Args: out_trade_no: 商户订单号 tot, 生成签名 V3 (SHA256 with RSA) (+3 more) -### Community 14 - "Community 14" +### Community 16 - "Community 16" Cohesion: 0.11 Nodes (28): get_next_cell_product_code(), _build_facility_path_label(), build_split_product_codes(), create_cell_product(), create_cell_products_batch(), create_cell_products_by_quantity(), delete_cell_product(), _enrich_product_dicts() (+20 more) -### Community 15 - "Community 15" -Cohesion: 0.16 -Nodes (26): add_step(), copy_step(), create_route(), _create_step_consumable(), _create_step_data_collection(), _create_step_output(), _create_step_reagent(), get_route() (+18 more) - -### Community 16 - "Community 16" -Cohesion: 0.17 -Nodes (12): BusinessException, InvalidStatusTransitionException, log_delivery_operation(), log_operation(), log_order_operation(), log_settlement_operation(), log_user_operation(), OrderLockedException (+4 more) - ### Community 17 - "Community 17" -Cohesion: 0.21 -Nodes (19): _consumable_row_to_dict(), create_process(), _create_sub_consumable(), _create_sub_data_collection(), _create_sub_output(), _create_sub_reagent(), _data_collection_row_to_dict(), get_process() (+11 more) - -### Community 18 - "Community 18" Cohesion: 0.18 Nodes (18): company_code_exists(), create_company(), get_company(), list_companies(), list_company_options(), _row_to_dict(), soft_delete_company(), update_company() (+10 more) -### Community 19 - "Community 19" -Cohesion: 0.2 -Nodes (14): deduct_for_task(), _display_remark(), list_usages(), list_usages_by_task(), _parse_receiver_purpose_from_remark(), 查询质检任务关联的物料使用记录(task_complete)。, 撤销任务此前 task_complete 扣减,便于重新填报物料使用。, 兼容旧数据:领用人/用途曾拼接在 remark 中。 (+6 more) - -### Community 20 - "Community 20" -Cohesion: 0.25 -Nodes (13): code_exists(), create_material(), _dec(), _fmt_dt(), get_material(), list_materials(), _norm_status(), options_list() (+5 more) - -### Community 21 - "Community 21" -Cohesion: 0.25 -Nodes (13): batch_issue_protocol_nos(), batch_revoke_protocol_nos(), create_protocol_no(), get_protocol_no(), list_protocol_nos(), _parse_issued_time(), protocol_no_exists(), 采集协议号池 CRUD(biz_collection_protocol_no) (+5 more) - -### Community 22 - "Community 22" -Cohesion: 0.26 -Nodes (12): batch_issue_sample_codes(), batch_revoke_sample_codes(), create_sample_code(), get_sample_code(), list_sample_codes(), _parse_issued_time(), 样本编码池 CRUD(biz_sample_code), _resolve_issued_user_display_name() (+4 more) - -### Community 23 - "Community 23" +### Community 18 - "Community 18" Cohesion: 0.24 Nodes (9): 微信消息通知服务 支持微信小程序模板消息推送 使用方式: from app.core.wechat_message import Wech, 发送模板消息 Args: openid: 用户openid templ, send_delivery_notice(), send_delivery_warning(), send_order_status(), send_payment_success(), send_refund_result(), send_urge_notification() (+1 more) -### Community 24 - "Community 24" +### Community 19 - "Community 19" Cohesion: 0.23 Nodes (12): Config, ProductBase, ProductCategoryBase, ProductCategoryCreate, ProductCategoryResponse, ProductCreate, ProductResponse, ProductUnitBase (+4 more) -### Community 25 - "Community 25" +### Community 20 - "Community 20" Cohesion: 0.27 Nodes (11): _build_tree(), _cascade_soft_delete(), _collect_with_ancestors(), create_dept(), get_dept(), list_depts(), list_depts_tree(), 保留匹配节点及其全部上级,供关键词检索后仍能正确组树。 (+3 more) -### Community 26 - "Community 26" +### Community 21 - "Community 21" Cohesion: 0.29 Nodes (9): _build_tree(), _cascade_soft_delete(), create_menu(), get_menu(), list_menus(), list_menus_tree(), _row_to_dict(), soft_delete_menu() (+1 more) -### Community 27 - "Community 27" +### Community 22 - "Community 22" Cohesion: 0.31 Nodes (8): consumable_code_exists(), create_consumable(), get_consumable(), list_consumables(), 耗材 CRUD(biz_consumable), _row_to_dict(), soft_delete_consumable(), update_consumable() -### Community 28 - "Community 28" +### Community 23 - "Community 23" +Cohesion: 0.31 +Nodes (8): create_sop_document(), get_sop_document(), list_sop_documents(), SOP文档 CRUD(biz_sop_document), _row_to_dict(), soft_delete_sop_document(), sop_code_exists(), update_sop_document() + +### Community 24 - "Community 24" +Cohesion: 0.31 +Nodes (8): create_express_company(), express_code_exists(), get_express_company(), list_express_companies(), 快递公司 CRUD(biz_express_company), _row_to_dict(), soft_delete_express_company(), update_express_company() + +### Community 25 - "Community 25" Cohesion: 0.38 Nodes (9): create_check_item(), get_check_item(), item_code_exists(), list_active_check_items(), list_check_items(), _order_query(), _row_to_dict(), soft_delete_check_item() (+1 more) -### Community 29 - "Community 29" +### Community 26 - "Community 26" Cohesion: 0.27 Nodes (8): create_dict_data(), get_dict_data(), list_dict_data(), list_dict_data_options(), 字典数据 CRUD(sys_dict_data), _row_to_dict(), soft_delete_dict_data(), update_dict_data() -### Community 30 - "Community 30" +### Community 27 - "Community 27" Cohesion: 0.31 Nodes (8): category_code_exists(), create_process_category(), get_process_category(), list_process_categories(), 工艺工序分类 CRUD(biz_process_category), _row_to_dict(), soft_delete_process_category(), update_process_category() -### Community 31 - "Community 31" +### Community 28 - "Community 28" Cohesion: 0.31 Nodes (8): create_item_unit(), get_item_unit(), list_item_units(), 物品单位 CRUD(biz_item_unit), _row_to_dict(), soft_delete_item_unit(), unit_code_exists(), update_item_unit() -### Community 32 - "Community 32" -Cohesion: 0.31 -Nodes (8): create_customer(), get_customer(), id_card_taken(), list_customers(), 客户 CRUD(biz_customer), _row_to_dict(), soft_delete_customer(), update_customer() - -### Community 33 - "Community 33" +### Community 29 - "Community 29" Cohesion: 0.31 Nodes (8): create_cell_sample_type(), get_cell_sample_type(), list_cell_sample_types(), 细胞样本类型 CRUD(biz_cell_sample_type), _row_to_dict(), soft_delete_cell_sample_type(), type_code_exists(), update_cell_sample_type() -### Community 34 - "Community 34" +### Community 30 - "Community 30" Cohesion: 0.31 Nodes (8): create_output_type(), get_output_type(), list_output_types(), 工艺产出物类型 CRUD(biz_output_type), _row_to_dict(), soft_delete_output_type(), type_code_exists(), update_output_type() -### Community 35 - "Community 35" +### Community 31 - "Community 31" Cohesion: 0.36 Nodes (7): create_post(), get_post(), list_posts(), post_code_exists(), _row_to_dict(), soft_delete_post(), update_post() -### Community 36 - "Community 36" +### Community 32 - "Community 32" +Cohesion: 0.36 +Nodes (7): create_dict_type(), dict_type_code_exists(), get_dict_type(), list_dict_types(), _row_to_dict(), soft_delete_dict_type(), update_dict_type() + +### Community 33 - "Community 33" Cohesion: 0.36 Nodes (7): create_tenant(), get_tenant(), list_tenants(), _row_to_dict(), soft_delete_tenant(), tenant_no_exists(), update_tenant() -### Community 37 - "Community 37" +### Community 34 - "Community 34" Cohesion: 0.36 Nodes (7): create_reagent(), get_reagent(), list_reagents(), reagent_code_exists(), _row_to_dict(), soft_delete_reagent(), update_reagent() -### Community 38 - "Community 38" +### Community 35 - "Community 35" +Cohesion: 0.39 +Nodes (8): create_lab_item(), get_lab_item(), item_code_exists(), list_active_lab_items(), list_lab_items(), _row_to_dict(), soft_delete_lab_item(), update_lab_item() + +### Community 36 - "Community 36" Cohesion: 0.36 Nodes (7): create_site(), get_site(), list_sites(), _row_to_dict(), site_code_exists(), soft_delete_site(), update_site() -### Community 39 - "Community 39" +### Community 37 - "Community 37" Cohesion: 0.29 Nodes (2): BaseModel, SoftDeleteModel -### Community 40 - "Community 40" +### Community 38 - "Community 38" Cohesion: 0.38 Nodes (6): derive_legacy_status_from_three(), derive_three_status_from_legacy(), 阶段A兼容:从旧 status 推导三字段。 约束:旧 status 本身混合了支付/配送/订单生命周期,因此只能尽力推断; 若业务侧已有更精确, 阶段A兼容:从三字段反推旧 status(用于旧前端/旧筛选参数兼容)。, ThreeStatus, _to_decimal() -### Community 41 - "Community 41" -Cohesion: 0.6 -Nodes (5): _dec(), _fmt_dt(), list_stock_logs(), _row_to_dict(), _user_nick_name_map() - -### Community 42 - "Community 42" -Cohesion: 0.4 -Nodes (4): list_ethnics_for_select(), list_ethnics(), 民族码表 CRUD(全局 sys_ethnic), _row_to_dict() - -### Community 43 - "Community 43" +### Community 39 - "Community 39" Cohesion: 0.5 Nodes (3): BaseSettings, Config, Settings -### Community 44 - "Community 44" +### Community 40 - "Community 40" Cohesion: 0.5 Nodes (2): _auto_fill_create_dept_id(), ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID -### Community 45 - "Community 45" +### Community 41 - "Community 41" Cohesion: 0.67 Nodes (2): get_menu_list(), 运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,供后端菜单模式联调) -### Community 46 - "Community 46" +### Community 42 - "Community 42" Cohesion: 1.0 Nodes (1): 请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传 -### Community 47 - "Community 47" +### Community 43 - "Community 43" Cohesion: 1.0 Nodes (1): API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位) -### Community 50 - "Community 50" +### Community 46 - "Community 46" Cohesion: 1.0 Nodes (1): 发送订单状态通知 Args: openid: 用户openid ord -### Community 51 - "Community 51" +### Community 47 - "Community 47" Cohesion: 1.0 Nodes (1): 发送支付成功通知 Args: openid: 用户openid ord -### Community 52 - "Community 52" +### Community 48 - "Community 48" Cohesion: 1.0 Nodes (1): 发送配送通知 Args: openid: 配送员openid task -### Community 53 - "Community 53" +### Community 49 - "Community 49" Cohesion: 1.0 Nodes (1): 发送配送时效预警 Args: openid: 配送员openid ta -### Community 54 - "Community 54" +### Community 50 - "Community 50" Cohesion: 1.0 Nodes (1): 发送退款结果通知 Args: openid: 用户openid ord -### Community 55 - "Community 55" +### Community 51 - "Community 51" Cohesion: 1.0 Nodes (1): 发送催单通知给配送员 Args: deliver_openid: 配送员openid ## Knowledge Gaps - **90 isolated node(s):** `刷新会话 TTL(refreshToken 续期;已登录用户每次 API 校验通过后滑动续期)`, `写入 refreshToken(用于 one-time 使用/吊销)`, `根据 token 获取当前用户(包含 Redis 会话校验;会话滑动续期)`, `登录凭据 RSA 解密(与前端 JSEncrypt PKCS#1 v1.5 兼容)。`, `Base64 密文 -> JSON 对象(须含 username、password、ts 毫秒时间戳)。` (+85 more) These have ≤1 connection - possible missing edges or undocumented components. -- **Thin community `Community 39`** (8 nodes): `BaseModel`, `.to_dict()`, `get_active()`, `base.py`, `SoftDeleteModel`, `.restore()`, `.soft_delete()`, `__tablename__()` +- **Thin community `Community 37`** (8 nodes): `BaseModel`, `.to_dict()`, `get_active()`, `base.py`, `SoftDeleteModel`, `.restore()`, `.soft_delete()`, `__tablename__()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 44`** (4 nodes): `_auto_fill_create_dept_id()`, `get_db()`, `database.py`, `ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID` +- **Thin community `Community 40`** (4 nodes): `_auto_fill_create_dept_id()`, `get_db()`, `database.py`, `ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 45`** (3 nodes): `get_menu_list()`, `menu.py`, `运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,供后端菜单模式联调)` +- **Thin community `Community 41`** (3 nodes): `get_menu_list()`, `menu.py`, `运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,供后端菜单模式联调)` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 46`** (2 nodes): `context.py`, `请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传` +- **Thin community `Community 42`** (2 nodes): `context.py`, `请求级别的用户上下文变量 通过 contextvars 在请求处理链路中传递当前用户信息, 供 SQLAlchemy 事件监听器等底层机制使用,避免逐层手动传` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 47`** (2 nodes): `__init__.py`, `API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)` +- **Thin community `Community 43`** (2 nodes): `__init__.py`, `API 路由包(骨架:公共鉴权 + 静态菜单 + 运营端占位)` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 50`** (1 nodes): `发送订单状态通知 Args: openid: 用户openid ord` +- **Thin community `Community 46`** (1 nodes): `发送订单状态通知 Args: openid: 用户openid ord` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 51`** (1 nodes): `发送支付成功通知 Args: openid: 用户openid ord` +- **Thin community `Community 47`** (1 nodes): `发送支付成功通知 Args: openid: 用户openid ord` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 52`** (1 nodes): `发送配送通知 Args: openid: 配送员openid task` +- **Thin community `Community 48`** (1 nodes): `发送配送通知 Args: openid: 配送员openid task` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 53`** (1 nodes): `发送配送时效预警 Args: openid: 配送员openid ta` +- **Thin community `Community 49`** (1 nodes): `发送配送时效预警 Args: openid: 配送员openid ta` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 54`** (1 nodes): `发送退款结果通知 Args: openid: 用户openid ord` +- **Thin community `Community 50`** (1 nodes): `发送退款结果通知 Args: openid: 用户openid ord` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 55`** (1 nodes): `发送催单通知给配送员 Args: deliver_openid: 配送员openid` +- **Thin community `Community 51`** (1 nodes): `发送催单通知给配送员 Args: deliver_openid: 配送员openid` Too small to be a meaningful cluster - may be noise or needs more connections extracted. ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ -- **Why does `generate_uuid()` connect `Community 3` to `Community 0`, `Community 1`, `Community 2`, `Community 4`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 11`, `Community 14`, `Community 15`, `Community 17`, `Community 18`, `Community 19`, `Community 20`, `Community 21`, `Community 22`, `Community 25`, `Community 26`, `Community 27`, `Community 28`, `Community 29`, `Community 30`, `Community 31`, `Community 32`, `Community 33`, `Community 34`, `Community 35`, `Community 36`, `Community 37`, `Community 38`?** - _High betweenness centrality (0.118) - this node is a cross-community bridge._ -- **Why does `SysUser` connect `Community 0` to `Community 2`, `Community 4`, `Community 6`, `Community 8`, `Community 9`, `Community 10`, `Community 12`, `Community 19`, `Community 21`, `Community 22`?** - _High betweenness centrality (0.080) - this node is a cross-community bridge._ -- **Why does `success_response()` connect `Community 1` to `Community 0`, `Community 3`, `Community 8`, `Community 42`, `Community 12`, `Community 45`, `Community 14`?** - _High betweenness centrality (0.066) - this node is a cross-community bridge._ -- **Are the 383 inferred relationships involving `success_response()` (e.g. with `web_login_rsa_public_key()` and `web_login()`) actually correct?** - _`success_response()` has 383 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 353 inferred relationships involving `str` (e.g. with `extract_login_credentials()` and `._make_request()`) actually correct?** - _`str` has 353 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 306 inferred relationships involving `error_response()` (e.g. with `_json_error_response()` and `web_login()`) actually correct?** - _`error_response()` has 306 INFERRED edges - model-reasoned connections that need verification._ +- **Why does `generate_uuid()` connect `Community 4` to `Community 0`, `Community 1`, `Community 2`, `Community 3`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 11`, `Community 13`, `Community 16`, `Community 17`, `Community 20`, `Community 21`, `Community 22`, `Community 23`, `Community 24`, `Community 25`, `Community 26`, `Community 27`, `Community 28`, `Community 29`, `Community 30`, `Community 31`, `Community 32`, `Community 33`, `Community 34`, `Community 35`, `Community 36`?** + _High betweenness centrality (0.111) - this node is a cross-community bridge._ +- **Why does `SysUser` connect `Community 0` to `Community 2`, `Community 3`, `Community 5`, `Community 9`, `Community 11`, `Community 12`, `Community 14`?** + _High betweenness centrality (0.091) - this node is a cross-community bridge._ +- **Why does `success_response()` connect `Community 1` to `Community 0`, `Community 3`, `Community 5`, `Community 6`, `Community 41`, `Community 11`, `Community 14`, `Community 16`?** + _High betweenness centrality (0.055) - this node is a cross-community bridge._ +- **Are the 384 inferred relationships involving `success_response()` (e.g. with `web_login_rsa_public_key()` and `web_login()`) actually correct?** + _`success_response()` has 384 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 356 inferred relationships involving `str` (e.g. with `extract_login_credentials()` and `._make_request()`) actually correct?** + _`str` has 356 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 307 inferred relationships involving `error_response()` (e.g. with `_json_error_response()` and `web_login()`) actually correct?** + _`error_response()` has 307 INFERRED edges - model-reasoned connections that need verification._ - **Are the 216 inferred relationships involving `SysUser` (e.g. with `数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3` and `从 SysUser 读取用户的 dept_id。`) actually correct?** _`SysUser` has 216 INFERRED edges - model-reasoned connections that need verification._ \ No newline at end of file diff --git a/backend/graphify-out/graph.html b/backend/graphify-out/graph.html index 844736a7b..f725f6972 100644 --- a/backend/graphify-out/graph.html +++ b/backend/graphify-out/graph.html @@ -57,12 +57,12 @@
-
2434 nodes · 9565 edges · 60 communities
+
2441 nodes · 9642 edges · 56 communities
+``` + +- [ ] **Step 2: 验证无语法错误** + +Run: `cd web-admin && npx vue-tsc --noEmit 2>&1 | grep -i "TaskOutputProductDialog" || echo "No errors for this file"` +Expected: 无该文件相关错误 + +--- + +## Task 7: 前端 — 新建 TaskOutputList.vue + +**Files:** +- Create: `web-admin/src/views/production/production-work-order/TaskOutputList.vue` + +- [ ] **Step 1: 创建产出列表组件** + +创建 `web-admin/src/views/production/production-work-order/TaskOutputList.vue`: + +```vue + + + + +``` + +--- + +## Task 8: 前端 — 新建 TaskInputEnhancedTable.vue + +**Files:** +- Create: `web-admin/src/views/production/production-work-order/TaskInputEnhancedTable.vue` + +- [ ] **Step 1: 创建增强版原材料表格组件** + +创建 `web-admin/src/views/production/production-work-order/TaskInputEnhancedTable.vue`: + +```vue + + + + +``` + +--- + +## Task 9: 前端 — 重构 useTaskStepEditor.ts + +**Files:** +- Modify: `web-admin/src/views/production/production-work-order/useTaskStepEditor.ts` + +这是最复杂的改造任务。主要变更: + +1. 产出操作改为子弹窗模式 +2. 原材料选择细胞产品时填充完整信息 +3. 保存时提交增强后的数据 + +- [ ] **Step 1: 增加产出子弹窗状态** + +在 `useTaskStepEditor` composable 中(约第 72-74 行 `selectedVirtualStep` 之后),增加产出子弹窗状态: + +```typescript + // ── 产出子弹窗状态 ──────────────────────────────────────── + const outputDialogVisible = ref(false) + const outputDialogMode = ref<'add' | 'edit'>('add') + const editingOutputIndex = ref(-1) + const editingOutputData = ref | null>(null) + + // ── 产出下拉选项 ───────────────────────────────────────── + const outputDropdownOptions = reactive({ + productTypes: [] as Array<{ id: string; productTypeName: string }>, + specs: [] as Array<{ id: string; specName: string }>, + storageSlots: [] as Array<{ id: string; name: string }>, + }) +``` + +- [ ] **Step 2: 增加下拉选项加载函数** + +在 composable 中增加: + +```typescript + async function loadOutputDropdownData() { + try { + const [typeRes, specRes] = await Promise.all([ + (await import('@/api/admin')).fetchCellProductTypeList({ page: 1, pageSize: 100 }), + (await import('@/api/admin')).fetchCellProductSpecList({ page: 1, pageSize: 100 }), + ]) + outputDropdownOptions.productTypes = typeRes?.list || typeRes || [] + outputDropdownOptions.specs = specRes?.list || specRes || [] + // 储物格加载(复用细胞产品库的逻辑) + const facilityRes = await (await import('@/api/admin')).fetchStorageFacilityList() + const facilities = facilityRes?.list || facilityRes || [] + const { buildTreePathLabelFromFlat } = await import('@/utils/tree-path') + const { fetchStorageSlotList } = await import('@/api/admin') + const leafNodes = facilities.filter((n: any) => n.isLeaf === 1) + const slotOptions: Array<{ id: string; name: string }> = [] + for (const node of leafNodes) { + const slotRes: any = await fetchStorageSlotList({ facilityNodeId: node.id }) + const slots = slotRes?.list || slotRes || [] + const nodePath = buildTreePathLabelFromFlat(node.id, facilities, { nameKey: 'nodeName' }) + for (const slot of slots) { + const code = slot.slotCode || '' + const name = nodePath && code ? `${nodePath} / ${code}` : code || nodePath + slotOptions.push({ id: slot.id, name }) + } + } + outputDropdownOptions.storageSlots = slotOptions + } catch { + /* 下拉数据加载失败不阻塞 */ + } + } +``` + +- [ ] **Step 3: 修改产出操作函数** + +替换原有的 `addTaskOutputRow`、`removeTaskOutputRow`、`saveTaskOutputs`: + +```typescript + function addTaskOutputRow() { + outputDialogMode.value = 'add' + editingOutputIndex.value = -1 + editingOutputData.value = null + outputDialogVisible.value = true + } + + function editTaskOutputRow(row: Record, index: number) { + outputDialogMode.value = 'edit' + editingOutputIndex.value = index + editingOutputData.value = { ...row } + outputDialogVisible.value = true + } + + function handleOutputDialogSave(formData: Record) { + if (outputDialogMode.value === 'add') { + taskOutputs.value.push({ + cellProductId: '', + ...formData, + outputName: formData.productName, + outputBarcode: formData.productCode, + productStatus: 'frozen', + sourceType: 'production', + }) + } else if (outputDialogMode.value === 'edit' && editingOutputIndex.value >= 0) { + const existing = taskOutputs.value[editingOutputIndex.value] + taskOutputs.value[editingOutputIndex.value] = { + ...existing, + ...formData, + outputName: formData.productName || existing.outputName, + outputBarcode: formData.productCode || existing.outputBarcode, + } + } + } + + function removeTaskOutputRow(i: number) { + taskOutputs.value.splice(i, 1) + } + + async function saveTaskOutputs() { + if (!taskDetail.value?.id) return + if (!taskOutputs.value.length) { + ElMessage.warning('请至少添加一项产出(细胞产品)') + return + } + const invalid = taskOutputs.value.find( + (row) => !(row.productCode || row.outputBarcode || '').trim() || !(row.productName || row.outputName || '').trim() + ) + if (invalid) { + ElMessage.warning('请补全每行产出的产品编码与名称') + return + } + outputSaving.value = true + try { + await fetchSetTaskOutputs(taskDetail.value.id, taskOutputs.value) + ElMessage.success('产出已保存') + await loadTaskDetail(taskDetail.value.id) + } catch { /* global error handling */ } finally { outputSaving.value = false } + } +``` + +- [ ] **Step 4: 修改原材料选择联动** + +增强 `onCellProductInputSelect` 函数,填充完整产品信息: + +```typescript + function onCellProductInputSelect(row: Record, productId: string) { + if (!productId) { row.inputId = ''; return } + const master = cellProductMasterById.value[productId] + if (!master) return + row.inputId = master.id + row.inputCode = master.product_code || master.productCode || '' + row.inputName = master.product_name || master.productName || '' + // 增强信息填充 + row.productTypeName = master.product_type_name || master.productTypeName || '' + row.passage = master.passage || '' + row.storageSlotName = master.storage_slot_name || master.storageSlotName || '' + row.productStatus = master.product_status || master.productStatus || '' + } +``` + +- [ ] **Step 5: 在 initEditor 中加载下拉选项** + +在 `initEditor` 函数末尾(约第 755 行 `configSuppressSave.value = false` 之前),增加: + +```typescript + if (mode.value === 'execution') { + void loadOutputDropdownData() + } +``` + +- [ ] **Step 6: 在 return 对象中导出新状态和方法** + +在 return 对象中增加: + +```typescript + outputDialogVisible, outputDialogMode, editingOutputIndex, editingOutputData, + outputDropdownOptions, loadOutputDropdownData, + editTaskOutputRow, handleOutputDialogSave, +``` + +- [ ] **Step 7: 验证** + +Run: `cd web-admin && npx vue-tsc --noEmit 2>&1 | grep -i "useTaskStepEditor" || echo "No errors"` +Expected: 无该文件相关错误 + +--- + +## Task 10: 前端 — 改造 TaskExecutionDialog.vue + +**Files:** +- Modify: `web-admin/src/views/production/production-work-order/TaskExecutionDialog.vue` + +- [ ] **Step 1: 添加新组件 import** + +在 ` diff --git a/web-admin/src/views/production/production-work-order/TaskInputEnhancedTable.vue b/web-admin/src/views/production/production-work-order/TaskInputEnhancedTable.vue new file mode 100644 index 000000000..9644d8682 --- /dev/null +++ b/web-admin/src/views/production/production-work-order/TaskInputEnhancedTable.vue @@ -0,0 +1,361 @@ + + + + + diff --git a/web-admin/src/views/production/production-work-order/TaskOutputList.vue b/web-admin/src/views/production/production-work-order/TaskOutputList.vue new file mode 100644 index 000000000..74930108b --- /dev/null +++ b/web-admin/src/views/production/production-work-order/TaskOutputList.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/web-admin/src/views/production/production-work-order/TaskOutputProductDialog.vue b/web-admin/src/views/production/production-work-order/TaskOutputProductDialog.vue new file mode 100644 index 000000000..8ce3cb64b --- /dev/null +++ b/web-admin/src/views/production/production-work-order/TaskOutputProductDialog.vue @@ -0,0 +1,654 @@ + + + + + diff --git a/web-admin/src/views/production/production-work-order/index.vue b/web-admin/src/views/production/production-work-order/index.vue index b71a845bf..55120ed83 100644 --- a/web-admin/src/views/production/production-work-order/index.vue +++ b/web-admin/src/views/production/production-work-order/index.vue @@ -19,7 +19,12 @@ - + @@ -27,8 +32,12 @@
- 重置 - 搜索 + 重置 + 搜索
@@ -43,7 +52,13 @@ stripe @row-dblclick="handleView" > - + @@ -71,10 +86,20 @@ - + + + + - + - + @@ -178,7 +237,15 @@ import { ref, reactive, computed, onMounted, nextTick } from 'vue' import type { TableInstance } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus' - import { Search, RefreshLeft, View, Check, Document, Position, EditPen } from '@element-plus/icons-vue' + import { + Search, + RefreshLeft, + View, + Check, + Document, + Position, + EditPen + } from '@element-plus/icons-vue' import { fetchProductionWorkOrderList, fetchProductionWorkOrderDetail, @@ -195,7 +262,11 @@ import type { ViewSection } from '@/components/business/system-view-dialog/index.vue' import { downloadAttachmentFile } from '@/utils/download-attachment' import DispatchTaskDialog from './DispatchTaskDialog.vue' - import { fetchProductionTaskList } from '@/api/production-task' + import EditTaskInfoDialog from './EditTaskInfoDialog.vue' + import { + fetchProductionTaskList, + fetchDeleteProductionTask + } from '@/api/production-task' defineOptions({ name: 'ProductionProductionWorkOrder' }) @@ -248,8 +319,16 @@ await layoutWorkOrderTable() } } - function handleSearch() { pagination.page = 1; loadData() } - function handleReset() { searchForm.workOrderNo = ''; searchForm.workOrderStatus = ''; pagination.page = 1; loadData() } + function handleSearch() { + pagination.page = 1 + loadData() + } + function handleReset() { + searchForm.workOrderNo = '' + searchForm.workOrderStatus = '' + pagination.page = 1 + loadData() + } const viewVisible = ref(false) const detail = ref(null) @@ -262,12 +341,15 @@ return r.receiveAttachmentFiles as Array> const urls = String(r.receiveAttachments || '') if (!urls.trim()) return [] - return urls.split(',').map((u, i) => { - const url = u.trim() - if (!url) return null - const name = url.includes('/') ? url.split('/').pop() || `附件${i + 1}` : url - return { id: `url_${i}`, fileUrl: url, fileName: name } - }).filter(Boolean) as Array> + return urls + .split(',') + .map((u, i) => { + const url = u.trim() + if (!url) return null + const name = url.includes('/') ? url.split('/').pop() || `附件${i + 1}` : url + return { id: `url_${i}`, fileUrl: url, fileName: name } + }) + .filter(Boolean) as Array> }) function receptionAttachmentFullUrl(url: string) { const u = String(url || '').trim() @@ -310,9 +392,10 @@ ) } if (r.etaTime) transportFields.push({ label: '预计到达', value: r.etaTime }) - const transportSection = transportFields.length > 1 || r.transportType - ? [{ title: '运输信息', fields: transportFields }] - : [] + const transportSection = + transportFields.length > 1 || r.transportType + ? [{ title: '运输信息', fields: transportFields }] + : [] return [ { title: '基本信息', @@ -320,9 +403,20 @@ { label: '工单号', value: d.workOrderNo }, { label: '协议号', value: d.protocolNo }, { label: '样本编码', value: d.sampleCode }, - { label: '来源类型', value: r.sourceTypeLabel || d.receptionSourceLabel || receptionSourceLabel(d.receptionSource || ''), tagType: 'primary' }, + { + label: '来源类型', + value: + r.sourceTypeLabel || + d.receptionSourceLabel || + receptionSourceLabel(d.receptionSource || ''), + tagType: 'primary' + }, { label: '样本类型', value: r.sampleTypeName || d.sampleTypeName || '—' }, - { label: '工单状态', value: woStatusTag(d.workOrderStatus).label, tagType: woStatusTag(d.workOrderStatus).type as any }, + { + label: '工单状态', + value: woStatusTag(d.workOrderStatus).label, + tagType: woStatusTag(d.workOrderStatus).type as any + }, { label: '创建时间', value: d.createTime || '—' }, { label: '备注', value: d.remark || '—', span: true } ] @@ -337,7 +431,17 @@ { label: '接收温度(℃)', value: r.receiveTemperature ? `${r.receiveTemperature}℃` : '—' }, { label: '体积(ml)', value: formatMetric(r.volumeMl) }, { label: '净重(g)', value: formatMetric(r.netWeightG) }, - { label: '结论', value: r.acceptConclusionLabel || acceptConclusionLabel(String(r.acceptConclusion || '')), tagType: r.acceptConclusion === 'js' ? 'success' : r.acceptConclusion === 'jj' ? 'danger' : 'info' }, + { + label: '结论', + value: + r.acceptConclusionLabel || acceptConclusionLabel(String(r.acceptConclusion || '')), + tagType: + r.acceptConclusion === 'js' + ? 'success' + : r.acceptConclusion === 'jj' + ? 'danger' + : 'info' + }, { label: '检查项', value: formatCheckResults(r.checkResults), span: true }, { label: '备注', value: r.remark || '—', span: true } ] @@ -374,8 +478,10 @@ const taskSelectVisible = ref(false) const taskSelectList = ref([]) const taskSelectLoading = ref(false) + const currentWorkOrderRow = ref(null) async function handleEditTask(row: any) { + currentWorkOrderRow.value = row taskSelectLoading.value = true taskSelectVisible.value = true taskSelectList.value = [] @@ -397,6 +503,30 @@ taskSelectVisible.value = false } + // ── 编辑任务基本信息 ────────────────────────────────── + const editTaskInfoVisible = ref(false) + const editTaskInfoId = ref('') + + function openEditTaskInfo(task: any) { + editTaskInfoId.value = task.id + editTaskInfoVisible.value = true + } + + function handleEditTaskInfoSuccess() { + if (currentWorkOrderRow.value) { + handleEditTask(currentWorkOrderRow.value) + } + } + + async function handleDeleteTask(task: any) { + await ElMessageBox.confirm('确定要删除该任务吗?删除后不可恢复。', '提示', { type: 'warning' }) + await fetchDeleteProductionTask(task.id) + ElMessage.success('任务已删除') + if (currentWorkOrderRow.value) { + handleEditTask(currentWorkOrderRow.value) + } + } + onMounted(() => loadData()) @@ -411,8 +541,15 @@ font-size: 13px; align-items: start; - dt { margin: 0; color: #64748b; font-weight: 500; } - dd { margin: 0; color: #1e293b; } + dt { + margin: 0; + color: #64748b; + font-weight: 500; + } + dd { + margin: 0; + color: #1e293b; + } } } diff --git a/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts b/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts index 7984c305c..f13c17247 100644 --- a/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts +++ b/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts @@ -23,6 +23,13 @@ import { } from '@/api/production' import { fetchItemUnitList } from '@/api/admin' import { fetchCellProductList } from '@/api/cell-product' +import { + fetchCellProductTypeList, + fetchCellProductSpecList, + fetchStorageFacilityList, + fetchStorageSlotList +} from '@/api/admin' +import { buildTreePathLabelFromFlat } from '@/utils/tree-path' // ── helpers ────────────────────────────────────────────────────────── function toApiFlag(val: boolean | number | string | undefined): string { @@ -90,9 +97,23 @@ export function useTaskStepEditor() { const consumableOptionsLoading = ref(false) const consumableMasterById = ref>>({}) - const cellProductOptions = ref<{ id: string; label: string }[]>([]) + const cellProductOptions = ref< + Array<{ + id: string + label: string + productCode?: string + productName?: string + productTypeName?: string + passage?: string + storageSlotName?: string + productStatus?: string + }> + >([]) const cellProductOptionsLoading = ref(false) const cellProductMasterById = ref>>({}) + const productTypeOptions = ref>([]) + const specOptions = ref>([]) + const storageSlotOptions = ref>([]) function mapItemUnitOption(u: { unitName?: string; unitCode?: string }) { const name = (u.unitName || '').trim() @@ -108,7 +129,11 @@ export function useTaskStepEditor() { async function searchItemUnitOptions(query: string) { itemUnitOptionsLoading.value = true try { - const res = await fetchItemUnitList({ page: 1, pageSize: 100, keyword: query?.trim() || undefined }) + const res = await fetchItemUnitList({ + page: 1, + pageSize: 100, + keyword: query?.trim() || undefined + }) itemUnitOptions.value = (res.list || []).map(mapItemUnitOption).filter((o) => o.value) } catch { itemUnitOptions.value = [] @@ -141,7 +166,11 @@ export function useTaskStepEditor() { async function searchReagentOptions(query: string) { reagentOptionsLoading.value = true try { - const res = await fetchReagentList({ page: 1, pageSize: 100, keyword: query?.trim() || undefined }) + const res = await fetchReagentList({ + page: 1, + pageSize: 100, + keyword: query?.trim() || undefined + }) const list = res.list || [] cacheReagentMasters(list) reagentOptions.value = list @@ -158,7 +187,10 @@ export function useTaskStepEditor() { function ensureReagentOption(row: Record) { if (row.reagentId && !String(row.reagentId).startsWith('legacy:')) { if (!reagentOptions.value.some((o) => o.id === row.reagentId)) - reagentOptions.value = [{ id: row.reagentId, label: mapReagentOptionLabel(row) }, ...reagentOptions.value] + reagentOptions.value = [ + { id: row.reagentId, label: mapReagentOptionLabel(row) }, + ...reagentOptions.value + ] return } // reagentId 为空(后端不存储该字段)— 通过 reagentCode 反查主表真实 ID @@ -175,7 +207,10 @@ export function useTaskStepEditor() { const legacyId = `legacy:${code || name}` row.reagentId = legacyId if (!reagentOptions.value.some((o) => o.id === legacyId)) - reagentOptions.value = [{ id: legacyId, label: mapReagentOptionLabel(row) }, ...reagentOptions.value] + reagentOptions.value = [ + { id: legacyId, label: mapReagentOptionLabel(row) }, + ...reagentOptions.value + ] } function ensureAllStepReagentOptions() { for (const step of stepList.value) { @@ -183,11 +218,17 @@ export function useTaskStepEditor() { } } function onReagentRowSelect(row: Record, reagentId: string) { - if (!reagentId) { row.reagentId = ''; return } - if (String(reagentId).startsWith('legacy:')) { return } + if (!reagentId) { + row.reagentId = '' + return + } + if (String(reagentId).startsWith('legacy:')) { + return + } // 去重:同一试剂不允许出现多次(排除当前行和 legacy 占位符) const dup = (selectedStep.value?.reagents || []).some( - (r: Record) => r !== row && r.reagentId === reagentId && !String(r.reagentId).startsWith('legacy:') + (r: Record) => + r !== row && r.reagentId === reagentId && !String(r.reagentId).startsWith('legacy:') ) if (dup) { ElMessage.warning('该试剂已添加,请勿重复选择') @@ -195,11 +236,16 @@ export function useTaskStepEditor() { return } const master = reagentMasterById.value[reagentId] - if (!master) { return } + if (!master) { + return + } Object.assign(row, { - reagentId: master.id, reagentCode: master.reagentCode || '', - reagentName: master.reagentName || '', spec: master.spec || '', - standardUsage: master.standardUsage ?? '', unit: master.unit || '', + reagentId: master.id, + reagentCode: master.reagentCode || '', + reagentName: master.reagentName || '', + spec: master.spec || '', + standardUsage: master.standardUsage ?? '', + unit: master.unit || '', remark: master.remark ?? master.description ?? '' }) ensureItemUnitOption(row.unit) @@ -230,7 +276,11 @@ export function useTaskStepEditor() { async function searchConsumableOptions(query: string) { consumableOptionsLoading.value = true try { - const res = await fetchConsumableList({ page: 1, pageSize: 100, keyword: query?.trim() || undefined }) + const res = await fetchConsumableList({ + page: 1, + pageSize: 100, + keyword: query?.trim() || undefined + }) const list = res.list || [] cacheConsumableMasters(list) consumableOptions.value = list @@ -247,7 +297,10 @@ export function useTaskStepEditor() { function ensureConsumableOption(row: Record) { if (row.consumableId && !String(row.consumableId).startsWith('legacy:')) { if (!consumableOptions.value.some((o) => o.id === row.consumableId)) - consumableOptions.value = [{ id: row.consumableId, label: mapConsumableOptionLabel(row) }, ...consumableOptions.value] + consumableOptions.value = [ + { id: row.consumableId, label: mapConsumableOptionLabel(row) }, + ...consumableOptions.value + ] return } // consumableId 为空(后端不存储该字段)— 通过 consumableCode 反查主表真实 ID @@ -264,7 +317,10 @@ export function useTaskStepEditor() { const legacyId = `legacy:${code || name}` row.consumableId = legacyId if (!consumableOptions.value.some((o) => o.id === legacyId)) - consumableOptions.value = [{ id: legacyId, label: mapConsumableOptionLabel(row) }, ...consumableOptions.value] + consumableOptions.value = [ + { id: legacyId, label: mapConsumableOptionLabel(row) }, + ...consumableOptions.value + ] } function ensureAllStepConsumableOptions() { for (const step of stepList.value) { @@ -272,11 +328,19 @@ export function useTaskStepEditor() { } } function onConsumableRowSelect(row: Record, consumableId: string) { - if (!consumableId) { row.consumableId = ''; return } - if (String(consumableId).startsWith('legacy:')) { return } + if (!consumableId) { + row.consumableId = '' + return + } + if (String(consumableId).startsWith('legacy:')) { + return + } // 去重:同一耗材不允许出现多次(排除当前行和 legacy 占位符) const dup = (selectedStep.value?.consumables || []).some( - (c: Record) => c !== row && c.consumableId === consumableId && !String(c.consumableId).startsWith('legacy:') + (c: Record) => + c !== row && + c.consumableId === consumableId && + !String(c.consumableId).startsWith('legacy:') ) if (dup) { ElMessage.warning('该耗材已添加,请勿重复选择') @@ -284,11 +348,16 @@ export function useTaskStepEditor() { return } const master = consumableMasterById.value[consumableId] - if (!master) { return } + if (!master) { + return + } Object.assign(row, { - consumableId: master.id, consumableCode: master.consumableCode || '', - consumableName: master.consumableName || '', specModel: master.specModel || '', - standardUsage: master.standardUsage ?? '', unit: master.unit || '', + consumableId: master.id, + consumableCode: master.consumableCode || '', + consumableName: master.consumableName || '', + specModel: master.specModel || '', + standardUsage: master.standardUsage ?? '', + unit: master.unit || '', remark: master.remark ?? master.description ?? '' }) ensureItemUnitOption(row.unit) @@ -303,17 +372,46 @@ export function useTaskStepEditor() { async function searchCellProductOptions(query: string) { cellProductOptionsLoading.value = true try { - const res = await fetchCellProductList({ page: 1, pageSize: 100, keyword: query?.trim() || undefined }) + const res = await fetchCellProductList({ + page: 1, + pageSize: 100, + keyword: query?.trim() || undefined + }) const list = res.list || [] const next = { ...cellProductMasterById.value } for (const p of list) if (p?.id) next[p.id] = p cellProductMasterById.value = next cellProductOptions.value = list .filter((p) => (p.productName || '').trim() || (p.productCode || '').trim()) - .map((p) => ({ id: p.id, label: mapCellProductOptionLabel(p) })) + .map((p) => ({ + id: p.id, + label: mapCellProductOptionLabel(p), + productCode: p.productCode || '', + productName: p.productName || '', + productTypeName: p.productTypeName || '', + passage: p.passage || '', + storageSlotName: p.storageSlotName || '', + productStatus: p.productStatus || '' + })) for (const row of taskInputs.value) { - if (row.inputType === 'cell_product' && row.inputId && !cellProductOptions.value.some((o) => o.id === row.inputId)) { - cellProductOptions.value = [{ id: row.inputId, label: row.inputName || row.inputCode || '' }, ...cellProductOptions.value] + if ( + row.inputType === 'cell_product' && + row.inputId && + !cellProductOptions.value.some((o) => o.id === row.inputId) + ) { + cellProductOptions.value = [ + { + id: row.inputId, + label: row.inputName || row.inputCode || '', + productCode: row.inputCode || '', + productName: row.inputName || '', + productTypeName: '', + passage: '', + storageSlotName: '', + productStatus: '' + }, + ...cellProductOptions.value + ] } } } catch { @@ -323,7 +421,10 @@ export function useTaskStepEditor() { } } function onCellProductInputSelect(row: Record, productId: string) { - if (!productId) { row.inputId = ''; return } + if (!productId) { + row.inputId = '' + return + } const master = cellProductMasterById.value[productId] if (!master) return row.inputId = master.id @@ -335,7 +436,9 @@ export function useTaskStepEditor() { for (const step of stepList.value) { ;(step.reagents || []).forEach((r: Record) => ensureItemUnitOption(r.unit)) ;(step.consumables || []).forEach((c: Record) => ensureItemUnitOption(c.unit)) - ;(step.dataCollections || []).forEach((d: Record) => ensureItemUnitOption(d.unit)) + ;(step.dataCollections || []).forEach((d: Record) => + ensureItemUnitOption(d.unit) + ) } } @@ -343,16 +446,21 @@ export function useTaskStepEditor() { if (!selectedStepId.value) return null return stepList.value.find((s) => s.id === selectedStepId.value) || null }) - const virtualInputStatus = computed(() => taskInputs.value.length > 0 ? 'filled' : 'empty') - const virtualOutputStatus = computed(() => taskOutputs.value.length > 0 ? 'filled' : 'empty') - const completedStepCount = computed(() => stepList.value.filter((s) => s.stepStatus === 'ywc').length) + const virtualInputStatus = computed(() => (taskInputs.value.length > 0 ? 'filled' : 'empty')) + const virtualOutputStatus = computed(() => (taskOutputs.value.length > 0 ? 'filled' : 'empty')) + const completedStepCount = computed( + () => stepList.value.filter((s) => s.stepStatus === 'ywc').length + ) const sopIdsArr = computed({ get() { if (!selectedStep.value) return [] const raw = selectedStep.value.sopIds if (!raw) return [] if (Array.isArray(raw)) return raw.filter(Boolean) - return String(raw).split(',').map((s: string) => s.trim()).filter(Boolean) + return String(raw) + .split(',') + .map((s: string) => s.trim()) + .filter(Boolean) }, set(val: string[]) { if (!selectedStep.value) return @@ -370,34 +478,97 @@ export function useTaskStepEditor() { (p.processCode || '').toLowerCase().includes(keyword) ) : group.processes - return { categoryId: group.categoryId, categoryName: group.categoryName, processes: filtered } + return { + categoryId: group.categoryId, + categoryName: group.categoryName, + processes: filtered + } }) .filter((group) => group.processes.length > 0) }) + async function loadProductTypeAndSpecOptions() { + try { + const [typeRes, specRes] = await Promise.all([ + fetchCellProductTypeList({ page: 1, pageSize: 100 }), + fetchCellProductSpecList({ page: 1, pageSize: 100 }) + ]) + productTypeOptions.value = typeRes?.list || typeRes || [] + specOptions.value = specRes?.list || specRes || [] + } catch { + /* dropdown data failure is non-blocking */ + } + } + async function loadStorageSlotOptions() { + try { + const facilityRes = await fetchStorageFacilityList() + const facilities = facilityRes?.list || facilityRes || [] + const leafNodes = facilities.filter((n: any) => n.isLeaf === 1) + if (!leafNodes.length) { + storageSlotOptions.value = [] + return + } + const results = await Promise.allSettled( + leafNodes.map(async (node: any) => { + const res: any = await fetchStorageSlotList({ facilityNodeId: node.id }) + const slots = res?.list || res || [] + const nodePath = buildTreePathLabelFromFlat(node.id, facilities, { nameKey: 'nodeName' }) + return slots.map((slot: any) => { + const code = slot.slotCode || '' + const name = nodePath && code ? `${nodePath} / ${code}` : code || nodePath + return { id: slot.id, name } + }) + }) + ) + const options: Array<{ id: string; name: string }> = [] + results.forEach((r) => { + if (r.status === 'fulfilled') options.push(...r.value) + }) + storageSlotOptions.value = options + } catch { + storageSlotOptions.value = [] + } + } async function loadConfigReferenceData() { const [processes, categories, sops, outputTypes] = await Promise.all([ - fetchAllProcesses(), fetchAllProcessCategories(), - fetchAllSopDocuments(), fetchAllOutputTypes() + fetchAllProcesses(), + fetchAllProcessCategories(), + fetchAllSopDocuments(), + fetchAllOutputTypes() ]) categoryOptions.value = categories || [] sopOptions.value = sops || [] outputTypeOptions.value = outputTypes || [] - const catMap: Record[] }> = {} + const catMap: Record< + string, + { categoryId: string; categoryName: string; processes: Record[] } + > = {} const uKey = '__uncategorized__' catMap[uKey] = { categoryId: uKey, categoryName: '未分类', processes: [] } ;(categories || []).forEach((cat: Record) => { - catMap[cat.id] = { categoryId: cat.id, categoryName: cat.categoryName || cat.name || '未命名分类', processes: [] } + catMap[cat.id] = { + categoryId: cat.id, + categoryName: cat.categoryName || cat.name || '未命名分类', + processes: [] + } }) ;(processes || []).forEach((proc: Record) => { const catId = proc.categoryId || uKey - if (!catMap[catId]) catMap[catId] = { categoryId: catId, categoryName: '未知分类', processes: [] } + if (!catMap[catId]) + catMap[catId] = { categoryId: catId, categoryName: '未知分类', processes: [] } catMap[catId].processes.push(proc) }) expandedCategories.value = Object.keys(catMap) processLibrary.value = Object.values(catMap) - await Promise.all([searchItemUnitOptions(''), searchReagentOptions(''), searchConsumableOptions(''), searchCellProductOptions('')]) + await Promise.all([ + searchItemUnitOptions(''), + searchReagentOptions(''), + searchConsumableOptions(''), + searchCellProductOptions(''), + loadProductTypeAndSpecOptions(), + loadStorageSlotOptions() + ]) } async function loadTaskDetail(overrideId?: string) { const id = overrideId || taskId.value @@ -417,8 +588,15 @@ export function useTaskStepEditor() { taskInputs.value = (detail.inputs || []).map((i: Record) => ({ ...i })) taskOutputs.value = (detail.outputs || []).map((o: Record) => ({ ...o })) for (const row of taskInputs.value) { - if (row.inputType === 'cell_product' && row.inputId && !cellProductOptions.value.some((o) => o.id === row.inputId)) { - cellProductOptions.value = [{ id: row.inputId, label: row.inputName || row.inputCode || '' }, ...cellProductOptions.value] + if ( + row.inputType === 'cell_product' && + row.inputId && + !cellProductOptions.value.some((o) => o.id === row.inputId) + ) { + cellProductOptions.value = [ + { id: row.inputId, label: row.inputName || row.inputCode || '' }, + ...cellProductOptions.value + ] } } } @@ -440,7 +618,9 @@ export function useTaskStepEditor() { await loadTaskDetail() if (newStep?.id) selectedStepId.value = newStep.id ElMessage.success('步骤添加成功') - } catch { /* ignore */ } finally { + } catch { + /* ignore */ + } finally { stepListLoading.value = false } } @@ -449,8 +629,13 @@ export function useTaskStepEditor() { if (!taskId.value) return stepListLoading.value = true try { - await fetchReorderTaskSteps({ taskId: taskId.value, stepIds: stepList.value.map((s) => s.id) }) - } catch { /* ignore */ } finally { + await fetchReorderTaskSteps({ + taskId: taskId.value, + stepIds: stepList.value.map((s) => s.id) + }) + } catch { + /* ignore */ + } finally { stepListLoading.value = false } } @@ -469,7 +654,9 @@ export function useTaskStepEditor() { await loadTaskDetail() if (ns?.id) selectedStepId.value = ns.id ElMessage.success('步骤已复制') - } catch (e: any) { ElMessage.error(e?.message || '复制失败') } finally { + } catch (e: any) { + ElMessage.error(e?.message || '复制失败') + } finally { stepListLoading.value = false } } @@ -482,7 +669,9 @@ export function useTaskStepEditor() { if (selectedStepId.value === step.id) selectedStepId.value = stepList.value.length > 0 ? stepList.value[0].id : '' ElMessage.success('步骤已删除') - } catch { /* ignore */ } finally { + } catch { + /* ignore */ + } finally { stepListLoading.value = false } } @@ -498,7 +687,9 @@ export function useTaskStepEditor() { estimated_duration: selectedStep.value.estimatedDuration, sop_ids: selectedStep.value.sopIds }) - } catch { /* ignore */ } + } catch { + /* ignore */ + } } function onSopIdsChange(val: string[]) { if (!selectedStep.value) return @@ -509,84 +700,135 @@ export function useTaskStepEditor() { if (!selectedStep.value) return if (!selectedStep.value.reagents) selectedStep.value.reagents = [] selectedStep.value.reagents.push({ - reagentId: '', reagentCode: '', reagentName: '', spec: '', - standardUsage: '', unit: '', isKeyMaterial: false, remark: '' + reagentId: '', + reagentCode: '', + reagentName: '', + spec: '', + standardUsage: '', + unit: '', + isKeyMaterial: false, + remark: '' }) } - function removeReagentRow(i: number) { selectedStep.value?.reagents?.splice(i, 1) } + function removeReagentRow(i: number) { + selectedStep.value?.reagents?.splice(i, 1) + } async function saveReagents() { if (!selectedStep.value || configSuppressSave.value) return try { const items = (selectedStep.value.reagents || []).map((r: Record) => ({ - material_code: r.reagentCode, material_name: r.reagentName, spec: r.spec, - standard_usage: r.standardUsage, actual_usage: r.actualUsage || '', + material_code: r.reagentCode, + material_name: r.reagentName, + spec: r.spec, + standard_usage: r.standardUsage, + actual_usage: r.actualUsage || '', unit: r.unit, - is_key_material: toApiFlag(r.isKeyMaterial), remark: r.remark || '' + is_key_material: toApiFlag(r.isKeyMaterial), + remark: r.remark || '' })) await fetchReplaceStepReagents(taskId.value, selectedStep.value.id, items) - } catch { /* ignore */ } + } catch { + /* ignore */ + } } function addConsumableRow() { if (!selectedStep.value) return if (!selectedStep.value.consumables) selectedStep.value.consumables = [] selectedStep.value.consumables.push({ - consumableId: '', consumableCode: '', consumableName: '', specModel: '', - standardUsage: '', unit: '', isRequired: false, remark: '' + consumableId: '', + consumableCode: '', + consumableName: '', + specModel: '', + standardUsage: '', + unit: '', + isRequired: false, + remark: '' }) } - function removeConsumableRow(i: number) { selectedStep.value?.consumables?.splice(i, 1) } + function removeConsumableRow(i: number) { + selectedStep.value?.consumables?.splice(i, 1) + } async function saveConsumables() { if (!selectedStep.value || configSuppressSave.value) return try { const items = (selectedStep.value.consumables || []).map((c: Record) => ({ - material_code: c.consumableCode, material_name: c.consumableName, + material_code: c.consumableCode, + material_name: c.consumableName, spec_model: c.specModel, - standard_usage: c.standardUsage, actual_usage: c.actualUsage || '', + standard_usage: c.standardUsage, + actual_usage: c.actualUsage || '', unit: c.unit, - is_required: toApiFlag(c.isRequired), remark: c.remark || '' + is_required: toApiFlag(c.isRequired), + remark: c.remark || '' })) await fetchReplaceStepConsumables(taskId.value, selectedStep.value.id, items) - } catch { /* ignore */ } + } catch { + /* ignore */ + } } function addOutputRow() { if (!selectedStep.value) return if (!selectedStep.value.outputs) selectedStep.value.outputs = [] - selectedStep.value.outputs.push({ outputTypeId: '', outputName: '', outputBarcode: '', remark: '' }) + selectedStep.value.outputs.push({ + outputTypeId: '', + outputName: '', + outputBarcode: '', + remark: '' + }) + } + function removeOutputRow(i: number) { + selectedStep.value?.outputs?.splice(i, 1) } - function removeOutputRow(i: number) { selectedStep.value?.outputs?.splice(i, 1) } async function saveOutputs() { if (!selectedStep.value || configSuppressSave.value) return try { const items = (selectedStep.value.outputs || []).map((o: Record) => ({ - output_type_id: o.outputTypeId, output_name: o.outputName, - output_barcode: o.outputBarcode, remark: o.remark || '' + output_type_id: o.outputTypeId, + output_name: o.outputName, + output_barcode: o.outputBarcode, + remark: o.remark || '' })) await fetchReplaceStepOutputs(taskId.value, selectedStep.value.id, items) - } catch { /* ignore */ } + } catch { + /* ignore */ + } } function addDataCollectionRow() { if (!selectedStep.value) return if (!selectedStep.value.dataCollections) selectedStep.value.dataCollections = [] - selectedStep.value.dataCollections.push({ collectionName: '', unit: '', orderNum: 0, remark: '' }) + selectedStep.value.dataCollections.push({ + collectionName: '', + unit: '', + orderNum: 0, + remark: '' + }) + } + function removeDataCollectionRow(i: number) { + selectedStep.value?.dataCollections?.splice(i, 1) } - function removeDataCollectionRow(i: number) { selectedStep.value?.dataCollections?.splice(i, 1) } async function saveDataCollections() { if (!selectedStep.value || configSuppressSave.value) return try { const items = (selectedStep.value.dataCollections || []).map((d: Record) => ({ - collection_name: d.collectionName, unit: d.unit, - collection_value: d.collectionValue || '', remark: d.remark || '' + collection_name: d.collectionName, + unit: d.unit, + collection_value: d.collectionValue || '', + remark: d.remark || '' })) await fetchReplaceStepDataCollection(taskId.value, selectedStep.value.id, items) - } catch { /* ignore */ } + } catch { + /* ignore */ + } } const manualSaveLoading = ref(false) + const stepActionLoading = ref(false) + const taskActionLoading = ref(false) async function handleManualSave() { - if (!selectedStep.value) return + if (!selectedStep.value || manualSaveLoading.value) return manualSaveLoading.value = true try { await Promise.all([ @@ -605,34 +847,105 @@ export function useTaskStepEditor() { } async function handleStartStep(step: Record) { - if (!taskId.value || !step.id) return - await fetchUpdateTaskStep(taskId.value, step.id, { step_status: 'jxz' }) - ElMessage.success('步骤已开始执行') - await loadTaskDetail() + if (!taskId.value || !step.id || stepActionLoading.value) return + stepActionLoading.value = true + try { + await fetchUpdateTaskStep(taskId.value, step.id, { step_status: 'jxz' }) + ElMessage.success('步骤已开始执行') + await loadTaskDetail() + } catch { + /* global error handling */ + } finally { + stepActionLoading.value = false + } } async function handleCompleteStep(step: Record) { - if (!taskId.value || !step.id) return - await ElMessageBox.confirm('确定完成该步骤吗?', '提示', { type: 'warning' }) - await fetchUpdateTaskStep(taskId.value, step.id, { step_status: 'ywc' }) - ElMessage.success('步骤已完成') - await loadTaskDetail() + if (!taskId.value || !step.id || stepActionLoading.value) return + try { + await ElMessageBox.confirm('确定完成该步骤吗?', '提示', { type: 'warning' }) + } catch { + return + } + stepActionLoading.value = true + try { + await fetchUpdateTaskStep(taskId.value, step.id, { step_status: 'ywc' }) + ElMessage.success('步骤已完成') + await loadTaskDetail() + } catch { + /* global error handling */ + } finally { + stepActionLoading.value = false + } } async function handleStartTask() { - if (!taskDetail.value?.id) return - await ElMessageBox.confirm('确定开始执行该任务吗?', '提示', { type: 'warning' }) - await fetchUpdateProductionTaskStatus(taskDetail.value.id, { taskStatus: 'jxz' }) - ElMessage.success('任务已开始执行') - await loadTaskDetail(taskDetail.value.id) + if (!taskDetail.value?.id || taskActionLoading.value) return + try { + await ElMessageBox.confirm('确定开始执行该任务吗?', '提示', { type: 'warning' }) + } catch { + return + } + taskActionLoading.value = true + try { + await fetchUpdateProductionTaskStatus(taskDetail.value.id, { taskStatus: 'jxz' }) + ElMessage.success('任务已开始执行') + await loadTaskDetail(taskDetail.value.id) + } catch { + /* global error handling */ + } finally { + taskActionLoading.value = false + } + } + + function validateTaskIoRequired(): string | null { + if (!taskInputs.value.length) { + return '请先填写原材料(样本/细胞产品),至少添加一项并保存' + } + if (!taskOutputs.value.length) { + return '请先填写产出(细胞产品),至少添加一项并保存' + } + const invalidInput = taskInputs.value.find( + (row) => + !row.inputType || + (!(row.inputId || '').trim() && + !(row.inputCode || '').trim() && + !(row.inputName || '').trim()) + ) + if (invalidInput) { + return '原材料存在未填完整的行,请补全类型与编码/名称后保存' + } + const invalidOutput = taskOutputs.value.find( + (row) => !(row.outputName || '').trim() || !(row.outputBarcode || '').trim() + ) + if (invalidOutput) { + return '产出存在未填完整的行,请补全输出名称与条码后保存' + } + return null } async function handleCompleteTask() { - if (!taskDetail.value?.id) return - await ElMessageBox.confirm('确定完成该任务吗?完成后不可恢复。', '提示', { type: 'warning' }) - await fetchUpdateProductionTaskStatus(taskDetail.value.id, { taskStatus: 'ywc' }) - ElMessage.success('任务已完成') - await loadTaskDetail(taskDetail.value.id) + if (!taskDetail.value?.id || taskActionLoading.value) return + const ioErr = validateTaskIoRequired() + if (ioErr) { + await ElMessageBox.alert(ioErr, '无法完成任务', { type: 'warning' }) + return + } + try { + await ElMessageBox.confirm('确定完成该任务吗?完成后不可恢复。', '提示', { type: 'warning' }) + } catch { + return + } + taskActionLoading.value = true + try { + await fetchUpdateProductionTaskStatus(taskDetail.value.id, { taskStatus: 'ywc' }) + ElMessage.success('任务已完成') + await loadTaskDetail(taskDetail.value.id) + } catch { + /* global error handling */ + } finally { + taskActionLoading.value = false + } } function addTaskInputRow() { @@ -646,27 +959,68 @@ export function useTaskStepEditor() { remark: '' }) } - function removeTaskInputRow(i: number) { taskInputs.value.splice(i, 1) } + function removeTaskInputRow(i: number) { + taskInputs.value.splice(i, 1) + } async function saveTaskInputs() { if (!taskDetail.value?.id) return + if (!taskInputs.value.length) { + ElMessage.warning('请至少添加一项原材料(样本/细胞产品)') + return + } + const invalid = taskInputs.value.find( + (row) => + !row.inputType || + (!(row.inputId || '').trim() && + !(row.inputCode || '').trim() && + !(row.inputName || '').trim()) + ) + if (invalid) { + ElMessage.warning('请补全每行原材料的类型与编码/名称') + return + } inputSaving.value = true try { await fetchSetTaskInputs(taskDetail.value.id, taskInputs.value) ElMessage.success('输入已保存') - } catch { /* global error handling */ } finally { inputSaving.value = false } + await loadTaskDetail() + } catch { + /* global error handling */ + } finally { + inputSaving.value = false + } } function addTaskOutputRow() { - taskOutputs.value.push({ cellProductId: '', storageSlotId: '', outputName: '', outputBarcode: '', quantity: 0, unit: '', remark: '' }) + taskOutputs.value.push({ + cellProductId: '', + storageSlotId: '', + outputName: '', + outputBarcode: '', + quantity: 0, + unit: '', + remark: '' + }) + } + function removeTaskOutputRow(i: number) { + taskOutputs.value.splice(i, 1) } - function removeTaskOutputRow(i: number) { taskOutputs.value.splice(i, 1) } async function saveTaskOutputs() { if (!taskDetail.value?.id) return + if (!taskOutputs.value.length) { + ElMessage.warning('请至少添加一项产出(细胞产品)') + return + } outputSaving.value = true try { await fetchSetTaskOutputs(taskDetail.value.id, taskOutputs.value) - ElMessage.success('输出已保存') - } catch { /* global error handling */ } finally { outputSaving.value = false } + ElMessage.success('产出已保存') + await loadTaskDetail() + } catch { + /* global error handling */ + } finally { + outputSaving.value = false + } } function taskStatusTag(status: string) { @@ -693,43 +1047,100 @@ export function useTaskStepEditor() { activeSubTab.value = 'reagent' processSearchKeyword.value = '' configSuppressSave.value = true + stepList.value = [] + stepListLoading.value = true try { await loadConfigReferenceData() await loadTaskDetail() } finally { + stepListLoading.value = false await nextTick() configSuppressSave.value = false } } return { - taskId, stepList, selectedStepId, selectedStep, stepListLoading, - activeSubTab, processSearchKeyword, configSuppressSave, - mode, taskDetail, taskInputs, taskOutputs, inputSaving, outputSaving, - selectedVirtualStep, processLibraryExpanded, - virtualInputStatus, virtualOutputStatus, completedStepCount, - processLibrary, filteredProcessLibrary, expandedCategories, - categoryOptions, sopOptions, outputTypeOptions, - itemUnitOptions, itemUnitOptionsLoading, - reagentOptions, reagentOptionsLoading, - consumableOptions, consumableOptionsLoading, - cellProductOptions, cellProductOptionsLoading, + taskId, + stepList, + selectedStepId, + selectedStep, + stepListLoading, + activeSubTab, + processSearchKeyword, + configSuppressSave, + mode, + taskDetail, + taskInputs, + taskOutputs, + inputSaving, + outputSaving, + selectedVirtualStep, + processLibraryExpanded, + virtualInputStatus, + virtualOutputStatus, + completedStepCount, + processLibrary, + filteredProcessLibrary, + expandedCategories, + categoryOptions, + sopOptions, + outputTypeOptions, + itemUnitOptions, + itemUnitOptionsLoading, + reagentOptions, + reagentOptionsLoading, + consumableOptions, + consumableOptionsLoading, + cellProductOptions, + cellProductOptionsLoading, + productTypeOptions, + specOptions, + storageSlotOptions, sopIdsArr, - onDragStart, onDropToCenter, onStepDragEnd, selectStep, selectVirtualStep, - handleCopyStep, handleDeleteStep, - handleStartStep, handleCompleteStep, - handleStartTask, handleCompleteTask, - addTaskInputRow, removeTaskInputRow, saveTaskInputs, - addTaskOutputRow, removeTaskOutputRow, saveTaskOutputs, - taskStatusTag, stepStatusTag, - saveStepBasic, onSopIdsChange, - searchItemUnitOptions, searchReagentOptions, searchConsumableOptions, searchCellProductOptions, - onReagentRowSelect, onConsumableRowSelect, onCellProductInputSelect, - addReagentRow, removeReagentRow, saveReagents, - addConsumableRow, removeConsumableRow, saveConsumables, - addOutputRow, removeOutputRow, saveOutputs, - addDataCollectionRow, removeDataCollectionRow, saveDataCollections, - manualSaveLoading, handleManualSave, + onDragStart, + onDropToCenter, + onStepDragEnd, + selectStep, + selectVirtualStep, + handleCopyStep, + handleDeleteStep, + handleStartStep, + handleCompleteStep, + handleStartTask, + handleCompleteTask, + addTaskInputRow, + removeTaskInputRow, + saveTaskInputs, + addTaskOutputRow, + removeTaskOutputRow, + saveTaskOutputs, + taskStatusTag, + stepStatusTag, + saveStepBasic, + onSopIdsChange, + searchItemUnitOptions, + searchReagentOptions, + searchConsumableOptions, + searchCellProductOptions, + onReagentRowSelect, + onConsumableRowSelect, + onCellProductInputSelect, + addReagentRow, + removeReagentRow, + saveReagents, + addConsumableRow, + removeConsumableRow, + saveConsumables, + addOutputRow, + removeOutputRow, + saveOutputs, + addDataCollectionRow, + removeDataCollectionRow, + saveDataCollections, + manualSaveLoading, + stepActionLoading, + taskActionLoading, + handleManualSave, initEditor } } diff --git a/web-admin/src/views/quality-inspection/qc-work-order/index.vue b/web-admin/src/views/quality-inspection/qc-work-order/index.vue index 4e0394bbe..a383dc32c 100644 --- a/web-admin/src/views/quality-inspection/qc-work-order/index.vue +++ b/web-admin/src/views/quality-inspection/qc-work-order/index.vue @@ -138,9 +138,14 @@ + @@ -174,15 +188,19 @@ type QcWorkOrder, type QcWorkOrderDetail } from '@/api/qc-work-order' + import { fetchQcTaskResults, type QcTaskResultItem } from '@/api/qc-task-result' + import type { QcTask } from '@/api/qc-task' import { workOrderStatusLabel, receptionSourceLabel, acceptConclusionLabel, - transportTypeLabel + transportTypeLabel, + taskStatusLabel, + qcTaskConclusionLabel } from '@/utils/qc-labels' import ProtocolAttachmentReadonly from '@/views/cell-storage/protocol/ProtocolAttachmentReadonly.vue' import SystemViewDialog from '@/components/business/system-view-dialog/index.vue' - import type { ViewSection } from '@/components/business/system-view-dialog/index.vue' + import type { ViewField, ViewSection } from '@/components/business/system-view-dialog/index.vue' import { downloadAttachmentFile } from '@/utils/download-attachment' defineOptions({ name: 'QualityInspectionQcWorkOrder' }) @@ -217,9 +235,20 @@ }) const viewVisible = ref(false) + const viewLoading = ref(false) const detail = ref(null) + type QcWorkOrderTaskView = QcTask & { results?: QcTaskResultItem[] } + const viewTasks = ref([]) const minioBaseUrl = (import.meta.env.VITE_MINIO_BASE_URL || '').replace(/\/$/, '') + const viewTasksWithAttachments = computed(() => + viewTasks.value.filter((t) => (t.attachmentFiles?.length || 0) > 0) + ) + + function taskAttachmentSlotName(taskId: string) { + return `task-att-${taskId}` + } + const viewReceptionAttachmentFiles = computed(() => { const r = detail.value?.reception if (!r) return [] @@ -255,6 +284,125 @@ downloadAttachmentFile(file, { fullFileUrl: receptionAttachmentFullUrl }) } + function taskAttachmentFullUrl(url: string) { + const u = String(url || '').trim() + if (!u) return '' + if (/^https?:\/\//i.test(u)) return u + return minioBaseUrl ? `${minioBaseUrl}/${u.replace(/^\//, '')}` : u + } + + function handleTaskAttachmentPreview(file: Record) { + const url = taskAttachmentFullUrl(String(file.fileUrl || '')) + if (url) window.open(url, '_blank') + } + + function handleTaskAttachmentDownload(file: Record) { + downloadAttachmentFile(file, { fullFileUrl: taskAttachmentFullUrl }) + } + + function conclusionTagType(conclusion?: string) { + if (conclusion === 'tg') return 'success' as const + if (conclusion === 'btg') return 'danger' as const + return 'info' as const + } + + function taskStatusTagType(status?: string) { + if (status === 'ywc') return 'success' as const + if (status === 'jxz') return 'warning' as const + return 'info' as const + } + + function formatConfiguredLabItems(d: QcWorkOrderDetail) { + return ( + d.labItems?.map((li) => `${li.itemName || ''}(${li.itemCode || ''})`).join('、') || '无' + ) + } + + function formatConfiguredThirdItems(d: QcWorkOrderDetail) { + return ( + d.thirdPartyItems + ?.map((li) => `${li.companyName || ''} — ${li.itemName || ''}(¥${li.feeAmount ?? '—'})`) + .join('、') || '无' + ) + } + + function buildTaskTypeSections( + tasks: QcWorkOrderTaskView[], + taskType: 'sysz' | 'dsfjc', + sectionTitle: string + ): ViewSection[] { + const filtered = tasks.filter((t) => t.taskType === taskType) + if (!filtered.length) return [] + + return filtered.map((task, index) => { + const title = + filtered.length > 1 ? `${sectionTitle}(${index + 1})` : sectionTitle + const fields: ViewField[] = [ + { label: '检测项目', value: task.itemName || '—' }, + { label: '项目编码', value: task.itemCode || '—' }, + { + label: '任务状态', + value: taskStatusLabel(task.taskStatus || ''), + tagType: taskStatusTagType(task.taskStatus) + }, + { + label: '检测结论', + value: task.conclusionLabel || qcTaskConclusionLabel(task.conclusion || '') || '—', + tagType: conclusionTagType(task.conclusion) + }, + { label: '任务号', value: task.taskNo || '—' }, + { label: '完成时间', value: task.completedTime || '—' } + ] + if (taskType === 'dsfjc') { + fields.splice(2, 0, { label: '第三方公司', value: task.companyName || '—' }) + if (task.feeAmount != null) { + fields.push({ label: '费用(元)', value: String(task.feeAmount) }) + } + } + if (task.results?.length) { + for (const item of task.results) { + fields.push({ + label: item.paramName + (item.paramUnit ? `(${item.paramUnit})` : ''), + value: item.paramValue || '—' + }) + } + } else if (taskType === 'sysz') { + fields.push({ label: '检测参数', value: '—' }) + } + fields.push({ label: '备注', value: task.remark || '—', span: true }) + + const section: ViewSection = { title, fields } + if (task.attachmentFiles?.length) { + section.slot = taskAttachmentSlotName(task.id) + section.slotTitle = taskType === 'dsfjc' ? '检测材料' : '检测附件' + section.slotTitleStyle = 'field' + } else if (taskType === 'dsfjc') { + fields.push({ label: '检测材料', value: '—' }) + } else { + fields.push({ label: '检测附件', value: '—' }) + } + return section + }) + } + + function buildConfiguredOnlySection( + title: string, + configuredLabel: string, + configuredValue: string, + attachmentLabel: string + ): ViewSection { + return { + title, + fields: [ + { label: configuredLabel, value: configuredValue, span: true }, + { label: '检测结论', value: '—' }, + { label: '检测参数', value: '—' }, + { label: '备注', value: '—' }, + { label: attachmentLabel, value: '—' } + ] + } + } + function formatDetectMethods(row: QcWorkOrder) { const parts: string[] = [] if (row.hasLab) parts.push('实验室') @@ -342,28 +490,23 @@ { label: '备注', value: r.remark || '—', span: true } ] }, - { - title: '实验室项目', - fields: [ - { - label: '检测项目', - value: d.labItems?.map((li) => li.itemName + '(' + li.itemCode + ')').join('、') || '无', - span: true - } - ] - }, - { - title: '第三方项目', - fields: [ - { - label: '检测项目', - value: - d.thirdPartyItems?.map((li) => li.companyName + ' — ' + li.itemName + '(¥' + li.feeAmount + ')').join('、') || - '无', - span: true - } - ] - } + ...(viewTasks.value.some((t) => t.taskType === 'sysz') + ? buildTaskTypeSections(viewTasks.value, 'sysz', '实验室项目') + : d.hasLab + ? [buildConfiguredOnlySection('实验室项目', '已配置项目', formatConfiguredLabItems(d), '检测附件')] + : []), + ...(viewTasks.value.some((t) => t.taskType === 'dsfjc') + ? buildTaskTypeSections(viewTasks.value, 'dsfjc', '第三方项目') + : d.hasThirdParty + ? [ + buildConfiguredOnlySection( + '第三方项目', + '已配置项目', + formatConfiguredThirdItems(d), + '检测材料' + ) + ] + : []) ] }) @@ -433,8 +576,30 @@ } async function handleView(row: QcWorkOrder) { - detail.value = await fetchQcWorkOrderDetail(row.id) viewVisible.value = true + viewLoading.value = true + viewTasks.value = [] + try { + const d = await fetchQcWorkOrderDetail(row.id) + detail.value = d + const rawTasks = (d.tasks || []) as QcWorkOrderTaskView[] + const enriched = await Promise.all( + rawTasks.map(async (task) => { + if (task.taskType !== 'sysz' || task.taskStatus !== 'ywc') { + return { ...task, results: [] as QcTaskResultItem[] } + } + try { + const results = await fetchQcTaskResults(task.id) + return { ...task, results: results || [] } + } catch { + return { ...task, results: [] as QcTaskResultItem[] } + } + }) + ) + viewTasks.value = enriched + } finally { + viewLoading.value = false + } } onMounted(() => loadData()) @@ -475,6 +640,10 @@ color: var(--mint-text-muted, #64748b); } + .qc-work-order-task-attachments { + margin-top: 0; + } + .view-reception-attachments { margin-top: 4px;