9.4 KiB
9.4 KiB
员工亲属关系信息维护功能设计文档
一、需求概述
开发一个员工亲属关系信息维护的页面,功能包括新增、修改、删除、模板下载、文件导入异步新增。完全按照采购交易管理和招聘信息功能的后端业务处理逻辑和前端UI交互进行开发,交互细节保持完全一致。
二、功能规格
2.1 数据模型
数据表:ccdi_staff_fmy_relation
主键设计:
- 使用自增
id作为主键 - 建立唯一索引:
UNIQUE KEY uk_person_cert (person_id, relation_cert_no) - 确保同一员工不会重复添加同一亲属
核心字段:
id- 主键(BIGINT自增)person_id- 员工身份证号(关联ccdi_base_staff表)relation_type- 关系类型(字典:配偶、父亲、母亲、儿子、女儿、祖父、祖母、外祖父、外祖母、兄弟姐妹)relation_name- 关系人姓名gender- 性别(M:男 F:女 O:其他)birth_date- 出生日期relation_cert_type- 证件类型(下拉:身份证、护照、军官证等)relation_cert_no- 证件号码mobile_phone1- 手机号码1mobile_phone2- 手机号码2wechat_no1- 微信名称1wechat_no2- 微信名称2wechat_no3- 微信名称3contact_address- 详细联系地址relation_desc- 关系详细描述status- 状态(0-无效、1-有效)effective_date- 关系生效日期invalid_date- 关系失效日期remark- 备注信息data_source- 数据来源is_emp_family- 是否是员工的家庭关系(后台维护,不显示)is_cust_family- 是否是信贷客户的家庭关系(后台维护,不显示)
必填字段:
- 员工身份证号、关系类型、关系人姓名、证件类型、证件号码、状态
2.2 数据验证规则
- person_id存在性校验:必须在ccdi_base_staff表中存在
- 唯一性校验:person_id + relation_cert_no 组合唯一
- 身份证号格式校验:18位身份证号格式
- 手机号格式校验:11位手机号码格式(可选)
2.3 模块命名
- 后端模块名:
ccdi-staff-fmy-relation - 数据库表:
ccdi_staff_fmy_relation - 前端路由:
/ccdi/staff/fmy/relation - 菜单路径:信息维护 > 员工亲属关系
- 权限标识:
ccdi:staffFmyRelation:*
三、后端设计
3.1 Controller层接口
基础CRUD接口:
GET /ccdi/staffFmyRelation/list- 分页查询(5个查询条件)GET /ccdi/staffFmyRelation/{id}- 获取详情POST /ccdi/staffFmyRelation- 新增PUT /ccdi/staffFmyRelation- 修改DELETE /ccdi/staffFmyRelation/{ids}- 批量删除POST /ccdi/staffFmyRelation/export- 导出
导入相关接口:
POST /ccdi/staffFmyRelation/importTemplate- 下载模板(带字典下拉框)POST /ccdi/staffFmyRelation/importData- 异步导入(纯新增,重复即失败)GET /ccdi/staffFmyRelation/importStatus/{taskId}- 查询导入状态GET /ccdi/staffFmyRelation/importFailures/{taskId}- 查询导入失败记录(分页)
3.2 查询条件
列表页支持5个查询条件:
- 员工身份证号
- 关系人姓名
- 关系类型(下拉)
- 证件号码
- 状态(下拉:有效/无效)
3.3 核心业务逻辑
- 数据验证:新增/修改时验证person_id是否在ccdi_base_staff中存在
- 唯一性校验:person_id + relation_cert_no组合唯一
- 异步导入:使用线程池处理,导入结果存入Redis,前端轮询状态
- 纯新增模式:导入时不更新已存在的记录,直接标记为失败
3.4 代码结构
ruoyi-ccdi/
├── controller/
│ └── CcdiStaffFmyRelationController.java
├── domain/
│ ├── CcdiStaffFmyRelation.java # 实体类
│ ├── dto/
│ │ ├── CcdiStaffFmyRelationAddDTO.java
│ │ ├── CcdiStaffFmyRelationEditDTO.java
│ │ └── CcdiStaffFmyRelationQueryDTO.java
│ ├── vo/
│ │ ├── CcdiStaffFmyRelationVO.java
│ │ └── StaffFmyRelationImportFailureVO.java
│ └── excel/
│ └── CcdiStaffFmyRelationExcel.java
├── mapper/
│ └── CcdiStaffFmyRelationMapper.java
└── service/
├── ICcdiStaffFmyRelationService.java
├── ICcdiStaffFmyRelationImportService.java
├── impl/
│ ├── CcdiStaffFmyRelationServiceImpl.java
│ └── CcdiStaffFmyRelationImportServiceImpl.java
四、前端设计
4.1 列表页布局
顶部查询区(5个查询条件):
- 员工身份证号、关系人姓名、关系类型(下拉)、证件号码、状态(下拉)
操作按钮:
- 新增、导出、导入、模板下载、删除(批量)
表格列:
- 员工身份证号、关系类型、关系人姓名、性别、证件类型、证件号码、手机号码1、状态、创建时间
- 操作列:修改、删除
4.2 新增/修改对话框
分组两列布局,不折叠:
第一组 - 基本信息(两列):
- 员工身份证号*、关系类型*(下拉)、关系人姓名*、性别(下拉)、出生日期、证件类型*(下拉)、证件号码*(带格式校验)
第二组 - 联系方式(两列):
- 手机号码1、手机号码2、微信名称1、微信名称2、微信名称3、联系地址
第三组 - 其他信息(两列):
- 关系详细描述、状态*(默认有效)、生效日期、失效日期、备注
4.3 导入功能交互
完全参照招聘信息的导入流程:
- 点击"导入"按钮 → 选择Excel文件
- 立即返回taskId → 弹出"导入任务已提交"提示
- 自动轮询importStatus接口 → 显示进度条
- 完成后显示导入摘要(成功数、失败数)
- 失败记录可点击查看详情(分页表格)
4.4 前端代码结构
ruoyi-ui/src/
├── api/
│ └── ccdi/
│ └── staffFmyRelation.js
└── views/
└── ccdiStaffFmyRelation/
└── index.vue
五、数据字典
5.1 关系类型字典
字典类型:ccdi_relation_type
字典值:
- 配偶
- 父亲
- 母亲
- 儿子
- 女儿
- 祖父
- 祖母
- 外祖父
- 外祖母
- 兄弟姐妹
5.2 证件类型字典
字典类型:ccdi_cert_type(新建或复用)
字典值:
- 身份证
- 护照
- 军官证
- 其他
5.3 性别字典
字典类型:sys_user_sex(复用)
字典值:
- 男(M)
- 女(F)
- 其他(O)
六、与参考代码的校验对照
6.1 必须保持一致的关键点
1. Controller接口结构:
- 接口路径、参数命名、返回值格式与CcdiPurchaseTransactionController完全一致
- 使用MyBatis Plus的Page进行分页
- 使用@PreAuthorize注解进行权限控制
- 使用@Operation注解标注Swagger文档
2. 异步导入流程:
- importData接口立即返回taskId
- 使用ImportResultVO封装返回结果
- importStatus接口返回ImportStatusVO
- importFailures接口支持分页查询失败记录
3. 前端UI交互:
- 导入对话框自动轮询importStatus接口
- 进度条显示导入进度
- 完成后显示导入摘要
- 失败记录以可展开的表格形式展示
4. Excel模板:
- 使用@DictDropdown注解为字典字段添加下拉框
- 字段顺序与表单一致
- 必填字段标注红色星号
6.2 实现后校验清单
创建实施方案后,需要对照采购交易管理代码逐项校验:
- Controller接口签名是否一致
- Service层方法命名是否一致
- DTO/VO类的命名和字段是否一致
- 前端API调用方式是否一致
- 前端页面布局和交互流程是否一致
- 导入功能的状态轮询机制是否一致
- 导入失败记录的展示方式是否一致
七、实施步骤
阶段1:数据库和字典准备
- 确认数据库表
ccdi_staff_fmy_relation已存在(或创建) - 添加唯一索引:
uk_person_cert (person_id, relation_cert_no) - 创建数据字典:
ccdi_relation_type(10种关系类型) - 配置菜单:信息维护 > 员工亲属关系
阶段2:后端开发
- 生成实体类、Mapper、Service、Controller基础代码
- 创建VO/DTO类(参照采购交易的结构)
- 实现Excel导入导出类(添加@DictDropdown注解)
- 实现Service层业务逻辑(含唯一性校验、person_id存在性校验)
- 实现异步导入Service(使用线程池+Redis)
- 实现Controller层接口
- 配置Swagger注解
阶段3:前端开发
- 创建API文件
staffFmyRelation.js(参照purchaseTransaction.js) - 创建Vue页面
index.vue(参照purchase交易的布局) - 实现列表页(查询、表格、分页)
- 实现新增/修改对话框(分组两列布局)
- 实现导入功能(含轮询、进度条、失败记录展示)
阶段4:测试和校验
- 编写测试脚本(使用admin/admin123获取token)
- 测试CRUD功能
- 测试Excel导入导出
- 与采购交易代码对照校验(使用校验清单)
- 生成API文档
八、文档输出
- 设计文档:
doc/plans/2026-02-09-ccdi-staff-fmy-relation-design.md - API文档:
doc/api/ccdi_staff_fmy_relation_api.md
九、参考文档
- 采购交易管理:
CcdiPurchaseTransactionController.java - 招聘信息管理:
CcdiStaffRecruitmentController.java - 前端参考:
ruoyi-ui/src/views/ccdiPurchaseTransaction/index.vue