在创建急救转运任务时,将前端选择的归属机构(分公司)的部门ID传递到后端,并保存到 sys_task 表的 dept_id 字段中。
文件:ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java
/** 执行人员ID列表 */
private List<Long> assigneeIds;
/** 归属部门ID */
private Long deptId;
public List<Long> getAssigneeIds() {
return assigneeIds;
}
public void setAssigneeIds(List<Long> assigneeIds) {
this.assigneeIds = assigneeIds;
}
public Long getDeptId() {
return deptId;
}
public void setDeptId(Long deptId) {
this.deptId = deptId;
}
文件:ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
修改 insertSysTask 方法:
// 修改前
task.setDeptId(SecurityUtils.getDeptId());
// 修改后
// 优先使用前端传入的部门ID,如果没有则使用当前用户的部门ID
task.setDeptId(createVO.getDeptId() != null ? createVO.getDeptId() : SecurityUtils.getDeptId());
逻辑说明:
- 如果前端传入了 deptId,优先使用前端传入的值
- 如果前端没有传入 deptId(为 null),则使用当前登录用户的部门ID作为回退
- 确保向后兼容性:旧的任务创建流程不受影响
文件:app/pages/task/create-emergency.vue
data() {
return {
selectedOrganization: '',
selectedOrganizationId: null, // 归属机构ID(部门ID)
selectedRegion: '', // 从归属机构中提取的地域信息
// ...
}
}
onOrganizationChange(e) {
const index = e.detail.value
const selected = this.organizationOptions[index]
this.selectedOrganization = selected.deptName
this.selectedOrganizationId = selected.deptId // 保存部门ID
this.selectedRegion = selected.deptName.replace(/分公司$/g, '').trim()
this.loadDefaultHospitals()
}
loadBranchCompanies() {
listBranchCompany().then(response => {
const list = response.data || []
this.organizationOptions = list.filter(dept => dept.parentId === 100)
this.organizations = this.organizationOptions.map(dept => dept.deptName)
// 默认选中当前用户的分公司
if (this.currentUser.branchCompanyName) {
const index = this.organizationOptions.findIndex(
dept => dept.deptName === this.currentUser.branchCompanyName
)
if (index !== -1) {
this.selectedOrganization = this.currentUser.branchCompanyName
this.selectedOrganizationId = this.organizationOptions[index].deptId // 保存部门ID
this.selectedRegion = this.selectedOrganization.replace(/分公司$/g, '').trim()
this.loadDefaultHospitals()
}
}
})
}
buildSubmitData() {
const submitData = {
taskType: 'EMERGENCY_TRANSFER',
deptId: this.selectedOrganizationId, // 归属机构ID(部门ID)
vehicleIds: this.selectedVehicleId ? [this.selectedVehicleId] : [],
assigneeIds: this.selectedStaff.map(staff => staff.userId),
assigneeId: this.selectedStaff.length > 0 ? this.selectedStaff[0].userId : null,
transferTime: this.taskForm.transferTime,
plannedStartTime: this.taskForm.transferTime,
documentTypeId: this.selectedDocumentTypeId,
taskTypeId: this.selectedEmergencyTaskTypeId,
departureAddress: this.taskForm.hospitalOut.address || '',
destinationAddress: this.taskForm.hospitalIn.address || '',
// ... 其他字段
}
return submitData
}
graph LR
A[用户选择归属机构] --> B[保存selectedOrganizationId]
B --> C[构建提交数据]
C --> D[deptId字段传入后端]
D --> E[后端接收TaskCreateVO]
E --> F{deptId是否为null?}
F -->|否| G[使用前端传入的deptId]
F -->|是| H[使用当前用户的deptId]
G --> I[保存到sys_task表]
H --> I
| 前端字段 | VO 字段 | 实体字段 | 数据库字段 | 说明 |
|---|---|---|---|---|
| selectedOrganizationId | deptId | deptId | dept_id | 归属部门ID(分公司ID) |
selectedOrganizationIdselectedOrganizationId 作为 deptId 传给后端sys_task 表的 dept_id 字段deptId(旧版本或其他创建方式)CREATE TABLE sys_task (
task_id BIGINT PRIMARY KEY AUTO_INCREMENT,
task_code VARCHAR(50) NOT NULL COMMENT '任务编号',
task_type VARCHAR(50) NOT NULL COMMENT '任务类型',
dept_id BIGINT COMMENT '归属部门ID',
creator_id BIGINT COMMENT '创建人ID',
assignee_id BIGINT COMMENT '执行人ID',
-- ... 其他字段
)
dept_id 字段说明:
- 存储任务所属的部门ID(通常是分公司的部门ID)
- 用于数据权限控制、任务查询过滤
- 与 sys_dept 表的 dept_id 字段关联
- 支持 NULL(为了兼容旧数据)
通过 dept_id 字段实现部门级别的数据权限控制:
1. 用户只能查看自己部门及子部门的任务
2. 管理员可以查看所有部门的任务
3. 任务统计按部门分组
dept_id 优先使用前端选择的归属机构IDdept_id 不可修改(保证数据一致性)前端通过以下接口加载分公司列表:javascript // API: /system/dept/list?parentId=100 listBranchCompany()
返回数据结构:json { "code": 200, "data": [ { "deptId": 101, "deptName": "广州分公司", "parentId": 100, "ancestors": "0,100" }, { "deptId": 102, "deptName": "深圳分公司", "parentId": 100, "ancestors": "0,100" } ] }
dept_id:任务所属的部门(通常是分公司)creator_id:任务创建人(个人)本次修改实现了急救转运任务创建时归属机构字段的完整传递链路:
确保了数据的完整性和业务逻辑的正确性,同时保持了向后兼容性。