优化待办

This commit is contained in:
27942
2026-01-13 15:17:23 +08:00
parent 1629dc9dac
commit e487ef610f
2 changed files with 214 additions and 0 deletions

View File

@@ -707,6 +707,7 @@ class roxyExhibition(APIView):
# - 非纯数字字符串 = 审批员用户名(只有该审批员能看到)
# - "财务" = 财务部门(所有财务人员都能看到)
# 状态:审核中 或 已抄送财务(财务能看到)
# 重要多人团队审核时只有当前审核人personincharge等于当前用户名才能看到审核记录
query = Q(state__in=["审核中", "已抄送财务"])
# 部门匹配personincharge字段是纯数字字符串且匹配用户所属部门
@@ -716,6 +717,7 @@ class roxyExhibition(APIView):
department_query = Q(personincharge__in=user_department_ids_str)
# 审批员匹配personincharge字段是用户名非纯数字字符串
# 重要只匹配当前审核人确保第一个审核人审核完后personincharge被更新为第二个审核人时第一个审核人不再看到
person_query = Q(personincharge=user.username)
# 财务匹配personincharge字段是"财务",且状态为"已抄送财务"
@@ -723,6 +725,7 @@ class roxyExhibition(APIView):
# 组合查询:部门匹配 OR 审批员匹配 OR 财务匹配
# 如果用户有部门,使用部门匹配;否则只使用审批员匹配
# 注意:审批员匹配必须精确匹配当前用户名,确保多人团队审核时,只有当前审核人能看到
if user_department_ids_str:
query &= (department_query | person_query | finance_query)
else:

211
审核参数说明.md Normal file
View File

