修改半成品和成品新增时候搜索下拉框显示问题,新增负责人和生产人历史记录功能
This commit is contained in:
@ -92,12 +92,14 @@ def search_base():
|
||||
"""
|
||||
try:
|
||||
keyword = request.args.get('keyword', '')
|
||||
page = request.args.get('page', 1, type=int)
|
||||
# 调用 Service 层已修复的 search_base_material 方法
|
||||
data = ProductInboundService.search_base_material(keyword)
|
||||
result = ProductInboundService.search_base_material(keyword, page)
|
||||
# 字段级脱敏
|
||||
user_permissions = get_current_user_permissions()
|
||||
filtered_data = [filter_item_by_permissions(item, user_permissions) for item in data]
|
||||
return jsonify({"code": 200, "msg": "success", "data": filtered_data})
|
||||
if result.get('items'):
|
||||
result['items'] = [filter_item_by_permissions(item, user_permissions) for item in result['items']]
|
||||
return jsonify({"code": 200, "msg": "success", "data": result})
|
||||
except Exception as e:
|
||||
# 捕获异常并打印堆栈,方便调试
|
||||
traceback.print_exc()
|
||||
@ -146,7 +148,7 @@ def get_list():
|
||||
company = request.args.get('company', '')
|
||||
|
||||
result = ProductInboundService.get_list(
|
||||
page, limit, keyword, statuses,
|
||||
page, limit, keyword, statuses,
|
||||
category, material_type, company
|
||||
)
|
||||
# 字段级脱敏
|
||||
@ -337,3 +339,20 @@ def get_options():
|
||||
return jsonify({"code": 200, "msg": "success", "data": data})
|
||||
except Exception as e:
|
||||
return jsonify({"code": 500, "msg": str(e)}), 500
|
||||
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# 8. 获取历史生产负责人建议 (新增)
|
||||
# ------------------------------------------------------------------
|
||||
@inbound_product_bp.route('/suggestions/managers', methods=['GET'])
|
||||
@permission_required('inbound_product')
|
||||
def get_manager_history():
|
||||
base_id = request.args.get('base_id', type=int)
|
||||
if not base_id:
|
||||
return jsonify({"code": 400, "msg": "缺少 base_id"}), 400
|
||||
try:
|
||||
data = ProductInboundService.get_history_managers(base_id)
|
||||
return jsonify({"code": 200, "msg": "success", "data": data})
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
return jsonify({"code": 500, "msg": str(e)}), 500
|
||||
@ -92,15 +92,17 @@ def search_base():
|
||||
"""
|
||||
try:
|
||||
keyword = request.args.get('keyword', '')
|
||||
# 这里复用 Service 中的搜索逻辑
|
||||
data = SemiInboundService.search_base_material(keyword)
|
||||
page = request.args.get('page', 1, type=int)
|
||||
# 这里复用 Service 中的搜索逻辑 (已修改接收 page)
|
||||
result = SemiInboundService.search_base_material(keyword, page)
|
||||
# 字段级脱敏
|
||||
user_permissions = get_current_user_permissions()
|
||||
filtered_data = [filter_item_by_permissions(item, user_permissions) for item in data]
|
||||
if result.get('items'):
|
||||
result['items'] = [filter_item_by_permissions(item, user_permissions) for item in result['items']]
|
||||
return jsonify({
|
||||
"code": 200,
|
||||
"msg": "success",
|
||||
"data": filtered_data
|
||||
"data": result
|
||||
})
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
@ -337,3 +339,19 @@ def get_options():
|
||||
return jsonify({"code": 200, "msg": "success", "data": data})
|
||||
except Exception as e:
|
||||
return jsonify({"code": 500, "msg": str(e)}), 500
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# 8. 获取历史生产负责人建议 (新增)
|
||||
# ------------------------------------------------------------------
|
||||
@inbound_semi_bp.route('/suggestions/managers', methods=['GET'])
|
||||
@permission_required('inbound_semi')
|
||||
def get_manager_history():
|
||||
base_id = request.args.get('base_id', type=int)
|
||||
if not base_id:
|
||||
return jsonify({"code": 400, "msg": "缺少 base_id"}), 400
|
||||
try:
|
||||
data = SemiInboundService.get_history_managers(base_id)
|
||||
return jsonify({"code": 200, "msg": "success", "data": data})
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
return jsonify({"code": 500, "msg": str(e)}), 500
|
||||
@ -7,7 +7,6 @@ from sqlalchemy import or_, func, text, and_
|
||||
import traceback
|
||||
import json
|
||||
|
||||
|
||||
class ProductInboundService:
|
||||
|
||||
# ============================================================
|
||||
@ -26,10 +25,10 @@ class ProductInboundService:
|
||||
raise ValueError(f"序列号【{serial_number}】已存在!被成品 [{occupied_name}] 占用,请核查。")
|
||||
|
||||
# ============================================================
|
||||
# 1. 基础物料搜索
|
||||
# 1. 基础物料搜索 (已修改支持分页)
|
||||
# ============================================================
|
||||
@staticmethod
|
||||
def search_base_material(keyword):
|
||||
def search_base_material(keyword, page=1, limit=50):
|
||||
try:
|
||||
query = MaterialBase.query.filter(MaterialBase.is_enabled == True)
|
||||
if keyword:
|
||||
@ -41,9 +40,10 @@ class ProductInboundService:
|
||||
MaterialBase.company_name.ilike(kw) # [新增]
|
||||
)
|
||||
)
|
||||
query = query.order_by(MaterialBase.id.desc()).limit(20)
|
||||
query = query.order_by(MaterialBase.id.desc())
|
||||
pagination = query.paginate(page=page, per_page=limit, error_out=False)
|
||||
results = []
|
||||
for item in query.all():
|
||||
for item in pagination.items:
|
||||
results.append({
|
||||
'id': item.id,
|
||||
'company_name': item.company_name, # [新增]
|
||||
@ -54,10 +54,15 @@ class ProductInboundService:
|
||||
'type': item.material_type,
|
||||
'status': '启用'
|
||||
})
|
||||
return results
|
||||
return {
|
||||
"items": results,
|
||||
"total": pagination.total,
|
||||
"page": page,
|
||||
"has_next": pagination.has_next
|
||||
}
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return []
|
||||
return {"items": [], "total": 0, "page": 1, "has_next": False}
|
||||
|
||||
# ============================================================
|
||||
# 1.5 BOM 搜索逻辑
|
||||
@ -391,4 +396,21 @@ class ProductInboundService:
|
||||
except Exception:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return {"categories": [], "types": [], "companies": []}
|
||||
return {"categories": [], "types": [], "companies": []}
|
||||
|
||||
# ============================================================
|
||||
# 8. 获取历史负责人建议 (新增)
|
||||
# ============================================================
|
||||
@staticmethod
|
||||
def get_history_managers(base_id):
|
||||
from app.models.inbound.product import StockProduct
|
||||
try:
|
||||
records = db.session.query(StockProduct.production_manager).filter(
|
||||
StockProduct.base_id == base_id,
|
||||
StockProduct.production_manager.isnot(None),
|
||||
StockProduct.production_manager != ''
|
||||
).distinct().all()
|
||||
return [r[0] for r in records if r[0]]
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return []
|
||||
@ -7,7 +7,6 @@ from sqlalchemy import or_, func, text, and_
|
||||
import traceback
|
||||
import json
|
||||
|
||||
|
||||
class SemiInboundService:
|
||||
|
||||
# ============================================================
|
||||
@ -36,10 +35,10 @@ class SemiInboundService:
|
||||
raise ValueError(f"该物料已存在批号【{batch_number}】,请勿重复建单,建议在原批次上追加库存。")
|
||||
|
||||
# ============================================================
|
||||
# 1. 基础物料搜索
|
||||
# 1. 基础物料搜索 (已修改支持分页)
|
||||
# ============================================================
|
||||
@staticmethod
|
||||
def search_base_material(keyword):
|
||||
def search_base_material(keyword, page=1, limit=50):
|
||||
try:
|
||||
query = MaterialBase.query.filter(MaterialBase.is_enabled == True)
|
||||
if keyword:
|
||||
@ -51,9 +50,10 @@ class SemiInboundService:
|
||||
MaterialBase.company_name.ilike(kw) # [新增] 支持搜公司
|
||||
)
|
||||
)
|
||||
query = query.order_by(MaterialBase.id.desc()).limit(20)
|
||||
query = query.order_by(MaterialBase.id.desc())
|
||||
pagination = query.paginate(page=page, per_page=limit, error_out=False)
|
||||
results = []
|
||||
for item in query.all():
|
||||
for item in pagination.items:
|
||||
results.append({
|
||||
'id': item.id,
|
||||
'company_name': item.company_name, # [新增]
|
||||
@ -64,10 +64,15 @@ class SemiInboundService:
|
||||
'type': item.material_type,
|
||||
'status': '启用'
|
||||
})
|
||||
return results
|
||||
return {
|
||||
"items": results,
|
||||
"total": pagination.total,
|
||||
"page": page,
|
||||
"has_next": pagination.has_next
|
||||
}
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
return []
|
||||
return {"items": [], "total": 0, "page": 1, "has_next": False}
|
||||
|
||||
# ============================================================
|
||||
# 1.5 BOM 搜索逻辑
|
||||
@ -479,4 +484,21 @@ class SemiInboundService:
|
||||
except Exception:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return {"categories": [], "types": [], "companies": []}
|
||||
return {"categories": [], "types": [], "companies": []}
|
||||
|
||||
# ============================================================
|
||||
# 8. 获取历史生产负责人 (新增)
|
||||
# ============================================================
|
||||
@staticmethod
|
||||
def get_history_managers(base_id):
|
||||
from app.models.inbound.semi import StockSemi
|
||||
try:
|
||||
records = db.session.query(StockSemi.production_manager).filter(
|
||||
StockSemi.base_id == base_id,
|
||||
StockSemi.production_manager.isnot(None),
|
||||
StockSemi.production_manager != ''
|
||||
).distinct().all()
|
||||
return [r[0] for r in records if r[0]]
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return []
|
||||
Reference in New Issue
Block a user