优化案件模块

This commit is contained in:
27942
2026-01-15 13:34:07 +08:00
parent add84c27c1
commit 1baac150b4
3 changed files with 129 additions and 50 deletions

View File

@@ -1,7 +1,7 @@
from django.urls import path
from .models import Schedule
from .views import registration,registrationDetail,Project,Projectquerytype,ProjectDetail,EditProject,BidRegistration,BidDetail,registrationList,caseManagement,caseManagementDetail,CaseAttachmentUpload,Uploadinvoice,InvoiceDetail,Log,LogDetail,accumulate,preFilingLinkedCases,Application,ApplicationDetail,WarehousingRegistration,WarehousingDetail,PlatformRegistration,PlatformDetail,EditPlatformDetail,DeletePlatformDetail,bulletin,BulletinDetail,EditBulletin,deleteBulletin,Lawyersdocuments,LawyersdocumentsDetail,LwaDetail,CreateSchedule,DeleteSchedule,ScheduleDetail,handleSchedule,AddRermission,DisplayRermission,DeleteRermission,EditRermission,addRole,DeleteRole,EditRole,displayRole,modifypermissions,getRolePermissions,DeleteRegistration,EditRegistration,DeleteProject,EditBid,DeleteBid,EditCase,DeleteCase,EditApplication,DeleteApplication,EditWarehousing,DeleteWarehousing,EditLawyerFlie,EditSchedule,TransferCase
from .views import registration,registrationDetail,Project,Projectquerytype,ProjectDetail,EditProject,BidRegistration,BidDetail,registrationList,caseManagement,caseManagementDetail,CaseAttachmentUpload,CaseAttachmentUpdate,Uploadinvoice,InvoiceDetail,Log,LogDetail,accumulate,preFilingLinkedCases,Application,ApplicationDetail,WarehousingRegistration,WarehousingDetail,PlatformRegistration,PlatformDetail,EditPlatformDetail,DeletePlatformDetail,bulletin,BulletinDetail,EditBulletin,deleteBulletin,Lawyersdocuments,LawyersdocumentsDetail,LwaDetail,CreateSchedule,DeleteSchedule,ScheduleDetail,handleSchedule,AddRermission,DisplayRermission,DeleteRermission,EditRermission,addRole,DeleteRole,EditRole,displayRole,modifypermissions,getRolePermissions,DeleteRegistration,EditRegistration,DeleteProject,EditBid,DeleteBid,EditCase,DeleteCase,EditApplication,DeleteApplication,EditWarehousing,DeleteWarehousing,EditLawyerFlie,EditSchedule,TransferCase
urlpatterns = [
path('register',registration.as_view(),name='register'),
@@ -20,6 +20,7 @@ urlpatterns = [
path('registrationlist',registrationList.as_view(),name='registrationlist'),
path('casemanagement',caseManagement.as_view(),name='casemanagement'),
path('case-attachment-upload',CaseAttachmentUpload.as_view(),name='case-attachment-upload'),
path('case-attachment-update',CaseAttachmentUpdate.as_view(),name='case-attachment-update'),
path('casemanagementdetail',caseManagementDetail.as_view(),name='casemanagementdetail'),
path('editCase',EditCase.as_view(),name='editCase'),
path('deleteCase',DeleteCase.as_view(),name='deleteCase'),

View File

@@ -72,21 +72,6 @@ def build_case_approval_content(project_registration, times, change_request=Fals
return "".join(content_parts)
def _parse_attachment_urls(raw_value):
if not raw_value:
return []
if isinstance(raw_value, list):
return [str(item).strip() for item in raw_value if str(item).strip()]
if isinstance(raw_value, str):
try:
parsed = json.loads(raw_value)
if isinstance(parsed, list):
return [str(item).strip() for item in parsed if str(item).strip()]
except (json.JSONDecodeError, TypeError):
pass
return [item.strip() for item in raw_value.split(',') if item.strip()]
return []
class registration(APIView):
def post(self, request, *args, **kwargs):
"""
@@ -998,9 +983,9 @@ class caseManagement(APIView):
"""
project_id = request.data.get('project_id') # 立项登记ID
times = request.data.get('times')
AgencyContract_urls = request.data.get('AgencyContractUrls') or request.data.get('agency_contract_urls')
Contractreturn_urls = request.data.get('ContractreturnUrls') or request.data.get('contractreturn_urls')
Closingapplication_urls = request.data.get('ClosingapplicationUrls') or request.data.get('closingapplication_urls')
AgencyContract = request.FILES.getlist('AgencyContract')
Contractreturn = request.FILES.getlist('Contractreturn')
Closingapplication = request.FILES.getlist('Closingapplication')
ChangeRequest = request.data.get('ChangeRequest')
invoice_status = request.data.get('invoice_status') # 已开票
paymentcollection = request.data.get('paymentcollection')
@@ -1022,10 +1007,10 @@ class caseManagement(APIView):
# 再次检查是否已经存在案件(在锁内检查,防止并发重复创建)
case = Case.objects.filter(project_id=project_id, is_deleted=False).first()
if not case:
# 处理材料:直接使用传入URL列表(可选)
agency_contract_list = _parse_attachment_urls(AgencyContract_urls)
contract_return_list = _parse_attachment_urls(Contractreturn_urls)
closing_application_list = _parse_attachment_urls(Closingapplication_urls)
# 处理材料:上传后存储URL列表
agency_contract_list = flies(AgencyContract)
contract_return_list = flies(Contractreturn)
closing_application_list = flies(Closingapplication)
project_contract_no = project_registration.ContractNo if project_registration else None
project_type = project_registration.type if project_registration else None
@@ -1094,19 +1079,16 @@ class caseManagement(APIView):
case.times = times
update_fields_list.append('times')
agency_contract_list = _parse_attachment_urls(AgencyContract_urls)
if agency_contract_list:
case.AgencyContract = json.dumps(agency_contract_list, ensure_ascii=False)
if AgencyContract:
case.AgencyContract = json.dumps(flies(AgencyContract), ensure_ascii=False)
update_fields_list.append('AgencyContract')
contract_return_list = _parse_attachment_urls(Contractreturn_urls)
if contract_return_list:
case.Contractreturn = json.dumps(contract_return_list, ensure_ascii=False)
if Contractreturn:
case.Contractreturn = json.dumps(flies(Contractreturn), ensure_ascii=False)
update_fields_list.append('Contractreturn')
closing_application_list = _parse_attachment_urls(Closingapplication_urls)
if closing_application_list:
case.Closingapplication = json.dumps(closing_application_list, ensure_ascii=False)
if Closingapplication:
case.Closingapplication = json.dumps(flies(Closingapplication), ensure_ascii=False)
update_fields_list.append('Closingapplication')
if ChangeRequest:
@@ -1177,6 +1159,64 @@ class CaseAttachmentUpload(APIView):
}, status=status.HTTP_200_OK)
class CaseAttachmentUpdate(APIView):
def post(self, request, *args, **kwargs):
"""
案件材料更新(代理合同/合同返还/结案申请)
通过 type 指定更新哪一种材料
"""
case_id = request.data.get('case_id')
upload_type = request.data.get('type')
files = request.FILES.getlist('file') or request.FILES.getlist('files')
if not case_id:
return Response({'status': 'error', 'message': '缺少参数case_id', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
allowed_types = ["AgencyContract", "Contractreturn", "Closingapplication"]
if upload_type not in allowed_types:
return Response({
'status': 'error',
'message': f'type参数错误支持类型{", ".join(allowed_types)}',
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
if not files:
return Response({'status': 'error', 'message': '请上传文件', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
try:
case = Case.objects.get(id=case_id, is_deleted=False)
except Case.DoesNotExist:
return Response({'status': 'error', 'message': '案件不存在', 'code': 1},
status=status.HTTP_404_NOT_FOUND)
file_urls = flies(files)
update_fields = []
if upload_type == "AgencyContract":
case.AgencyContract = json.dumps(file_urls, ensure_ascii=False)
update_fields = ['AgencyContract']
elif upload_type == "Contractreturn":
case.Contractreturn = json.dumps(file_urls, ensure_ascii=False)
update_fields = ['Contractreturn']
elif upload_type == "Closingapplication":
case.Closingapplication = json.dumps(file_urls, ensure_ascii=False)
update_fields = ['Closingapplication']
case.save(update_fields=update_fields)
return Response({
'message': '更新成功',
'code': 0,
'data': {
'case_id': case.id,
'type': upload_type,
'files': file_urls
}
}, status=status.HTTP_200_OK)
class caseManagementDetail(APIView):
def post(self, request, *args, **kwargs):
"""
@@ -1270,9 +1310,9 @@ class EditCase(APIView):
"""
id = request.data.get('id')
times = request.data.get('times')
AgencyContract_urls = request.data.get('AgencyContractUrls') or request.data.get('agency_contract_urls')
Contractreturn_urls = request.data.get('ContractreturnUrls') or request.data.get('contractreturn_urls')
Closingapplication_urls = request.data.get('ClosingapplicationUrls') or request.data.get('closingapplication_urls')
AgencyContract = request.FILES.getlist('AgencyContract')
Contractreturn = request.FILES.getlist('Contractreturn')
Closingapplication = request.FILES.getlist('Closingapplication')
ChangeRequest = request.data.get('ChangeRequest')
invoice_status = request.data.get('invoice_status') # 已开票
paymentcollection = request.data.get('paymentcollection')
@@ -1307,19 +1347,16 @@ class EditCase(APIView):
case.times = times
update_fields_list.append('times')
agency_contract_list = _parse_attachment_urls(AgencyContract_urls)
if agency_contract_list:
case.AgencyContract = json.dumps(agency_contract_list, ensure_ascii=False)
if AgencyContract:
case.AgencyContract = json.dumps(flies(AgencyContract), ensure_ascii=False)
update_fields_list.append('AgencyContract')
contract_return_list = _parse_attachment_urls(Contractreturn_urls)
if contract_return_list:
case.Contractreturn = json.dumps(contract_return_list, ensure_ascii=False)
if Contractreturn:
case.Contractreturn = json.dumps(flies(Contractreturn), ensure_ascii=False)
update_fields_list.append('Contractreturn')
closing_application_list = _parse_attachment_urls(Closingapplication_urls)
if closing_application_list:
case.Closingapplication = json.dumps(closing_application_list, ensure_ascii=False)
if Closingapplication:
case.Closingapplication = json.dumps(flies(Closingapplication), ensure_ascii=False)
update_fields_list.append('Closingapplication')
if ChangeRequest:

View File

@@ -21,7 +21,7 @@
**请求头:**
```
Content-Type: application/json
Content-Type: multipart/form-data
token: {用户token}
```
@@ -786,9 +786,9 @@ token: {用户token}
|--------|------|------|------|
| project_id | Integer | 是 | 立项登记ID |
| times | String | 否 | 立案时间格式YYYY-MM-DD |
| AgencyContractUrls / agency_contract_urls | String/Array | 否 | 代理合同URL列表JSON数组字符串/逗号分隔/数组) |
| ContractreturnUrls / contractreturn_urls | String/Array | 否 | 合同返还URL列表JSON数组字符串/逗号分隔/数组) |
| ClosingapplicationUrls / closingapplication_urls | String/Array | 否 | 结案申请URL列表JSON数组字符串/逗号分隔/数组) |
| AgencyContract | File[] | 否 | 代理合同文件 |
| Contractreturn | File[] | 否 | 合同返还文件 |
| Closingapplication | File[] | 否 | 结案申请文件 |
| ChangeRequest | String | 否 | 变更申请(如果传入会触发审核流程) |
| invoice_status | String | 否 | 已开票状态(默认:未开票) |
| paymentcollection | String | 否 | 已收款金额 |
@@ -800,8 +800,6 @@ token: {用户token}
{
"project_id": 1,
"times": "2024-01-15",
"AgencyContractUrls": ["http://example.com/agency.pdf"],
"ContractreturnUrls": "http://example.com/return.pdf",
"ChangeRequest": "需要变更代理方案",
"invoice_status": "已开票",
"paymentcollection": "50000"
@@ -886,6 +884,49 @@ token: {用户token}
---
### 2.1.2 案件材料更新
**接口地址:** `POST /business/case-attachment-update`
**接口描述:** 更新案件材料(代理合同/合同返还/结案申请),通过 `type` 指定更新哪个类型;只更新指定类型字段。
**请求头:**
```
Content-Type: multipart/form-data
token: {用户token}
```
**请求参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| case_id | Integer | 是 | 案件ID |
| type | String | 是 | 材料类型AgencyContract / Contractreturn / Closingapplication |
| file / files | File[] | 是 | 上传文件(支持多文件) |
**请求示例:**
```json
{
"case_id": 1,
"type": "Contractreturn"
}
```
**响应示例:**
```json
{
"message": "更新成功",
"code": 0,
"data": {
"case_id": 1,
"type": "Contractreturn",
"files": ["http://example.com/return.pdf"]
}
}
```
---
### 2.2 案件列表查询
**接口地址:** `POST /business/casemanagementdetail`