@@ -0,0 +1,211 @@
# 审核参数说明文档
## 一、哪些地方可以不传 `approvers` 参数
### 1. 个人团队personal/独立律师)
**可以不传 `approvers` 的情况:**
-**个人团队personal**:系统会自动判断,直接抄送财务,不需要审核人
-**无团队**:系统会自动判断,直接抄送财务,不需要审核人
**判断逻辑:**
```python
# 在 create_approval_with_team_logic 函数中
if not team_name or not team or (team and team.team_type == 'personal'):
# 个人团队或无团队:直接到财务团队审核
# 不需要 approvers 参数
approval = Approval.objects.create(
personincharge="财务",
state="已抄送财务",
...
)
```
### 2. 团队team/团队律师)
**可以不传 `approvers` 的情况:**
-**团队已配置审核人**:如果不传 `approvers`,系统会自动使用团队配置的审核人
**判断逻辑:**
```python
# 在 create_approval_with_team_logic 函数中
elif team and team.team_type == 'team':
# 团队类型:需要审核人审核(按顺序)
approvers_list = parse_approvers(approvers)
# 如果没有传入审核人,使用团队的审核人
if not approvers_list:
approvers_list = [approver.username for approver in team.approvers.filter(is_deleted=False).order_by('id')]
```
**注意:**
- 如果团队类型是 `team`,且团队没有配置审核人,且前端也没有传 `approvers`,会返回错误:`团队类型需要指定审核人请提供approvers参数`
---
## 二、如何判断是个人律师还是团队
### 1. 判断方式
系统通过 `Team` 模型的 `team_type` 字段判断:
```python
# Team 模型定义
class Team(models.Model):
TEAM_TYPE_CHOICES = [
('personal', '个人团队'), # 个人律师/独立律师
('team', '团队'), # 团队律师
]
team_type = models.CharField(max_length=20, choices=TEAM_TYPE_CHOICES, default='team')
```
### 2. 判断逻辑(在 `create_approval_with_team_logic` 函数中)
```python
# 查找团队
team = None
if team_name:
team = Team.objects.prefetch_related('approvers').filter(name=team_name, is_deleted=False).first()
# 判断团队类型
if not team_name or not team or (team and team.team_type == 'personal'):
# 情况1个人团队personal
# - 直接抄送财务
# - 不需要 approvers 参数
# - personincharge="财务"
# - state="已抄送财务"
elif team and team.team_type == 'team':
# 情况2团队team
# - 需要审核人(可以传 approvers也可以使用团队配置的审核人
# - personincharge=第一个审核人
# - state="审核中"
else:
# 情况3找不到团队或团队类型未知
# - 直接抄送财务
# - 不需要 approvers 参数
```
### 3. 判断结果对应的处理方式
| 团队类型 | team_type | 是否需要 approvers | 处理方式 |
|---------|-----------|-------------------|---------|
| 个人团队 | `personal` | ❌ 不需要 | 直接抄送财务 |
| 团队 | `team` | ✅ 需要(可传可不传) | 按顺序审核,最后抄送财务 |
| 无团队 | `None` | ❌ 不需要 | 直接抄送财务 |
---
## 三、所有创建审核的接口
### 1. 业务模块
#### ① 立项登记 (`POST /api2/business/project`)
- **可以不传 `approvers`**:个人团队时
- **必须传 `approvers`**:团队类型且团队未配置审核人时
#### ② 投标登记 (`POST /api2/business/bid`)
- **可以不传 `approvers`**:个人团队时
- **必须传 `approvers`**:团队类型且团队未配置审核人时
#### ③ 待办创建 (`POST /api2/business/schedule`)
- **可以不传 `approvers`**:个人团队时
- **可以不传 `approvers`**:团队类型且团队已配置审核人时
- **必须传 `approvers`**:团队类型且团队未配置审核人时
### 2. 财务模块
#### ① 入职财务登记 (`POST /api2/finance/user-register`)
- **可以不传 `approvers`**:个人团队时
- **必须传 `approvers`**:团队类型且团队未配置审核人时
#### ② 收入确认 (`POST /api2/finance/confirm`)
- **可以不传 `approvers`**:个人团队时
- **必须传 `approvers`**:团队类型且团队未配置审核人时
#### ③ 付款申请 (`POST /api2/finance/payment-request`)
- **可以不传 `approvers`**:个人团队时
- **必须传 `approvers`**:团队类型且团队未配置审核人时
#### ④ 报销申请 (`POST /api2/finance/reimbursement`)
- **可以不传 `approvers`**:个人团队时
- **必须传 `approvers`**:团队类型且团队未配置审核人时
#### ⑤ 工资/奖金变更 (`POST /api2/finance/change`)
- **可以不传 `approvers`**:个人团队时
- **必须传 `approvers`**:团队类型且团队未配置审核人时
#### ⑥ 离职财务登记 (`POST /api2/finance/user-departure`)
- **可以不传 `approvers`**:个人团队时
- **必须传 `approvers`**:团队类型且团队未配置审核人时
---
## 四、总结
### 可以不传 `approvers` 的情况:
1.**个人团队personal**:系统自动判断,直接抄送财务
2.**无团队**:系统自动判断,直接抄送财务
3.**团队team且团队已配置审核人**:系统自动使用团队配置的审核人
### 必须传 `approvers` 的情况:
1.**团队team且团队未配置审核人**:必须传 `approvers` 参数
### 判断逻辑:
系统会自动通过以下方式判断:
1. 根据用户的 `team` 字段(团队名称)查找 `Team` 模型
2. 检查 `Team.team_type` 字段:
- `'personal'` → 个人团队,不需要审核人
- `'team'` → 团队,需要审核人(可传可不传,取决于团队是否配置了审核人)
---
## 五、代码示例
### 前端调用示例(可以不传 approvers
```javascript
// 个人团队 - 可以不传 approvers
{
"user_id": "123",
"type": "项目类型",
"ContractNo": "合同编号",
"times": "2024-01-01",
"responsiblefor": "负责人",
"charge": "收费情况"
// 不传 approvers系统会自动判断是个人团队直接抄送财务
}
// 团队且团队已配置审核人 - 可以不传 approvers
{
"user_id": "123",
"type": "项目类型",
"ContractNo": "合同编号",
"times": "2024-01-01",
"responsiblefor": "负责人",
"charge": "收费情况"
// 不传 approvers系统会使用团队配置的审核人
}
// 团队且团队未配置审核人 - 必须传 approvers
{
"user_id": "123",
"type": "项目类型",
"ContractNo": "合同编号",
"times": "2024-01-01",
"responsiblefor": "负责人",
"charge": "收费情况",
"approvers": [1, 2, 3] // 必须传,否则会报错
}
```
---
**文档生成时间:** 2024年
**最后更新:** 2024年