优化案件模块
This commit is contained in:
@@ -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'),
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user