源文件:仪陇表务管理系统-PRD-04-功能需求说明-15-换表管理-V1.0.docx 导出时间:2026-05-26 10:34
仪陇表务管理系统 产品需求说明书 04-功能需求说明 换表管理
文档版本:V1.0
对应 01 版本:仪陇表务管理系统-PRD-01-总体说明-V1.0
模块序号:15
模块名称:换表管理
本模块覆盖批量换表与零散户换表申请、审批、任务派单、外业换表及旧表退返联动。含 Web「换表申请」「换表任务管理」及 App「换表任务(App)」。旧表退回总仓在「水表退回申请-分仓」办理;对应《PRD-03》批量换表、零散户换表流程的申请与执行段。
发起批量或零散换表申请并提交审批。审批通过后驱动换表任务管理与出库登记。
表务营业办/供水站职员;表务营业办/供水站管理人员;表务系统管理员
表务营业办/供水站职员:可见、可操作本营业办(或本供水站)范围内换表申请;「历史记录」Tab 仅展示本人发起的申请工单。
表务营业办/供水站管理人员、表务系统管理员:按组织范围可见、可操作或只读(管理员全公司)。
以换表申请单及关联工单为业务主体;换表类型区分批量/零散。
本菜单仅发起与查询;出库在出库管理,任务在换表任务管理,现场作业在 App。
流程概要
抄表员/业务人员发起 → 站长/主任初审 → 分公司分管领导复审 → 通过后驱动换表任务管理派单;批量与零散户通过申请单「换表类型」区分,后续出库、外业、验收、旧表退返按类型走《PRD-03》对应分支。
环节说明表
| 序号 | 环节名称 | 环节类型 | 责任岗位 | 须填写 / 处理内容 | 审核结果选项 | 通过后流向 | 驳回 / 其他结果流向 | 抄送 |
|---|---|---|---|---|---|---|---|---|
| 1 | 换表申请发起 | 发起 | 表务营业办/供水站职员 | 填报换表申请基础信息及换表明细(见「一级页面:换表申请-tab-工单发起」) | 提交 | 换表申请初审 | — | — |
| 2 | 换表申请初审 | 审核 | 表务营业办/供水站管理人员 | 核查申请真实性、信息完整性,核定作业人员;填写审核意见 | 通过;驳回 | 换表申请复审 | 退回换表申请发起 | — |
| 3 | 换表申请复审 | 审核 | 表务分公司领导班子 | 复核业务合规性、物资匹配与实施必要性;填写审核意见 | 通过;驳回 | 流程通过(系统自动处理) | 退回换表申请初审 | — |
| 4 | 任务派单衔接 | 系统自动 | 系统 | 生成换表待派单任务或待出库登记提示 | — | 流程完结 | — | — |
审核通过后数据影响
生成/更新换表申请记录及关联工单,工单状态为「已通过」。
驱动「换表任务管理」生成待派单任务(或待关联出库)。
零散换表须在出库登记时填写计划安装用户编号;批量换表按申请范围派单。
关联界面逻辑闭环
发起侧:历史 Tab/详情展示工单状态、任务状态、出库状态。
任务侧:通过后可在换表任务管理派单;详情展示任务编号、执行人、任务状态。
出库侧:办理入口在出库管理;状态回写一致。
零散户:App 提交时户表不匹配须填原因,与验收、出库计划用户一致。
审核界面说明
标准界面:复用工单中心「二级页面:工单办理」。
本业务差异:初审环节可核定计划安装人;复审环节只读展示换表明细及换表类型。
#整体布局
-- 菜单入口:Tab 页结构;Tab 列表:工单发起(本 Tab,默认选中)、历史记录(见「一级页面:换表申请-tab-历史记录」)
-- 本 Tab 内容:申请表单区 + 业务明细表格(如有);底部常驻「提交」「重置」
#信息展示
-- 申请基础信息区
-- 申请部门:只读,默认当前用户所属部门
-- 申请人:只读,默认当前登录用户
-- 申请日期:只读,默认当前日期
-- 换表类型:必填,单选(批量换表、零散换表)
-- 换表原因:必填,下拉
-- 项目名称:选填
-- 备注:选填
-- 换表明细:表格(用户编号、用户名称、旧表编号、地址等;批量可批量导入)
#底部按钮
-- 提交:校验必填项及明细规则后提交,进入审批流程
-- 重置:清空表单;有已填内容时二次确认
#交互说明
-- 提交成功后提示「提交成功」,自动切换至 Tab「历史记录」并刷新列表
-- Tab 切换时保留未提交内容;刷新页面后未提交内容不保留
#整体布局
-- 菜单入口 Tab「历史记录」;上下结构:查询条件区 + 历史工单列表
-- 数据范围:仅当前登录账号作为发起人提交的换表申请工单
#查询条件
-- 工单编号:文本,支持模糊搜索
-- 申请单号:文本,支持模糊搜索
-- 工单状态:下拉单选(全部、审批中、已通过、已驳回、已撤销)
-- 申请日期:日期范围选择
-- 功能按钮:查询、重置
#数据列表
-- 表格标题:我的换表申请
-- 表格字段:工单编号、申请单号、申请日期、换、表、类、型、、、明、细、户、数、当前节点、工单状态、提交时间
-- 行内操作:详情
#交互说明
-- 点击工单编号、行内「详情」或列表行,打开「弹窗:换表申请工单详情」
-- 列表按提交时间倒序,支持分页
#弹窗类型
-- 抽屉弹窗(右侧滑出);遮罩:有;主页面:不可操作
#整体布局
-- 宽度约 960px;全高;内部分 Tab:申请信息 / 换表明细
#弹窗标题
-- 换表申请详情 - {工单编号}
#标题栏操作
-- 关闭(×):关闭抽屉,返回当前 Tab 列表
#信息展示
-- Tab·申请信息:只读展示对应申请及业务信息
-- Tab·换表明细:只读展示对应申请及业务信息
-- Tab·审批记录:审批时间轴(环节、处理人、审核结果、审核意见、处理时间)
#底部按钮
-- 关闭:关闭抽屉
-- 去处理:仅审批中且当前用户为当前节点处理人时显示,跳转工单中心「二级页面:工单办理」
-- 已通过时展示关联任务编号、任务状态(只读)
#交互说明
-- 本功能为只读查看 / 跟踪,非审核办理页
换表作业统筹与派单,支撑工单通过后自动派单、直接派单及执行进度跟踪。零散换表出库须登记计划安装用户编号。
表务营业办/供水站管理人员;表务分公司管理人员;表务系统管理员
表务营业办/供水站管理人员:可见、可操作本营业办(或本供水站)换表任务。
表务分公司管理人员:可见、可操作本分公司及下属范围任务。
表务系统管理员:全公司可见、可操作。
本菜单承接《PRD-03》换表执行阶段的派单环节;与出库管理、App 换表任务联动。
验收通过后驱动旧表归集及「水表退回申请-分仓」或退返流程。
#整体布局
-- 查询区 + 任务列表;顶部「新建任务」「派单」
#查询条件
-- 任务编号、关联申请单号、换表类型、任务状态、执行人、日期范围
#数据列表
-- 字段:任务编号、换表类型、关联申请、计划安装人、执行人、状态、创建时间
-- 行内操作:详情、派单、关闭
#交互说明
-- 换表申请通过后自动生成待派单记录;支持直接派单(须已出库或同步办理出库)
-- 零散换表派单须带计划安装用户编号;打开 App「换表任务(App)」
#弹窗类型
-- 抽屉;只读+操作
#信息展示
-- 任务、申请、出库水表、旧表归集状态、验收状态
#底部按钮
-- 派单、关闭、跳转出库(待出库时)
换表安装员外业换表、录入全套信息、旧表现场归集及户表校验。
表务营业办/供水站职员(安装员)
表务营业办/供水站职员:仅本人被指派换表任务。
对应《PRD-03》外业换表、数据录入、匹配校验环节;验收在安装验收或换表验收流程(与安装验收岗位共用规则时按任务类型区分)。
#整体布局
-- 本人换表任务列表
#页面标题
-- 换表任务
#数据列表
-- 任务编号、地址、用户、状态;操作:接单/作业
#整体布局
-- 信息区 + 填报区 + 旧表归集区
#信息展示
-- 必填:旧表编号、新表编号、实际安装用户编号、实际安装人、作业时间
-- 全套安装信息:安装地址、工况等(零散换表必填项更全)
-- 拍照留痕、扫码识表
#交互说明
-- 提交时校验新表+实际用户与出库计划用户一致性;不一致须填原因
-- 提交后进入待验收;旧表信息写入旧表归集清单
以下内容合并自
design/功能设计/,与 PRD 需求章节配套使用。数据模型详见design/数据库设计-V1.0.md。
# 仪陇表务 — 功能设计 15 换表管理 V1.0
需求来源:
../demand/功能需求说明/仪陇表务管理系统-PRD-04-功能需求说明-15-*.md
数据模型:见 数据库设计-V1.0.md
接口约定:见本文 §接口设计(研发)、仪陇表务-公共接口说明-V1.0.md、00-总体框架设计-V1.0.md
| 项 | 说明 |
|---|---|
| 模块序号 | 15 |
| 模块名称 | 换表管理 |
| 后端包(建议) | com.tofly.wm.manage.replace |
| 业务模式 | 申请工单+任务 |
| 工单 | REPLACE_APPLY |
wssmet_replaceapply_wwssmet_replaceapplylist_wwssmet_replacetask_wwssmet_replacerec_wextends BaseEntity;逻辑删除 Boolean deleted ↔ deleted。DictEntry + @DictDirectory(MeterConstant.*) ↔ 库列 VARCHAR2;组织/用户 OrganizationEntry/UserNameEntry ↔ 库列 NUMBER(19);附件 FileEntryList/FileEntry 用 @TableField(exist = false),无库列。process_instance_id / work_order_code / approve_status;工单反查 (无本地表,见 workflow).TABLE_NAME + TABLE_ID。批量/零散申请→出库→外业换表→验收→旧表退回链路。
| 方法 | 路径(示例前缀) | 说明 |
|---|---|---|
| — | /replaceApply/ |
见 PRD 界面 |
| — | /replaceTask/ |
见 PRD 界面 |
GET /page、GET /list、POST /update、DELETE /{id}、DELETE /deleteByIds。ResultResponse<...>,见下文 §接口设计(研发)各接口出参(禁止 T/Vo 占位)。遵循 PRD-02:菜单角色 + 组织数据权限 + 工单岗位权限;具体角色见 PRD-04 各功能「菜单权限」「数据权限」章节。
| 上游 | 下游 |
|---|---|
| 见 PRD-03 流程说明 | 见 PRD-01 总体主流程 |
本设计仅依据 ../demand/ PRD 与 数据库设计-V1.0.md;实现时遵循 java6/java-ylsw-bw.md 与 database-design.mdc(`wssmet_` 表名),不参照存量业务表与接口。*
统一前缀:
/api/wm/manage/replace;各接口 出参 须为具体泛型(见下文,禁止T/Vo占位);公共约定见 仪陇表务-公共接口说明-V1.0.md。
| 项 | 内容 |
|---|---|
| 接口说明 | 分页查询换表申请 |
| 请求地址 | GET /api/wm/manage/replace/replaceApply/page |
| 请求类型 | GET |
入参(Query(PageQuery))
| 字段 | 类型 | 说明 |
|---|---|---|
| applyCode | String | 申请编号 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| replaceReasonCode | String(字典 code) | 换表原因编号 |
| projectName | String | 项目 |
| remark | String | 备注 |
| workOrderCode | String | 工单编号(展示/台账查询) |
| approveStatus | String(枚举 code) | 审批状态 |
出参
外层包装 ResultResponse 含 code、message、data,见 公共接口说明 §1.3。
data(PageInfo)字段
| 字段 | 类型 | 说明 |
|---|---|---|
| pageNum | Integer | 当前页码 |
| pageSize | Integer | 每页条数 |
| total | Long | 总记录数 |
| pages | Integer | 总页数 |
| list | List | 当前页数据列表 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | String | 主键 |
| applyCode | String | 申请 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| replaceReasonCode | String(字典 code) | 换表原因 |
| projectName | String | 项目 |
| taskId | Long | 换表任务ID,关联wssmet_replacetask_w表的id字段 |
| remark | String | 备注 |
| processInstanceId | Long | workflow 流程实例ID(工单中心外挂,不落本地工单表) |
| workOrderCode | String | 工单编号(展示/台账查询) |
| approveStatus | String(枚举 code) | 审批状态 |
| 项 | 内容 |
|---|---|
| 接口说明 | 列表查询换表申请 |
| 请求地址 | GET /api/wm/manage/replace/replaceApply/list |
| 请求类型 | GET |
入参(Query)
| 字段 | 类型 | 说明 |
|---|---|---|
| applyCode | String | 申请编号 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| replaceReasonCode | String(字典 code) | 换表原因编号 |
| projectName | String | 项目 |
| remark | String | 备注 |
| workOrderCode | String | 工单编号(展示/台账查询) |
| approveStatus | String(枚举 code) | 审批状态 |
出参
外层包装 ResultResponse 含 code、message、data,见 公共接口说明 §1.3。
data(List)元素字段
ReplaceApplyVo 字段
| 字段 | 类型 | 说明 |
|---|---|---|
| id | String | 主键 |
| applyCode | String | 申请 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| replaceReasonCode | String(字典 code) | 换表原因 |
| projectName | String | 项目 |
| taskId | Long | 换表任务ID,关联wssmet_replacetask_w表的id字段 |
| remark | String | 备注 |
| processInstanceId | Long | workflow 流程实例ID(工单中心外挂,不落本地工单表) |
| workOrderCode | String | 工单编号(展示/台账查询) |
| approveStatus | String(枚举 code) | 审批状态 |
| 项 | 内容 |
|---|---|
| 接口说明 | 查询换表申请详情 |
| 请求地址 | GET /api/wm/manage/replace/replaceApply/{id} |
| 请求类型 | GET |
入参(Path: id)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | String | 主键 |
出参
外层包装 ResultResponse 含 code、message、data,见 公共接口说明 §1.3。
data(ReplaceApplyVo)字段
ReplaceApplyVo 字段
| 字段 | 类型 | 说明 |
|---|---|---|
| id | String | 主键 |
| applyCode | String | 申请 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| replaceReasonCode | String(字典 code) | 换表原因 |
| projectName | String | 项目 |
| taskId | Long | 换表任务ID,关联wssmet_replacetask_w表的id字段 |
| remark | String | 备注 |
| processInstanceId | Long | workflow 流程实例ID(工单中心外挂,不落本地工单表) |
| workOrderCode | String | 工单编号(展示/台账查询) |
| approveStatus | String(枚举 code) | 审批状态 |
| detailList | List | 明细列表 |
ReplaceApplyListVo 字段
| 字段 | 类型 | 说明 |
|---|---|---|
| id | String | 主键 |
| applyId | Long | 换表申请ID,关联wssmet_replaceapply_w表的id字段 |
| userNo | String | 用户 |
| userName | String | 用户 |
| oldMeterCode | String | 旧水表 |
| address | String | 地址 |
| 项 | 内容 |
|---|---|
| 接口说明 | 新增换表申请;提交时同步发起 workflow,回写 process_instance_id / work_order_code / approve_status |
| 请求地址 | POST /api/wm/manage/replace/replaceApply/ |
| 请求类型 | POST |
入参(Body: Dto)
| 字段 | 类型 | 说明 |
|---|---|---|
| applyCode | String | 申请编号 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| replaceReasonCode | String(字典 code) | 换表原因编号 |
| projectName | String | 项目 |
| taskId | Long | 换表任务ID,关联wssmet_replacetask_w表的id字段 |
| remark | String | 备注 |
| processInstanceId | Long | workflow 流程实例ID(工单中心外挂,不落本地工单表) |
| workOrderCode | String | 工单编号(展示/台账查询) |
| approveStatus | String(枚举 code) | 审批状态 |
出参
data 字段
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Long | 新增记录主键 |
| 项 | 内容 |
|---|---|
| 接口说明 | 修改换表申请 |
| 请求地址 | POST /api/wm/manage/replace/replaceApply/update |
| 请求类型 | POST |
入参(Body: Dto(含 id))
| 字段 | 类型 | 说明 |
|---|---|---|
| applyCode | String | 申请编号 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| replaceReasonCode | String(字典 code) | 换表原因编号 |
| projectName | String | 项目 |
| taskId | Long | 换表任务ID,关联wssmet_replacetask_w表的id字段 |
| remark | String | 备注 |
| processInstanceId | Long | workflow 流程实例ID(工单中心外挂,不落本地工单表) |
| workOrderCode | String | 工单编号(展示/台账查询) |
| approveStatus | String(枚举 code) | 审批状态 |
出参
data 无业务字段(null)。
| 项 | 内容 |
|---|---|
| 接口说明 | 逻辑删除换表申请(支持批量) |
| 请求地址 | DELETE /api/wm/manage/replace/replaceApply/deleteByIds?ids=1,2 |
| 请求类型 | DELETE |
入参(Query: ids)
| 字段 | 类型 | 说明 |
|---|---|---|
| ids | String | 主键,逗号分隔 |
出参
data 无业务字段(null)。
| 项 | 内容 |
|---|---|
| 接口说明 | 分页查询换表任务 |
| 请求地址 | GET /api/wm/manage/replace/replaceTask/page |
| 请求类型 | GET |
入参(Query(PageQuery))
| 字段 | 类型 | 说明 |
|---|---|---|
| taskCode | String | 任务编号 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| planUserNo | String | 计划用户 |
| taskStatusCode | String(枚举 code) | 任务状态 |
| oldMeterCollectStatusCode | String(枚举 code) | 旧水表归集状态 |
出参
外层包装 ResultResponse 含 code、message、data,见 公共接口说明 §1.3。
data(PageInfo)字段
| 字段 | 类型 | 说明 |
|---|---|---|
| pageNum | Integer | 当前页码 |
| pageSize | Integer | 每页条数 |
| total | Long | 总记录数 |
| pages | Integer | 总页数 |
| list | List | 当前页数据列表 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | String | 主键 |
| taskCode | String | 任务 |
| applyId | Long | 换表申请ID,关联wssmet_replaceapply_w表的id字段 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| planUserNo | String | 计划用户 |
| executorId | Long | 执行人ID,关联tf_user表的id字段 |
| taskStatusCode | String(枚举 code) | 任务状态 |
| outRecordId | Long | 出库主单ID,关联wssmet_invout_w表的id字段 |
| oldMeterCollectStatusCode | String(枚举 code) | 旧水表归集状态 |
| 项 | 内容 |
|---|---|
| 接口说明 | 列表查询换表任务 |
| 请求地址 | GET /api/wm/manage/replace/replaceTask/list |
| 请求类型 | GET |
入参(Query)
| 字段 | 类型 | 说明 |
|---|---|---|
| taskCode | String | 任务编号 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| planUserNo | String | 计划用户 |
| taskStatusCode | String(枚举 code) | 任务状态 |
| oldMeterCollectStatusCode | String(枚举 code) | 旧水表归集状态 |
出参
外层包装 ResultResponse 含 code、message、data,见 公共接口说明 §1.3。
data(List)元素字段
ReplaceTaskVo 字段
| 字段 | 类型 | 说明 |
|---|---|---|
| id | String | 主键 |
| taskCode | String | 任务 |
| applyId | Long | 换表申请ID,关联wssmet_replaceapply_w表的id字段 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| planUserNo | String | 计划用户 |
| executorId | Long | 执行人ID,关联tf_user表的id字段 |
| taskStatusCode | String(枚举 code) | 任务状态 |
| outRecordId | Long | 出库主单ID,关联wssmet_invout_w表的id字段 |
| oldMeterCollectStatusCode | String(枚举 code) | 旧水表归集状态 |
| 项 | 内容 |
|---|---|
| 接口说明 | 查询换表任务详情 |
| 请求地址 | GET /api/wm/manage/replace/replaceTask/{id} |
| 请求类型 | GET |
入参(Path: id)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | String | 主键 |
出参
外层包装 ResultResponse 含 code、message、data,见 公共接口说明 §1.3。
data(ReplaceTaskVo)字段
ReplaceTaskVo 字段
| 字段 | 类型 | 说明 |
|---|---|---|
| id | String | 主键 |
| taskCode | String | 任务 |
| applyId | Long | 换表申请ID,关联wssmet_replaceapply_w表的id字段 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| planUserNo | String | 计划用户 |
| executorId | Long | 执行人ID,关联tf_user表的id字段 |
| taskStatusCode | String(枚举 code) | 任务状态 |
| outRecordId | Long | 出库主单ID,关联wssmet_invout_w表的id字段 |
| oldMeterCollectStatusCode | String(枚举 code) | 旧水表归集状态 |
| 项 | 内容 |
|---|---|
| 接口说明 | 新增换表任务 |
| 请求地址 | POST /api/wm/manage/replace/replaceTask/ |
| 请求类型 | POST |
入参(Body: Dto)
| 字段 | 类型 | 说明 |
|---|---|---|
| taskCode | String | 任务编号 |
| applyId | Long | 换表申请ID,关联wssmet_replaceapply_w表的id字段 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| planUserNo | String | 计划用户 |
| executorId | Long | 执行人ID,关联tf_user表的id字段 |
| taskStatusCode | String(枚举 code) | 任务状态 |
| outRecordId | Long | 出库主单ID,关联wssmet_invout_w表的id字段 |
| oldMeterCollectStatusCode | String(枚举 code) | 旧水表归集状态 |
出参
data 字段
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Long | 新增记录主键 |
| 项 | 内容 |
|---|---|
| 接口说明 | 修改换表任务 |
| 请求地址 | POST /api/wm/manage/replace/replaceTask/update |
| 请求类型 | POST |
入参(Body: Dto(含 id))
| 字段 | 类型 | 说明 |
|---|---|---|
| taskCode | String | 任务编号 |
| applyId | Long | 换表申请ID,关联wssmet_replaceapply_w表的id字段 |
| replaceTypeCode | String(枚举 code) | 换表类型 |
| planUserNo | String | 计划用户 |
| executorId | Long | 执行人ID,关联tf_user表的id字段 |
| taskStatusCode | String(枚举 code) | 任务状态 |
| outRecordId | Long | 出库主单ID,关联wssmet_invout_w表的id字段 |
| oldMeterCollectStatusCode | String(枚举 code) | 旧水表归集状态 |
出参
data 无业务字段(null)。
| 项 | 内容 |
|---|---|
| 接口说明 | 逻辑删除换表任务(支持批量) |
| 请求地址 | DELETE /api/wm/manage/replace/replaceTask/deleteByIds?ids=1,2 |
| 请求类型 | DELETE |
入参(Query: ids)
| 字段 | 类型 | 说明 |
|---|---|---|
| ids | String | 主键,逗号分隔 |
出参
data 无业务字段(null)。