仪表管理需求文档
==============

**1. 流程图**
----------
----------
### [仪表管理-操作流程](https://pro.modao.cc/app/ea38650adb1b43bac2e9285f68cdc9dd352ba444)



```flow
st=>start: 创建仪表
cond1=>condition:  查看仪表
cond2=>condition: 抄表
op3=>operation: 编辑仪表
op4=>operation: 换表
op5=>operation: 仪表度数
e=>end: 实际行度

st->cond1(yes)
op5->e
op3->cond1
op4->cond2
cond1(yes)->cond2(yes)
cond1(no)->op3
cond2(yes)->op5
cond2(no)->op4
```

----------
**2. 产品原型**
-----------
----------
### [原型链接](https://pro.modao.cc/app/ea38650adb1b43bac2e9285f68cdc9dd352ba444)
涉及页面为：*住户表管理及其子页面*、*公共表管理及其子页面*
 
----------
**3. 业务说明**
-----------
----------
**1）新建仪表**
 > * **选择位置：**左侧楼栋结构信息决定了当前页面的内容，创建仪表之前需手动选择所要创建的仪表所在的具体位置（具体位置至少选择小区，楼栋，单元等信息可在创建页面进行修改）。
  ![住户列表](image/住户列表.png)
 > * **创建仪表（住户表）：**
  ![创建仪表（住户表）](image/创建仪表（住户表）.png)
>  * 1.住户表管理功能下，创建仪表会默认创建住户表。
>  * 2.所属位置：会根据点击创建仪表时所查看的页面（具体房屋下，仪表查看页面）来自动填写，当没有具体的房屋位置时（只点击上级位置，未点击房屋），则继承小区、楼栋、单元信息，由使用者手动选择房间号。住户表位置需要精确到房间号。
  ![创建仪表（住户表）（所属位置选择）](image/创建仪表（住户表）（所属位置选择）.png)
>  * 3.表名称：表名称是仪表日常使用中展现的名称，需要保证小区级别的唯一性，推荐命名方式为手动输入：房间号+表类型+编号。系统不做自动命名或自动生成房屋号前缀。
>  * 4.倍数：倍数用以计算实际行度，默认倍数为1。
>  * 5.仪表回程：仪表回程非必填项，其中机械仪表一般会有最大读数，对大读数用于抄表进位计算。电子仪表可无最大读数。
>  * 6.初始度数：作为仪表的第一次读数，用以显示和计算后续抄表产生的实际行度。
>  * 7.计费模式：仅做属性判断标签，包含：抄表计费，预充值计费。
 > * **创建仪表（公共表）：**
   ![创建仪表（公共表）](image/创建仪表（公共表）.png)
>  * 1.公共表管理功能下，创建仪表会默认创建公共表。
>  * 2.所属位置：与住户表所属位置整体逻辑一致，但公共表位置的精确度级别为：小区、楼栋或单元。不可精确到房间。
>  * 3.分摊方式：分摊仅仅作为一个仪表属性判断标签。
>  * 4.下级表：下级表可以同时选择公共表和住户表，根据实际从属关系进行编辑。

**2）仪表筛选/查找**
 > * **住户表管理：**通过左侧小区楼栋列表进行选择，选择的小区、楼栋、单元或房屋在顶部展示，页面内展示属于主体范围内的所有仪表。仪表排列顺序优先根据更新时间倒叙排列（最近更新的仪表在前），时间一致时根据楼栋与房屋的排序依据进行排列，同房屋仪表根据创建时间先后再进行排序。
 > * **筛选仪表：**现在可通过两个维度进行仪表筛选。
>  * 1.更新时间维度，按照日期进行区间选择，筛选出时间区间内更新过读数的仪表。
   ![筛选（时间区间）](image/筛选（时间区间）.png)
>  * 2.表类型维度，按照水电表类型进行筛选。
   ![筛选（表类型）](image/筛选（表类型）.png)

