优化案件模块

This commit is contained in:
27942
2026-01-20 16:44:59 +08:00
parent e20aafa5fc
commit 443a0348bc

View File

@@ -2163,35 +2163,70 @@ class PaymentRequest(APIView):
class PaymentDisplay(APIView):
def post(self, request, *args, **kwargs):
"""
付款申请列表展示
只显示:申请人、收款单位、付款金额、支付说明
付款申请列表展示接口
必填参数page页码、per_page每页数量
可选参数times开始时间、end_time结束时间、payee_name收款方名称搜索、applicant申请人搜索
返回:申请人、收款单位、付款金额、支付说明
"""
# 必填参数:页数和每页数量
page = request.data.get('page')
per_page = request.data.get('per_page')
times = request.data.get('times')
end_time = request.data.get('end_time')
payee_name = request.data.get('payee_name') # 收款方名称搜索
applicant = request.data.get('applicant') # 申请人搜索
if not all([page, per_page]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
# 可选参数:搜索条件
times = request.data.get('times') # 开始时间(可选)
end_time = request.data.get('end_time') # 结束时间(可选)
payee_name = request.data.get('payee_name') # 收款方名称搜索(可选)
applicant = request.data.get('applicant') # 申请人搜索(可选)
# 验证必填参数
if not page:
return Response({
'status': 'error',
'message': '缺少必填参数: page(页码)',
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
if not per_page:
return Response({
'status': 'error',
'message': '缺少必填参数: per_page(每页数量)',
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
# 转换为整数
try:
page = int(page)
per_page = int(per_page)
except (ValueError, TypeError):
return Response({
'status': 'error',
'message': '参数类型错误: page和per_page必须是数字',
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
# 构建查询条件
Q_obj = Q(is_deleted=False)
# 时间范围筛选(可选)
if times and end_time:
Q_obj &= Q(submit_tiem__gte=times) & Q(submit_tiem__lte=end_time)
# 收款方名称搜索(可选,兼容新旧字段)
if payee_name:
# 兼容旧字段
Q_obj &= Q(payee__icontains=payee_name)
# 申请人搜索(可选)
if applicant:
Q_obj &= Q(applicant__icontains=applicant)
# 只查询存在的字段,避免访问不存在的字段
# 使用only()只查询确定存在的字段
# 查询数据(只查询存在的字段,避免访问不存在的字段
pay = Payment.objects.filter(Q_obj).only(
'id', 'applicant', 'amount', 'state', 'submit_tiem', 'payee'
).order_by('-id')
total = pay.count()
# 分页处理
paginator = Paginator(pay, per_page)
try:
user_agents_page = paginator.page(page)
@@ -2200,10 +2235,10 @@ class PaymentDisplay(APIView):
except EmptyPage:
user_agents_page = paginator.page(paginator.num_pages)
# 构建返回数据
data = []
for info in user_agents_page.object_list:
# 安全地获取字段值,兼容新旧字段
# 使用getattr()安全访问可能不存在的字段
payee_name_value = getattr(info, 'payee_name', None) or getattr(info, 'payee', None) or ''
payment_description_value = getattr(info, 'payment_description', None) or ''
@@ -2217,7 +2252,13 @@ class PaymentDisplay(APIView):
"submit_tiem": info.submit_tiem, # 提交时间
}
data.append(itme)
return Response({'message': '展示成功', "total": total, 'data': data, 'code': 0}, status=status.HTTP_200_OK)
return Response({
'message': '展示成功',
"total": total,
'data': data,
'code': 0
}, status=status.HTTP_200_OK)
class EditPayment(APIView):