**3）仪表信息查看/修改**
  ![仪表信息（缩略与详情）](image/仪表信息（缩略与详情）.png)
 > * **仪表信息列表缩略：**仪表管理页面默认查看列表缩略。
>  * 1.表名称/表类型：表名称与创建仪表中的表名称一致，不存在系统自动加入房屋号前缀的情况。表类型以标签形式存在，当前只存在四种标签，两类：水表、电表、住户表、公共表。
   ![表属性](image/表属性.png)
>  * 2.更新时间与当前读数：最近一次的抄表读数与抄表时间进行显示，时间格式为YYYY/MM/DD HH:MM:SS
>  * 3.下级表（公共表）：公共表的表标签后可直接点击查看已经关联的下级表。
   ![关联仪表](image/关联仪表.png)
 > * **仪表信息列表详情：**点击仪表列表缩略的空白处可展开仪表，同时只支持展开一个仪表详情。展开后按照时间倒叙排列（最近操作在前），记录抄表信息，其中换表操作用标签标注。默认展开最近六次的抄表信息，点击查看更多再展开六条记录，以此类推，无上限。
 > * **仪表信息：**点击仪表名称可查看仪表信息弹窗。
    ![仪表信息](image/仪表信息.png)
 > * **仪表信息编辑：**仪表信息弹窗可点击编辑，可对仪表的设置信息进行修改，修改原则与创建仪表一致，但已有读数的仪表无法设置初始度数与倍数。
    ![仪表编辑](image/仪表编辑.png)

**4）抄表/换表**
 > * **在线抄表：**列表缩略状态下可点击仪表的当前读数，点击后弹出抄表弹窗，填写表单完成抄表
    ![在线抄表](image/在线抄表.png)
>  * 1.当前读数：不可编辑，数据来源为最近的仪表读数，第一次抄表时的当前读数应为创建仪表时输入的初始读数。
>  * 2.实际行度：实际行度计算公式参考下面的字段说明公式。
>  * 3.上传凭证：凭证为图片上传，非必须。
>  * 4.抄表时间：时间记录格式为YYYY/MM/DD HH:MM:SS，系统默认根据弹窗弹出时间自动生成抄表时间。
 > * **在线换表：**换表与抄表在实际操作中属于同一状态下的衍生操作，换表中就同时完成了一次抄表（同理，创建仪表时的初始度数也可视为进行了一次抄表）
    ![在线换表](image/在线换表.png)
>  * 1.所属位置，表名称：保留原表信息，不可更改。
>  * 2.表编号：可变内容，进行唯一性检测，小区级别不可重复。
>  * 3.类型不可变，倍数可变，在换表时计算实际行度根据旧表倍数进行计算。
>  * 4.初始读数：新表初始度数作用与新建仪表保持一致，不参与和旧表读数间的行度计算。
>  * 5.换表体现：在仪表信息列表详情中，换表会以标签形态标注在抄表记录中。
   ![换表标签](image/换表标签.png)
 > * **抄表导出：**创建仪表按键下拉隐藏按键包含抄表导出
    ![抄表导出](image/抄表导出.png)
>  * 1.类型选择：选择表类型，仅可选择一种。
>  * 2.范围选择：与公共表选择下级表同类关联，可同时选择住户表与公共表同时导出。
>  * 3.导出模板：模板文件**抄表电子表格20190108131421**
 > * **模板文件：
    ![抄表导出（模板）](image/抄表导出（模板）.png)
>  * 1.文件名称：名称格式，**抄表电子表格+表格导出时间（时间精确到秒）**。表格内标题为**抄表电子表格，首行包括导出时间、导出表类型、导出表数量、导出操作人**。
>  * 2.表格内容（不可编辑）：小区、楼栋、房间号、表名称、表编号、表类型、最大读数、当前读数（最近一次抄表读数）、更新时间（最近一次抄表时间）这些数据自动生成，表格内无法编辑。
>  * 3.表格内容（可编辑）：最新读数（抄表数）、更新时间（手动填写，可只填写至日期，系统导入时默认补齐至日期0点）、操作员（需保持和系统内员工名称一致）。
>  * 4.表格内容（自动生成）：通过当前读数与最新读数进行行度计算，计算规则与行度计算公式一致。
 > * **抄表导入：**创建仪表按键下拉隐藏按键包含抄表导入，使用已经填写完成的抄表导出文件进行导入。
    ![抄表导入](image/抄表导入.png)
>  * 1.选择文件：选择本地文件进行导入。
>  * 2.重新选择：上传中与上传完成状态时可选择重新上传，自动打断当前的上传动作或数据对比状态。
>  * 3.数据对比：上传完成后系统自动进行数据对比，判断导入数据是否能成功录入，其中对比成功数据无误状态可直接完成导入操作。当数据错误时则需要在线表格预览，对错误数据进行查看，进而判断后续操作。
>  * 4.数据对比错误详情：页面待定。

----------
**4. 字段说明**
-----------

|    字段名称     | 备注     | 是否必填 |
|:-------------|:----|:----:|
| 所属位置 | 同时包含小区、楼栋、单元、房号等级别的位置信息，用以确认表与系统资产间的关系，其中住户表需精确到房号，公共表则可属于除房号外的任何一级。 |是|
| 表名称 | 用以描述表所在位置及基础属性的名称，需保证唯一性（1.0中保证唯一性的方法是自动在表名称前加入所在房号，2.0中表名称不进行此方式） |是|
| 表编号 | 小区真实的仪表资产编号或者出厂时的产品编号（后续用来生成二维码或者用于资产管理） |是|
| 表类型 | 当前仅有两种表类型：水表m³、电表KW·H |-|
| 表属性 | 表属性在创建时就已经选择（根据所属页面不同进行操作时就会区分），两种属性：住户表、公共表 |是|
| 倍数 | 当前仪表的读数与实际用量之间的倍数关系（默认为1），倍数可选择：1、10、100、1000。如：小区总表的倍数是100，抄表读数后实际行度为抄表差值的100倍，而非两次抄表的差值 |是|
| 仪表回程 | 仪表的最大读数，仅在机械表中有最大值需求，超过后涉及到表重置计算（1.0有相同概念），而电子表无最大读数，可根据是否有最大读数判断是否自动重置表读数 |否|
| 计费模式 | 仅做属性判断标签，包含：抄表计费，预充值计费 |是|
| 初始度数 | 创建仪表时的基础读数 |是|
| 抄表读数 | 抄表读数 |-|
| 当前读数 | 最近的读数信息 |-|
| 换表 | 在进行抄表操作时可同时进行换表的相关操作（线下实际的操作逻辑就是同时进行） |-|
| 旧表最终读数 | 旧表在被更换时的最终读数或者推测读数（表损坏时可能会进行读数推测但不影响系统计算逻辑） |是|
| 新表初始读数 | 新表在被更换时的最初读数（可为0） |是|
| 更新时间 | 每次操作都需要有精确到秒的时间记录 |-|
| 实际行度 | 本次抄表读数与上次读数的差值【计算公式：（本次读数-上次读数）倍数】，可为0，但不可为负数。在有最大读数的表下，当计算结果为负数时，根据最大值进行重置计算【计算公式：（最大值-上次读数+本次读数）倍数】，换表操作时显示当前读数为新表初始度数【计算公式：（旧表最终读数-上次读数）旧表倍数】 |-|
| 凭证 | 在抄表时可选择照片等方式进行凭证收集，非必填内容，根据小区管理自行规范 |否|
| 操作员 | 当前操作的工作人员账号名称，系统自动记录。在进行抄表导入时，可根据表格填写的操作员进行自动录入 |-|
| 分摊方式 | 此分摊方式仅作为仪表属性标注，不影响实际的算法和算法相关的分摊 |是|
| 下级表 | 与此公共表相关的所有下级表，下级表可为住户表或者其他公共表（暂定），此关联关系作为分摊相关算法的数据来源 |-|



